2019/04/29 小雨
一、* new创建对象做的三件事情:
- 1.在堆中为对象开辟空间,成员属性会跟随对象进入到堆内存并赋默认值
- 2.调用构造器为对象初始化信息
- 3.将地址返回值引用
- 构造器|构造方法|构造函数:
- 构造器是一个特殊的方法,只能和new一起使用
- 作用:
-
初始化对象信息,不是用来创建对象的
- 定义:
-
构造方法的名字必须与当前的类名一致 ,不需要返回值不需要void
-
修饰符 类名([参数列表]){
-
...
-
}
- 如果没有自定义构造器,编译器会自动为你添加空构造(不带参数的构造器)
- 如果存在自定义构造器,编译器这时不会再提供任何构造器,包括空构造
- 构造器是方法,方法就可以构成方法的重载
- 调用不同的构造器,看创建对象时候()中的参数列表匹配哪一个构造器的参数列表
- 修饰符可以是private,私有的,只能在本类中使用(单例)
- 构造器不能使用final,static,abstract修饰
- 总结:特殊的方法,只能通过new的使用使用,可以重载没有返回值和void,区分重载构造器看new后()的参数
二、** this: 指代当前new的对象,存储的就是当前对象的地址
- 1).在构造器的首行通过this调用当前其他构造器
-
this(); -->()匹配构造器的参数
- 2).区分同名成员变量和局部变量
-
如果不使用this,会发生就近原则
-
在构造器中,this指代当前new的对象
-
在方法中,this指代当前调用成员方法的这个对象
-
如果不存在同名变量的问题,默认省略this.
-
如果存在同名变量的问题,默认就近原则,区分成员,this.,this.不能省略
- 注意:
- 1.在构造器的首行调用其他构造器时候不能相互调用
- 2.如果不使用,会发生就近原则
- 3.this不能使用在static修饰的方法中
- 构造块在编译的时候会被放在构造器语句块中代码的最上面,如果存在this调用其他构造器,必然先调用其他构造器,因为this必须存在于首行才能调用其他构造器
三、 * static 关键字 静态的 - static修饰变量|静态变量|类变量,只能修饰成员变量,不能修饰局部变量
- static修饰方法|静态方法|类方法
- static修饰的内容的使用方式:
-
1.类名.
-
2.对象.
- 注意:
-
静态的内容是属于类的,成员的内容是属于对象的
-
静态的内容是独一份的,这个类的所有对象共享这个类中的静态内容
-
在静态的内容中只能直接使用静态的内容,不能直接使用成员的内容==>对象使用
-
非静态的内容中,可以直接使用成员的内容,可以直接使用静态的内容 */
四、* 块 block–>{} ==>自成作用域
- {}–>方法中,局部代码块|普通语句块 执行时机:调用方法
- {}–>类中方法外,构造块 执行时机:创建对象
- static{}–>静态块
- 1.构造块先于构造器执行,如果有多个构造块,从上到下一次执行
- 2.静态{}在第一次加载类的时候只执行一次,先于主方法执行,如果有多个静态块,从上到下一次执行
- 静态块 — main —构造块—构造器
五、 * 使用debug调试:
-
1.先打断点
-
2.debug模式运行 f5进入细节 f6下一步执行 f7返回方法的调用出
-
System.gc() 通知系统回收,但是无权决定是否回收,什么时候回收
-
finalize() 在垃圾回收机制来回收垃圾第一步会调用的方法
-
一定会调用finalize()方法的两种情况:
-
1.匿名对象
-
2.对象无引用状态
六、* 注意:不要定义与 jdk 相同的包,相同的类, 否则会引起很多你觉得莫名其妙的问题
*
- 导包: 模糊匹配 *
- 会拖慢编译效率,不会拖慢运行速度
- 静态导入:单独导入类中的静态的内容
-
可以导入变量可以导入方式
七、 * 为了解决安全隐患:在外部不能直接使用对象的属性
- 新的关键字 private 私有的 成员修饰符,不能修饰局部变量
- 私有的内容只能在当前类中使用*
- 如何使用私有的属性:
- 对使用的属性提供公共的访问方式 setter设置器 getter访问器
- 面向对象的三大特性之一:
- 封装:对外隐藏内部的实现细节,提供公共的访问方式就是封装
- 属性私有,公共的访问方式是封装的一个具体的体现(不能说封装是私有)
- 类,方法都是封装的体现
- 以后写模板类,属性都要私有,提供公共的访问方式
- 这种模板类|实体类|javabean
- 1.类是公共的public修饰
- 2.至少存在一个空构造
- 3.属性私有
- 4.公共的访问方式
-
- 抽取对象的共性定义为类
- 抽取类的共性定义为父类
八、* 为什么使用继承:
- 为了提高代码的复用性
- 如何使用继承(子承父业:拓展+延续):
- 子类 extends 父类 子类继承父类 *
- 使用继承优点:
- 1.提高代码的复用性
- 2.自动可以使用父类中的所有成员(属性和方法)
- 3.子类可以定义属于自己的属性和功能–>扩展 *
- 特点:
- 父类可以有多个子类,但是一个子类只能有一个父类–>单继承
- 单继承的优点:
- 使用简单
- 单继承的缺点:
- 不便于后期维护
- 父类|基类|超类
- 子类|派生类