1 面向对象的特征
封装、继承、多态
2 类与对象
成员变量 和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。
成员方法 和以前定义方法是一样的,只不过把static去掉
3 文件名问题
在一个java文件中写两个类:一个基本的类,一个测试类。
建议:文件名称和测试类名称一致。
4 一个对象、二个对象、三个对象的内存图
一个对象
二个对象
三个对象
5 成员变量与局部变量的区别
A:在类中的位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
B:在内存中的位置不同
成员变量:在堆内存
局部变量:在栈内存
C:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化值不同
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
注意事项:: 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。如下图:
6 参数传递问题
形式参数
基本类型:形式参数的改变不影响实际参数(可以理解成局部变量的改变不影响全局变量)
引用类型:形式参数的改变直接影响实际参数
方法的参数是类名
如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。
7 匿名对象
应用场景
调用方法,仅仅只调用一次的时候。
匿名对象可以作为实际参数传递
8 this关键字
为什么要有this:
当我们的局部变量和成员变量相同的时候,如果我们不使用this关键字,那么会导致一个问题:
就是局部变量隐藏了成员变量的问题。
9 内存分配及栈和堆的区别:
栈: 存放的是局部变量
局部变量:在方法定义中或者方法声明上的变量都是局部变量。
堆: 存放的是所有new出来的东西
1: 每一个new出来的东西都会为其分配一个地制值。
2: 每一个变量都有一个默认的值
byte,short,int,long -- 0
float,double -- 0.0
char -- '\u0000'
boolean -- false
引用数据类型 -- null
3: 使用完毕就变成了垃圾,等待垃圾回收器对其回收