【分类】:
- 公开级别:使用public修饰,对外公开。
- 受保护级别:使用protected修饰,向子类以及同一个包中的类公开。
- 默认级别:没有访问控制修饰符,对同一个包中的类公开。
- 私有级别:使用private修饰,只有当前类本身可以访问,不对外公开。
【总结】:
【注意事项】:
- 访问修饰符只是对类以及类的成员进行限制,不会对局部变量进行限制。局部变量只能在方法内部访问。
-
抽象类:使用abstract修饰的类表示抽象类,位于继承树的抽象层,抽象类不能被实例化,也就是不能创建抽象类本身的实例对象。
-
抽象方法:使用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法是用来描述系统具有什么功能,而不提供具体的实现。
- 抽象类中可以没有抽象方法,但是包含抽象方法的类必须被定义为抽象类。
- 如果子类没有实现父类中所有的抽象方法,那么子类也必须定义为抽象类,否则编译报错。
- 抽象类中可以含有非抽象的构造方法,创建子类实例的时候可能会调用这些方法。
- 抽象类及抽象方法不能被final修饰,抽象类只有被子类继承之后才能创建子类的实例对象,抽象方法也只能在子类中被实现,所以abstract和final不能连用,否则会自相矛盾。
- 抽象方法不能被私有化,如果抽象方法被私有化,那么表示父类定义了某个功能,但是没有提供实现,并且子类也无法去实现。
【特点】:
- 被final修饰的类不能被继承,没有子类。
【语法】:
public final class 类名{}
【适用场景】:
- 出于安全的原因,类的实现细节不允许做出任何改变。
- 确定这个类不会再被拓展。
【特点】:
- 被final修饰的方法不能被子类覆盖。
【语法】:
public final 返回值类型 方法名(参数列表){}
3、final常量
【特征】:
- final可以修饰静态变量、实例变量、局部变量。
- 静态常量一般以大写字母命名,单词之间采用"_"符号分割。
- 使用final修饰的变量必须被显示初始化、或者在构造器中初始化。
- final修饰的变量只能被赋值一次。引用类型的地址不能再次发生改变。但是可以改变该对象中的内容。
【作用】:
- 提高程序的安全性,禁止非法修改取值固定且不允许改变的数据。
- 提高代码的可维护性。
- 提高代码的可读性。
被static修饰的成员变量、成员方法、是属于类的,它不依赖于特定的实例,被类的所有实例共享。只要这个类被加载、Java虚拟机就能够根据类名在运行时数据区的方法区内定位到它们。
2、static变量【静态变量和实例变量的区别】:
- 静态变量在内寸中只有一个备份,运行Java虚拟机只为静态变量分配一次内存空间,在类加载的过程中完成静态变量内存的分配,可以直接通过类名访问静态变量。
- 对于实例变量,每创建一个实例对象,就会为实例变量分配一次内存,实例变量可以在内存中有多个备份,互不影响。
【静态变量的作用】:
- 被类的所有实例所共享,可以作为实例之间进行交流的共享数据。
- 如果类的所有实例都包含同一个相同的常量属性,可以把这个属性定义为静态常量类型,从而节省内存空间。
【语法】:
访问修饰符 class 类名{
访问修饰符 static 数据类型 变量名;
}
3、static方法
【语法】:
访问修饰符 static 返回值类型 方法名(参数列表){方法体}
【静态方法可以访问的内容】:
- 静态方法中不能使用this关键字(因为静态方法不需要通过它所属类的任何实例对象就可以被访问)。
- 静态方法中不能访问类的非静态成员变量和非静态方法。
- 静态方法可以访问所属类的静态变量和静态方法。
- 静态方法必须被实现。
- 方法的字节码都位于方法区。
【解释】:
类中可以包含静态代码块,它不存在于任何方法体中,Java虚拟机在加载类的时候,会执行这些代码块,如果类中有多个静态代码块,那么Java虚拟机就会按照它们在类中出现的顺序依次执行它们,每个静态代码块只会被执行一次。
【作用】:
- 初始化类给类的静态变量初始化数值。
- 静态代码块中不能直接访问类的实例变量和实例方法。
- 可以访问静态变量和静态方法。
- public的访问级别最高,其次是protected、默认和private。
- 成员变量和成员方法可以处于四个访问级别中的一个。
- 顶层的类可以设计为公开或默认级别,顶层类不能被protected和private修饰。
- 局部变量不能被访问控制符修饰。
- 抽象类不能被实例化。
- 抽象类中可以没有抽象方法,但包含了抽象方法的类必须被设计为抽象类。
- 如果子类没有实现父类中的抽象方法,那么子类必须被设计为抽象类。
- 抽象类不能被定义为final和static类型。
- 抽象方法不能被定义为private、final、static类型。
- 没有抽象构造方法。
- 抽象方法没有方法体。
- 用final修饰的类不能被继承。
- 用final修饰的方法不能被子类覆盖。
- private类型的方法默认都是final类型的,因此不能被子类覆盖。
- final类型的变量必须被显示的初始化,并且只能被赋值一次。
- 静态变量在内存中只有一个备份,在类的所有实例中共享。
- 在静态方法中不能直接访问实例方法和实例变量。
- 静态方法中不能使用this和super关键字。
- 静态方法不能被abstract修饰。
- 静态方法和静态变量都可以使用类名直接访问。
- 当类被加载的时候,静态代码只会执行一次,类中不同的静态代码块按它们在类中出现的顺序被依次执行。



