静态代码块
格式:
Static
{
静态代码块执行语句;
}
特点:随着类的加载而加载,只执行一次,用于给类进行初始化。优先于主函数执行
一句person p=new person(“zhangsan,20”);
这句话都做了什么事情?
1.因为new用到了person.class,所以会先找到person.class文件并加载到内存中
2.执行该类中的static代码块,如果有的话,给person.class类进行初始化 static{执行语句;};
3.在堆内存中开辟空间,分配内存地址
4.在堆内存中建立对象的共有属性,并进行默认初始化 static 参数
5.对属性进行显示初始化 参数类型 参数= 参数值
6.对对象进行构造代码块初始化 {执行语句;}
7.对对象进行对应的构造函数初始化 类名(){执行语句;}
8.将内存地址付给栈内存中的P变量
当多个类中出现相同功能,但是功能主体不同时,这是可以进行向上提取,但是提取的只是功能的定义,而不提取功能主体,同时功能的定义前面用abstract修饰,表示抽象方法,同时类也要用abstract修饰,表示抽象类(study()——>功能的定义,{执行语句};——>功能主体 抽象方法表示为 :abstract 返回值类型 函数名());抽象就是看不懂
抽象的特点:
1. 抽象方法一定在抽象类中
2. 抽象方法和抽象类都必须被abstract修饰
3. 抽象类不可以用new创建对象,因为调用抽象方法没有意义
4. 抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用,如果子类值覆盖了部分抽象方法,那么该子类还是一个抽象类
抽象类和一般类没有什么太大不同,该怎么描述还怎么描述,只不过,该事物出现一些看不懂的东西,这些不确定的部分,也是该事物的功能,需要明确出现,但那是无法定义主体。通过抽象方法来表示。抽象类中可以定义抽象方法也可以定义一般方法,抽象类不可以实例化。
特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象
|