一、权限修饰符
- 权限修饰符使用范围
关键字 | 本类中 | 同包类中 | 子类中 | 其他类中 |
public(公共的) | √ | √ | √ | √ |
protected(受保护的) | √ | √ | √ | X |
默认(不写) | √ | √ | 只能同包子类访问,非同包子类不能访问 | X |
private(私有的) | √ | X | X | X |
- 权限修饰符的范围 public > protected > 默认的 > provate
- 需要注意的是,默认的权限修饰符只能在本类和同包类中使用,同包子类中可以使用,同包子类本质上还是同包类
二、static 静态的
- static本身是一个修饰符,是用来修饰静态资源的
静态资源:属于类的,由且仅有一份
- 可以修饰变量,方法,代码块,import,内部类,
- 静态是从类的层面来说的,已经超越了对象
- 静态变量:
- 由static修饰的变量叫做静态变量
- 属于类的,不属于对象、存储在方法区中,只有一份
- 可以通过对象名来访,但是通常我们使用类名来访问
- 什么是有使用:对象所共享的数据用static修饰
- 静态方法
- 被static修饰的方法就是静态方法
- 属于类,存储在方法区,只有一份
- 静态方法不能被重写
- 注意:如果父子类中存在相同方法签名的方法,也不是重写
- 静态方法可以被重载
- 静态方法可以通过对象名调用,但是我们开发中常用类名来调用
- 在静态方法中不能访问成员变量和成员方法
- 在静态方法中不可以使用this,super关键字
- 静态代码块
- 在类中通过static修饰的{}就是静态代码块
- 静态代码块属于类的,所以也叫类代码块
- 实际上静态代码块是随着类的加兹安而加载到静态区(方法区中),在类创建对象或者执行方法之前执行一次,且只执行一次
- 什么时候用:初始化/加载静态资源/静态变量
- 静态引入
import static java.lang.System.out; public class StaticDemo03 { public static void main(String[] args) { //System.out.println("HelloWorld"); out.println("HelloWorld"); } } |
- 总结
- 静态资源都是先于对象存在
- static修饰的变量称之为静态变量,属于类的,存储在方法区,.class文件加载的时候就加载了,所有对象共享的资源,通过类名.来访问
- static修饰的方法称之为静态方法,属于类的,存储在方法区,.class文件加载的时候就加载了,所有对象共享的方法,通过类名.来调用
- static修饰的代码块诚挚为静态代码块,类加载的时候就加载,初始化静态资源的时候使用
- import static 称之为静态引入吗,使用的时候不需要明确类名
三、final
- 概念:final 表示最终的,不可变的
- 可以用来修饰变量,方法,类
- 修饰变量,
- final修饰的变量因为不可变,因此称之为常量,但是一般不单独使用,而是 final static 来修饰静态常量
- final修饰的变量不可以被更改
- final如果修饰的是引用数据类型变量,地址不能发生改变
- 修饰方法
- final修饰方法被称之为最终方法
- 最终方法可以被重载
- 最终方法不可以被重写
- 修饰类
- final修饰的类叫做最终类
- 最终类不能被继承,也不能有匿名内部类的形式(后面说)
- 总结
- final修饰的变量不可以被改变
- final修饰的方法不能被重写
- final修饰的类不能被继承
四、常量 static final 应用率高
- 由static final修饰的变量叫做静态常量,简称常量
- 必须声明的同时进行初始化
- 建议:常量名所有的字母都大写,多个单词之间用_分割
- 常量通常使用类名.来访问
- 什么时候用:在程序运行的过程中数据永远不会发生改变,并且经常使用到
- 编译器在编译的时候会将常量直接替换成具体的值,效率高
五、枚举
- 枚举是一种引用数据类型
- 特点:枚举类型的对象数据是固定的,尝尝用于定义一组常量
- 所有的枚举都继承Enum类,其中提供了一组方法供我们使用 values()
- 枚举类的构造方法默认都是私有方法