Java学习笔记(四) o(* ̄︶ ̄*)o

5 阅读2分钟

十二、面向对象-高级

1. 关键字static、final

1.1 static 概念

将类的成员(属性、方法、代码块、内部类)归属于类本身所有,所有实例对象共享同一个 static 成员

也就是说,无论创建多少个对象,共享同一份 static 修饰的类成员(属性、方法、代码块、内部类)

  • static 的含义是 “静态的
  • 被 static 修饰的属性,称之为静态属性
  • 被 static 修饰的方法,称之为静态方法
  • 被 static 修饰的代码块,称之为静态代码块
  • 被 static 修饰的内部类,称之为静态内部类

1.2 static 的特点

  • 随着类的加载而加载(不需要依托于创建对象时才加载)
  • 被 static 修饰的成员,被该类的所有对象共享
  • 在访问权限允许时,可以直接通过类调用

1.3 静态变量

被 static 修饰的属性(变量),称之为静态属性(变量),常用于作为常量

语法格式:

[权限修饰符] static 数据类型 变量名;
  • 静态变量的默认值规则和实例变量一样
  • 静态变量所有对象共享
  • 静态变量的 get/set 方法也静态的,当局部变量与静态变量重名时,可使用 类名.静态变量 进行区分

内存解析: 暂无

1.4 静态方法

被 static 修饰的方法,称之为静态方法,常用于工具类中的方法

语法格式:

[权限修饰符] static 返回值类型 方法名(形参列表) {
    // 方法体
}
  • 在 static 方法内部 只能访问类的static修饰的属性或方法,不能访问类的非static的结构
  • 静态方法可以被子类继承,但不能被子类重写
  • 静态方法的调用都只看编译时类型

内存解析: 暂无

1.5 静态代码块

类加载时自动执行一次,常用于初始化静态资源、加载配置、连接数据库等

语法格式:

public class Test { 
    // 静态代码块 
    static { 
        System.out.println("类加载时执行,只执行一次"); 
    } 
}

"tips: 类加载顺序中,静态代码块 > 构造代码块 > 构造方法"

1.6 静态内部类

静态内部类 不需要创建外部类对象 就能使用,但只能访问外部类的 静态成员

语法格式:

public class Outer { 
    static int num = 100; 
    
    // 静态内部类 
    static class Inner { 
        public void show() { 
            System.out.println(num); 
        } 
    } 
}

1.7 拓展知识点

  • 静态方法能不能重写? 不能,静态方法是 属于类 的,重写是针对对象的多态
  • 静态变量存在哪里? JDK8 之前在方法区,JDK8+ 在 堆内存 的类元数据中
  • main 方法为什么是 static? 程序启动时还没有对象,必须用 static 让 JVM 直接调用