版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
三个修饰符
一、static 静态的
可以修饰属性、方法
1. static修饰属性 静态属性(类变量)
成员变量是每一个对象各自持有的一份独立空间,对象单方面的改变不会影响其他对象
a) 定义的语法
访问修饰符 static 数据类型 属性名;
定义的位置:定义在类中,方法的外面
注意:访问修饰符和static位置可以互换。
b) 特点
静态属性是整个类所共享的一份空间,任何一个对象改变了它的值,那么其他对
象跟着一块改变。(全类共享:基于这个类所创建的所有的对象共享一个)
c) 访问方式
1. 对象名.静态属性名; (不建议使用)
2. 类名.静态属性名;
2. static修饰方法 静态方法(类方法)
a) 定义语法
访问修饰符 static 返回值类型 方法名(参数列表){
//方法实现
}
b) 访问方式
1. 在类中访问本类的静态方法: 方法名(实参);
2. 在其他类中访问: 类名.方法名(实参);
//java.util.Arrays.copyOf() java.util.Arrays.sort()
//java.lang.Math.Sqrt(n); java.lang.Math.PI
c) 特点
1. 静态方法只能直接访问静态成员,不能直接访问非静态成员。
原因:在访问静态成员时,可能还没有创建对象,但是成员方法,成员变量
需要通过对象名(引用)进行,所以会造成指代不明确。所以在静态方
法中只能直接访问静态成员,不能直接访问非静态成员。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OnAzb1EO-1571962949532)(E:\Corejava\课堂笔记及代码\day13_三个修饰符\笔记\static不能直接访问普通成员.png)]
2. 在静态方法中不能使用this|super的前缀。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yFM7pWlH-1571962949532)(E:\Corejava\课堂笔记及代码\day13_三个修饰符\笔记\static不能直接访问普通成员2.png)]
3. 静态方法可以被继承,静态方法只能被静态方法覆盖,但是没有多态(多态 的特点:指的是父类引用指向子类对象,调用父类中的方法吗,如果这个方 法被子类覆盖了,那么执行的是子类覆盖之后的方法)
Super s = new Sub(); s.m1() 执行的是Super类的方法
s.m1()会被转换成Super.m1();
3. 动态代码块|初始代码块
a) 定义的位置:类中,方法的外面
b) 作用:可以为属性进行初始化的工作
c) 执行地位:在构造方法之前执行,和初始化属性按照顺序进行初始化
的动作.
4. 静态代码块
a) 定义位置: 类中,方法的外面,被static 修饰
b) 作用:为静态属性赋值
c) 执行地位:在类加载时,和静态属性的初始化工作按照顺序进行。
类加载的时候会触发静态代码块的执行
5. 类加载
a) 概念:JVM在第一次使用某一个类的时候会通过CLASSPATH找到编译之后生
成的.class文件,然后将类中所有的信息(类名,属性,方法,构造方
法,包结构,接口…)保存到内存中。类加载只会进行一次。
b) 类加载的时机
1. 第一次创建对象时会触发类加载的进行。
2. 第一次访问静态成员时会触发类加载的进行
3. 子类类加载会触发父类类加载的先进行
4. Class.forName(“全限定名”);
注意:只是声明引用,不创建对象不会进行类加载。
6. 对象的创建过程
a) 没有继承关系的对象创建过程
b)存在继承关系的对象创建过程
二、abstract 抽象的
1. 概念:像却不是的,具备某种对象的特征,但好像又不完整。
2. 可以修饰类和方法
3. abstract可以修饰类 ,此类为抽象类,那么此类就是不够完整,不够具体的类,此类不能new对象。
a) 语法:abstract class 类名{}
b) 抽象类的作用:
1. 可以为子类提供共性的属性和方法,那么父类共性+子类独有=完整的子类对象
(抽象类可以被继承,抽象类存在构造方法,在子类构造方法的第一行默认存
在一个super(),代表调用父类的构造方法,那么构建子类对象之前一定会先
构建父类对象,父类共性+子类独有组合成完整的子类对象)