9、三个修饰符

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45536396/article/details/102736085

三个修饰符

一、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(),代表调用父类的构造方法,那么构建子类对象之前一定会先

构建父类对象,父类共性+子类独有组合成完整的子类对象)

在这里插入图片描述

2. 可以声明为引用,强制使用多态。

(不能保存自身类型的对象,只能保存子类类型的对象,强制使用多态)

在这里插入图片描述

4. abstract修饰方法 抽象方法 不够完整,不够具体的方法,被abstract修饰

a) 特点

1. 一个类继承了一个抽象类,那么必须要实现抽象类中的抽象方法,否则这个类还是

一个抽象类。

2. 抽象类中可以存在普通方法,也可以没有抽象方法,但是抽象方法必须包含在抽象类中。

抽象类的用处:一般用于修饰父类 如Person Animal Shape

三、final 最终的 最后的

final能够修饰类、方法、变量

1. final修饰类 最终的类,最后的类

此类不能被继承 没有子类

System|Math|String都属于final修饰的类

2. final修饰的方法 最终的最后的方法

final修饰的方法可以被继承,但是不能被覆盖。

3. final修饰的变量 最终的变量 值不能改变 常量

a) 局部常量

赋值时机:显示初始化的时候必须赋值

b) 成员常量:

没有默认值,必须先赋值才能使用
赋值时机:必须在对象创建完毕之前赋值
1. 显示初始化
2. 动态代码块
3. 构造方法
注意:如果需要通过构造方法为final修饰的成员变量赋值,那么必须保证所有的构造方法都能正确
赋值。

c) 静态常量

没有默认值,必须手动赋值
赋值时机:必须在类加载结束之前赋值
1. 显示初始化
2. 静态代码块

d) 对象常量

final修饰基本数据类型的变量,值不能改变

final修饰引用数据类型的变量,地址不能改变。

四、修饰符的联合使用(private abstract static final 方法)

1. abstract 与 private能不能联合使用

不能,原因:abstract修饰的方法没有方法体,要求子类继承并覆盖

抽象方法,但是private修饰的方法不能被继承。

2. abstract 与 static 能不能联合使用

不能,原因:static修饰的方法可以通过类名进行调用,但是abstract

没有方法体,不能调用

3. abstract 与final 能不能联合使用

不能,原因:abstract需要被覆盖,但是final修饰的方法可以被继

承,但不能被覆盖

4. private static 和 final能不能联合使用

可以两两联合使用

3. abstract 与final 能不能联合使用

不能,原因:abstract需要被覆盖,但是final修饰的方法可以被继

承,但不能被覆盖

4. private static 和 final能不能联合使用

可以两两联合使用

猜你喜欢

转载自blog.csdn.net/weixin_45536396/article/details/102736085