Final(3)
1.修饰变量:不能被赋值
2.修饰类:不能被继承
3.修饰方法:不能被覆写
Abstract(2)
1.修饰类:抽象类,这个类没有实例
2.修饰方法:抽象方法,只有声明没有实现,需要子类继承
3.抽象类和普通类的区别是什么?
抽象类无法被实例化
Static(5)
和对象解绑
1.修饰类:和外部类对象解绑,存储在类上,类存放在方法区,类(加载)只被加载一次
*类加载:把类文件(.class)从硬盘加载到内存中
2.修饰变量:可以达到c语言全局变量的作用
3.修饰方法:方法的与运行阶段有区别,表现在调用栈
4.静态代码块:一般用来初始化静态变量,只被执行一次
5.静态导入
【attention】普通的成员函数一般都隐含了一个this指针,this指针指向类的对象本身,这个指针就像一根绳子“绑住了”非静态,而static不生成这个this指针,所以static可以做到和对象解绑
表现:
没法使用this关键字
没法直接访问普通属性
没法直接调用普通方法
对象的创建
1.new
2.反射
对象的实例化是做了个什么事情
1.从方法去中找该类的信息
如果没找到?触发类的加载(类的加载器:)
做月饼-找模子模型:
举个例子类似于要做一个月饼,你是不是首先需要找月饼模子,从方法中找该类的信息就是你到处找一个月饼模子,如果你要是自己找不到,就需要有人帮你找,类的加载器就是到处给你找月饼模子的部门
2.对象最终放在堆上
3.计算对象的大小(属性(包括父类))
4.开辟的空间初始化为0X0(属性的默认值都是0)
5.属性的初始化
优先执行前两个(按照书写顺序)
——————————————
1.定义时的初始化 int a=10;
2.构造代码块 {a=10;}
——————————————
最后执行
3.构造方法A(){a=10;}
6.对象的生命周期
1.开辟空间+设置)0x0
2.属性初始化阶段
3.真正生命
4.标记为死去
GC算法:1.怎么判断对象是否死去
2.怎么快速而高效的回收g