❤️ 权限修饰符
public
public 是最高级别的访问修饰符,使用 public 修饰的类、方法、变量或构造函数可以被任何类访问,无论其是否在同一个包中
protected
protected 是受保护的访问级别,使用 protected 修饰的成员可以在同一包中的其他类,或者在不同包中的子类中被访问
default
default 是默认访问级别,使用 default 修饰的类,在同一包中可以被访问,在不同包中不行
private
private 是最低级别的访问修饰符,使用 private 修饰的成员只能在定义它们的类内部访问
java
public class fu
private fu() {
System.out. println("fu类的无参构造");
}
public static void waijie() {
fu f1=new fu();
}
}java
public class demo {
public static void main(String[] args) {
fu f1 = new fu(); // 报错
fu.waijie();
}
}❤️ 状态修饰符
static
被 static 修饰的东西都是存在于元空间上的(不在堆上),交由类管理,而不是对象
特点 :
- 被
static修饰的变量,可以被该类的所有对象访问【即该类的所有实例对象共享一份static变量,对象 A 修改,对象 B 也被改变】
- 被
static修饰的方法,只能访问所属类的static的方法和变量:因为非静态成员变量和非静态成员方法都是在堆上的对象中的,所以非静态成员变量和非静态成员方法都必须依赖具体的对象才能够被调用。而静态方法不在堆上,所以static不能访问非静态成员变量和非静态成员方法
static如果修饰类,只能修饰内部类,因为类本身就是类级别的,可以直接使用,无需再用static修饰static可以单独使用于语法块,叫做”静态块“【静态块会最先被类加载,而且只加载一次】
static方法中不能有this与super关键字,因为静态方法被调用时,是不存在对象的
- 被
static修饰的变量只有在类加载的时候会执行一次
缺点 :
- 会让属性变得难以控制,如果某一个实例对象对
static成员变量产生了修改,那么其他所有实例对象的static成员变量也会发生相应修改 - 静态方法不能被子类覆盖
- 会在整个应用程序的生命周期内存活,可能会导致内存管理上的问题
优点 :
static变量无需实例化对象【类名.变量名】即可调用static方法可以直接调用,避免了先要 new 出对象的繁琐和资源消耗- 用于单例设计模式
- 用于优化性能【因为只有在类加载的时候执行一次】
final
- 被
final修饰的类叫最终类,是不能有子类的 - 被
final修饰的方法叫最终方法,是不可以被重写的 - 被
final修饰的变量叫最终变量,是不可以被修改的
java
fianl int age = 20;
age = 40; // 报错
// final修饰了引用变量s,所以对象s的地址值不能被修改,但是s里的属性可以被修改
final student s = new student();- 被
final修饰变量必须初始化(直接赋值、或在构造函数中初始化)
java
// 直接赋值
public class MyClass {
final int value = 10;
}
// 在构造函数中初始化
public class MyClass {
final int value; // 必须初始化
public MyClass(int value) {
this.value = value;
}
}- 在匿名内部类中,如果需要访问外部类的局部变量,该变量必须被声明为
final
java
public void method() {
final int value = 10; // 必须声明为 final
new Thread(() -> {
System.out.println("Value: " + value); // 访问外部局部变量
}).start();
}