Skip to content

❤️ 权限修饰符

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 方法中不能有 thissuper 关键字,因为静态方法被调用时,是不存在对象的
  • 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();
}

abstract

synchronized