JAVA学习_07 面向对象的思想、类和对象、类的定义和对象的创建、成员变量和局部变量

1、面向对象。(其实就是JDK中已经有被封装好的类,我们可以直接调用相应功能的方法)

面向过程:当需要实现一个功能时,每一个具体的步骤都需要亲历亲为,详细处理每个细节。

面向对象:当需要实现一个功能时,不关心具体的实现步骤,而是找一个具有该功能的人,来帮我完成。

特点:封装、继承和多态

2、类和对象。

类:是一组属性和行为的集合,可以看成是一类事物的模板,使用事物的属性特征和行为来描述该类事物。(属性:该事物的状态信息;行为:该事物能做什么)

对象:一类事物的具体体现。对象是类的一个实例,是具体的。

关系:(1)类是对一类事物的描述,是抽象的。(2)对象是一类事物的实例,是具体的。(3)类是对象的模板,对象是类的实体。(例如:手机图纸和真实手机)

3、类的定义。

类的定义格式:

public class ClassName{

//成员变量:对应事物的属性,和定义变量基本相同,只不过位置发生变化,在类中,方法外。

//成员方法:对应事物的行为,去掉了static。

}

4、创建对象。(通常情况,一个类是不能被直接使用的,需要根据类创建一个对象,才能使用)

步骤:

(1)导包。也就是指出需要使用的类,在什么位置。

(2)创建,格式:类名称 对象名 = new 类名称();

(3)使用,分为两种情况:

         使用成员变量:对象名.成员变量名;

         使用成员方法:对象名.成员方法名(参数);

下图是定义类并创建对象的过程:

JAVA学习_07 面向对象的思想、类和对象、类的定义和对象的创建、成员变量和局部变量       JAVA学习_07 面向对象的思想、类和对象、类的定义和对象的创建、成员变量和局部变量

定义类,创建一个对象,对应的内存图:

(1)main方法入栈(压栈),声明Phone one,然后new了一个新的对象,所以在堆中分配内存给新对象(地址:0x666.),成员变量从方法区获得,并赋默认值,成员方法就直接赋予方法区中的地址值(地址:0x333)

(2)当调用成员变量赋值时,通过地址找到堆中的对应成员变量,并直接修改。

(3)当调用成员方法时,先从栈->堆->方法区->让call方法入栈->调用方法->call方法出栈(sendMessage方法相同)

JAVA学习_07 面向对象的思想、类和对象、类的定义和对象的创建、成员变量和局部变量

定义类,创建两个不同的对象,对应的内存图:(与上面不同的是,堆中会有两个不同地址的对象被创建,其实就是每个对象引用指向了一个,与下面形成对比)

JAVA学习_07 面向对象的思想、类和对象、类的定义和对象的创建、成员变量和局部变量

定义类,创建两个对象引用指向同一个对象空间,对应的内存图:(第二个对象引用是一个对象直接赋值的,所以指向的都是同一个对象,也就是在栈中存放的对象地址是相同的)

JAVA学习_07 面向对象的思想、类和对象、类的定义和对象的创建、成员变量和局部变量

使用对象类型作为方法的:左边是代码实现,右边是内存分配。首先method方法是和main方法一同定义在Demo04PhoneParam类中的。而Phone class是已经在其他java文件中定义好的类。(当一个对象作为参数,传递到方法中时,实际上传递的就是对象的地址值

JAVA学习_07 面向对象的思想、类和对象、类的定义和对象的创建、成员变量和局部变量

使用对象类型作为方法的返回值:跟传参一样,其实就是getPhone中的one获取了传参来的对象的地址值,然后就可以找到对应的对象,然后返回时依然把对象所在地址值返回。使main方法中的two也得到了对象的地址值(0x666)。

JAVA学习_07 面向对象的思想、类和对象、类的定义和对象的创建、成员变量和局部变量

注意事项:

(1)如果成员变量没有赋值,那么将会有一个默认值,规则和数组是一样的。

5.成员变量和局部变量的不同。

(1)定义的位置不一样。(局部变量:在方法内部;成员变量:在方法外部,在类中)

(2)作用范围。(局部变量:只有方法中可以使用,出了方法就不能用了;成员变量:整个类都可以通用)

(3)默认值不一样。(局部变量:没有默认值,需要手动赋值;成员变量:有默认值,规则和数组一样)

(4)内存的位置不一样。(局部变量:位于栈内存;成员变量:位于堆内存)

(5)生命周期不一样。(局部变量:随着方法入栈而诞生,随着方法出栈而消失;成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失。)