记一下 Java Static 有哪些玩法

1 篇文章 0 订阅

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);
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值