引言:修饰符:所有修饰符都是用来给内容添加功能或限制
第一种:abstract-抽象
父类通常时子类共性提炼出的概念,用来总结和约束子类,所以不应该能够被实例化的对象。建立在此基础上,父类中的某些行为方法的方法体也不应该存在,因为永远无法执行
抽象类:代码书写格式:
public abstract class 类名{}
abstract public class 类名{}
修饰符之间的书写顺序不做要求
使用规则:
1:无法实例化对象
2:通常情况下,父类应该成为抽象类
3:抽象父类中仍然存在构造
作用为:方便子类构造的执行
4:抽象类中可以存在非抽象内容
作用为:方便子类直接继承使用
5:抽象父类仍然可以参与多态
抽象方法:代码书写格式:
访问修饰符 abstract 返回值类型 方法名 (形参列表)
使用规则:
1:只能存在于抽象类
通常情况下,抽象父类中的行为方法都应该是抽象方法
2:子类必须对父类的抽象方法提供重写
非抽象子类无法存在于父类继承过来的抽象方法
可以将子类也声明为抽象类,这样就可以不重写父类的抽象方法
3:抽象父类的抽象方法作用:
在强制要求子类必须拥有该方法的基础上也必须提供方法重写
抽象类和抽象方法的关系
1:抽象类中可以存在非抽象方法
抽象方法必须存在于抽象类
抽象的好处:
可以使父类单纯为子类服务
更符合程序设计及现实逻辑
第二种:static -静态
静态属性:代码书写格式:
访问修饰符 static 数据类型 属性名
使用规则
1:不被某个对象独有,被该类的所有对象共享
2:静态内容独立存放在方法区的静态内容区中
JDK8.0之后,方法区被迁移至堆空间之中
3:可以通过类名.属性名的方式直接访问静态属性
4:如果静态属性进行了封装,无法通过类名.属性名直接访问属性
getter、setter方法不是静态的,则需要通过任意对象名.方法名访问
getter、setter方法是静态的,则可以通过类名.方法名访问
类加载
在第一次使用类内容时,通过CLASSPATH类路径找到对应的字节码文件,将字节码文件中的内容加载到虚拟机的过程,称之为类加载。通常情况下,类加载只发生一次
类加载的时机:
1:第一次创建类的对象时
2:第一次访问静态内容时
3:通过Class.forName(”全限定名“)的方式强制出发类加载
全限定名:类的完整路径;包名.类名
4:子类类加载也会触发父类的类加载
5:只声明引用不会触发类加载
注意:静态内容出现在内存中的时间一定早于非静态内容
静态内容:类加载
非静态内容:创建对象时
静态方法:就是函数
使用规则:
1:可以使用类名.方法名(实参)的方式调用
静态内容,存放在方法区
2:无法访问非静态内容
访问静态方法时,非静态内容在内存中有可能还未存在
实例方法任何内容都可以访问,放实例方法执行时,静态内容必定已经存在
3:无法使用this和super关键字
this:表示当前对象,super:表示父类对象,静态方法执行时有可能对象并未创建
4:无法修饰局部变量
局部变量的作用范围限制其无法成为类变量(静态属性)
5:子类可以继承并重写父类静态方法
6:在多态的语法环境下,子类的重写意义不大
静态内容的执行关注的是引用类型
7:无法修饰构造
构造方法只能通过new关键字调用
修饰初始代码块-了解
初始代码块
是所有构造共性内容的提取,在构造执行之前执行,通常用于给属性赋值
class 类名{
//初始代码块
}
使用规则:
1:位置:类以内。方法以外,与属性方法平级
2:在创建对象时执行
3:执行次数:0—n次
静态初始代码块
class 类名{
static{
//静态初始代码块
}
}
使用规则
1:类加载的时候执行
2:执行次数:0—1次
3:使用限制和静态方法一致
第三种:final-最终
修饰类:
变成断子绝孙类,不可被继承
修饰方法:
可以被继承,不可被重写
修饰属性
会变成产量属性,值不可改
常量属性没有默认值
为了保证空间的分配,常量属性创建时,必须赋值
赋值时机:1:声明的同时直接赋值、2:在构造中赋值
2:补充:必须保证每个构造中都存在赋值语句
也可以将赋值语句直接写进初始代码块
修饰局部变量:
一旦赋值,值不可改
对赋值时机无要求
修饰引用:
对象内容可改,对象地址不可改