static修饰符
- static修饰的字段和方法直接属于类,不属于该类的对象(字段和方法属于谁,就让谁来调用)
- 使用static修饰的成员属于类,直接用类名调用即可
- 没有使用static方法修饰的成员属于对象,必须先创建对象再调用
- 一般的,static方法访问的成员变量必须使用static修饰
- static方法不能使用super和this,因为static是类级别的,super和this是对象级别的,存在类的时候不一定存在对象,也就是说调用static方法时可能没有对象
public class StaticDemo {
int age = 10; // 非静态成员变量
public static void main(Strings[] args) { // 静态方法
System.out.println(age); //调用非静态成员变量,报错
}
}
final修饰符
1. final修饰的类不能被继承
2. final修饰的方法不能被重写
3. final修饰的变量的值不能改变,也就是常量,只能赋值一次,不能再重新赋值
注:基本数据类型表示值不能改变; 引用数据类型表示所引用地址值不能改变
代码块
- 静态代码块: 由static修饰的代码块,随着字节码文件被加载进JVM虚拟机时就开始运行,可以说是程序中最先执行的代码块,常常用来做资源加载,加载配置文件等操作
- 局部代码块: 直接定义在方法内部的代码块,一般不会直接使用局部代码块,都是接在if,for,while等关键字后面使用,表示一块代码区域
- 初始化代码块: 也叫构造代码块,直接定义在类中,每次创建对象时都会执行的代码块,开发中不单独使用,即使要使用,也是在构造器中使用
public class Demo() {
// 静态代码块
static {
System.out.println("我是静态代码块,我最先执行");
}
// 初始化代码块
public Demo() {
System.out.println("我是初始化代码块,我在构造器中");
}
public void speak() {
if(true) {
System.out.println("我是局部代码块,我在方法内部,跟着if关键字使用");
}
}
}
内部类: 把一个类定义在另一个类的内部,把里面的类称之为内部类
- 静态内部类: 使用static修饰的内部类,那么访问内部类直接使用外部类名来访问
- 实例内部类: 没有使用static修饰的内部类,访问时使用外部类创建的对象来访问
- 局部内部类: 定义在方法中的内部类
- 匿名内部类: 特殊的内部类,创建的对象只能使用一次
/*
匿名内部类语法:
继承关系
new 父类构造器名(实参列表) {
匿名内部类的类体;
}
接口实现关系
new 接口名字() {
匿名内部类的类体;
}
*/
public class Demo {
// 接口实现类的匿名内部类,这个类只能用一次
new IUsb() {
// 重写接口的抽象方法
public void work() {
System.out.println("鼠标在打字!");
}
}.work();
}
枚举
- 枚举类是一种特殊的类,它固定了一个类只能有哪些对象,不能改变
- 枚举类中的对象都是全局公共静态的常量,使用时就使用枚举类名调用即可
- 枚举类不能创建对象
// 枚举类定义
public enum 枚举类名 {
常量对象A,常量对象B,常量对象C; // 因为全是常量,所以这些对象需要全部大写,所有字母都要大写
}
// 使用
枚举类名.常量对象A;
String name = 枚举对象.name(); // 返回枚举对象的常量名称
int index = 枚举对象.ordinal(); // 返回枚举对象的序号,从0开始