Java Static 玩法
date
May 27, 2021
slug
5589747553757184
status
Published
tags
summary
type
Post
static 变量
static
变量是使用 static
关键字定义的变量,又被称为静态变量静态变量是属于类的,也叫类变量;实例变量(非static变量)属于某个具体的对象
静态变量和非静态变量的区别:
静态变量被所有对象共享,在内存中只有一个副本,在类初次加载的时候才会初始化非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响
静态变量可以通过类名直接引用。
class Dome { public static int staticVariable = 10; } public class Test { public static void main(String[] args) { System.out.println(Dome.staticVariable); } }
static 方法
static
方法是使用 static
关键字定义的方法,和静态变量类似,同时它也不属于任何一个实例对象,即无需对象访问class Dome { public static String staticMethod() { return "静态方法"; } } public class Test { public static void main(String[] args) { System.out.println(Dome.staticMethod()); } }
static 代码块
静态代码块加载类时候加载,可以使用静态代码块初始化类,静态代码块可以出现在类的任意部分,当类被加载时按照静态代码块的顺序来执行每个代码块
class Dome { static { System.out.println("静态代码块"); } } public class Test { public static void main(String[] args) { Dome dome = new Dome(); Dome dome1 = new Dome(); } }
输出:
静态代码块
static 类(内部类)
内部类就是在一个类内部定义其他类结构的嵌套操作。
class Dome { // 外部类 class InterClass { // 内部类 } }
使用
static
定义的内部类称为静态内部类非静态内部类在编译完成之后会隐含的保存着一个引用,该引用是指向创建它的外部类,但是静态类没有。没有这个引用就意味着静态内部类不会持有外部类当前对象的引用,所以在静态内部类中无法访问外部类的非
static
定义的类、属性和方法,同时静态内部类也不依赖于外部类。class Dome { public String str = "内部类"; class InterClass { InterClass() { System.out.println("内部类"); System.out.println(str); } } static class InterClassStatic { InterClassStatic() { System.out.println("静态内部类"); System.out.println(str); // Error: 无法从静态上下文中引用非静态 变量 str } } } public class Test { public static void main(String[] args) { Dome dome = new Dome(); new Dome.InterClassStatic(); new Dome.InterClass(); // Error: 需要包含Dome.InterClass的封闭实例 dome.new InterClassStatic(); // Error: 限定的新静态类 dome.new InterClass(); } }
static 包
import
后使用 static
导入包称为静态导包,使用import static
可以导入类里的静态方法,如直接导入Math
类中的PI
而无需引用Math
类来使用PI
import static java.lang.Math.PI; import static java.lang.System.out; public class Test { public static void main(String[] args) { System.out.println(Math.PI); System.out.println(PI); out.println(PI); } }