Skip to content

注解:

@Override
@SuppressWarning("警告类别") // 忽略警告信息。
@SuppressWarning({"警告类别1","警告类别2"}) // 忽略多个警告类别。


访问权限:从上到下依次渐小

public 任何地方可见
protected 仅在自己的包和自己的子类中可见 无修饰 仅在自己的包中可见 private 仅在自己的类中可见

只有public和无修饰符可以修饰顶级类(类可以嵌套,在最外面的称为顶级类) 一个Java文件里可以有多个顶级类,只能有一个public类(必须和文件名相同),其他顶级类无修饰符


static修饰成员变量:类变量\静态变量\静态字段
无static修饰的成员变量:实例变量(可以通过类名访问,也可以通过实例访问)

public class Person {
    private int age;
    private static int id;
}

static修饰方法:静态方法\类方法
内部不可以使用this
不能直接访问实例变量和实例方法

静态导入,可以免写类

import static com.mj.other.Test.*;

// 就不用写Test.age了,直接age就可以了

实例变量初始化:

  1. 声明时给个默认值
  2. 构造函数中赋值
  3. 初始化块(类中大括号代码,每一次实例创建时都会执行,这部分代码编译器会把这个代码放在构造函数的最上面)

类变量初始化:
1.声明时给个默认值
2.静态初始化块(类被第一次初始化被用时执行)

static {
    // 默认值代码
}

单例模式:如果一个类设计为单例模式,则这个类只能创建一个实例

public class Rocket {
    private static Rocket instance = new Rocket();
    
    // 构造方法私有化
    privte Rocket() {
    }
    
    // 公共的静态方法,返回唯一的那个实例
    public static Rocket getInstance() {
        return instance;
    }
}


// 第二种
public class Rocket2 {
    private static Rocket instance = null;
    privte Rocket() {}
    // 这个方法线程不安全
    public static Rocket getInstance() {
        if(instance == null) {
            instance = new Rocket();
        }
        return instance;
    }
}

final修饰的类:不能被继承
final修饰的方法:不能被重写
final修饰的变量:只能进行1次赋值


嵌套类:嵌套类(跟实例关联,必须有实例才能用,可以访问外部类成员变量、方法)
嵌套类实例:外部类.new 内部类,内部类有一个指针指向外部类,所以外部类实例一直不会销毁,直到所有的内部类实例都销毁了,说明没有引用外部类实例了,外部类实例才会销毁。 静态嵌套类:就是顶级类,只是类代码定义在另一个类中(可以访问外部类的私有实例变量和方法,不能访问实例变量和实例方法)

什么时候使用嵌套类:

  • 如果类A只使用在类C内部,考虑类C定义在类A中
  • 如果类C经常访问类A的私有成员,考虑类C定义在类A中
  • 经常访问非公共的实例成员,设计为内部类,否则设计为静态嵌套类(尽量静态,因为上面的引用原因)

局部类:定义在代码块中的类
只能访问final和有效final(如果一个变量只赋值了一次)的局部变量
可以访问外部类的所有实例成员