注解:
@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.静态初始化块(类被第一次初始化被用时执行)
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(如果一个变量只赋值了一次)的局部变量
可以访问外部类的所有实例成员