abstract(抽象的)
1.修饰类 --> 抽象类
- 抽象类 不能创建对象,可以声明引用
- 抽象类可以定义属性和方法以及构造方法。
构造方法是在创建子类对象时使用(创建子类对象 先创建父类对象)
2.修饰方法 --> 抽象方法
- 语法:
public abstract 返回值类型 方法名(参数列表);
注意: public abstract 没有先后顺序
- 抽象方法只有声明 没有实现,连 { } 都没有
- 抽象方法只能定义在抽象类中
- 子类必须实现(覆盖)抽象父类中的抽象方法;否则,子类也必须定义为抽象类
抽象类作用
强制使用多态
static(静态的)
1.修饰属性:静态属性、静态变量、类变量
- 全类共享的 , 与创建多少个对象无关
- 访问方式:对象名.静态属性名;
类名. 静态属性名; ——> 常用
2.修饰方法:静态方法 - 语法:
public static 返回值类型 方法名(形参列表){ }
- 可以直接通过类名访问:类名.方法名(实参);
- 静态方法中只能访问静态成员(静态属性、静态方法)
静态方法中不能访问非静态成员 - 非静态方法中可以访问静态成员(静态属性、静态方法)
- 静态方法中不能使用this 和 super关键字
- 静态方法允许被继承,只允许静态方法覆盖;没有多态。
2.已知静态方法:
Arrays.sort()、Arrays.copyOf()
3.static修饰动态代码块——>静态代码块
-
动态代码块
a. 定义位置 : 类以内,方法外部
b. 语法:{ }
c. 在创建对象时,第二步,初始化属性时执行;初始化属性和动态代码块,
根据定义的先后顺 序,依次执行
-
静态代码块
a. 定义位置:类以内,方法外部
b. 语法:static{ }
c. 在类加载时执行。根据静态属性和静态代码块的定义的先后顺序,依次执行
类加载
当JVM 第一次使用一个类时,会通过classpath(类路径)找到对应的.class文件,将此类的所有信息(包名、类名、属性、构造方法…)加载并且保存在内存中。这个过程称之为类加载。类加载只进行一次
类加载时机:
- 第一次访问静态属性、调用静态方法 时
- 第一次创建对象时
- 创建子类对象时:
先进行父类类加载,再进行子类类加载
先构建父类对象,再构建子类对象 - Class.forName(类的全限定名);
4.修饰成员内部类 ——> 静态内部类
final(最终的)
1.修饰变量
被final修饰的变量,一旦赋值不可改变;称之为作用范围内的常量
修饰属性:
-
被final修饰的属性没有默认值
赋值时机:显示初始化、动态代码块、构造方法,只能选其一
注意: 通过构造方法赋值时,一定要保证每一个构造方法,能有效的赋值 -
被static和final修饰的属性称之为静态变量
静态常量赋值时机:显示初始化,静态代码 -
被final修饰的基本数据类型,值不可更改
被final修饰的引用数据类型,地址不可更改
2.修饰类 --> 断子绝孙类
不可被继承
String,Math,System被final修饰
3.修饰方法
不可被覆盖
总结
哪些修饰符可以修饰类:public,[default],abstract,final
哪些修饰符可以修饰方法:private,[default],protected、public,abstract、static、final
哪些可以修饰属性:private、[default]、protected、public,static、final
哪些修饰符不可以连用
private
和 abstract
不可以连用
static
和 abstract
不可以连用
final
和 abstract
不可以连用