Java基础:static(补漏2)

参考
https://www.cnblogs.com/gxyandwmm/p/9478569.html
https://www.jianshu.com/p/e9a34fd067bc


今天看到了static,发现对static的关键字还有一些认知上的漏洞,所以就来总结一下

static在Java是静态的意思,分别有
静态变量
静态方法
静态内部方法static只能修饰内部类)
静态块
静态导入


静态变量

private static int NUM = 123;

静态变量的变量名大写
静态变量被所有的对象共享,在内存中只有一个副本
静态变量仅在类初次加载时被初始化
可以直接通过ClassName.NUM来调用,也可以通过实例访问


静态方法

静态方法可以直接使用对象名调用方法Test1.staticMethod()

class Test1 {
    public static void staticMethod(){
        System.out.println("静态方法");
    }
}

public class test {
    public static void main(String[] args) {
        Test1.staticMethod();
    }
}
// 输出静态方法

静态方法一般用于对静态变量操作,如上面的main方法对静态变量NUM操作,不能引用直接非静态变量,如果需要引用非静态变量,只能通过对象引用。

public class StaticMethod {
    private int NUM = 0 ;
    private static int STATICNUM = 1;
    
    public static void main(String[] args) {
        System.out.println(NUM );// 报错
        System.out.println(STATICNUM ); // 输出 1 
    }
}

静态内部类

静态内部类也有静态方法和非静态内部方法,静态变量和非静态变量

对于在静态内部类的静态变量来说
和上面的静态变量性质相同

静态方法
可以直接调用静态内部类再调用静态方法,即
调用静态内部类 -> 调用静态方法

非静态方法
对于需要实例化静态内部类,即
实例化静态内部类 -> 调用非静态方法

public class Outer {

	public static void main(String[] args) {
		StaticInnerClass.staticMethod();
		StaticInnerClass staticInnerClass = new StaticInnerClass();
		staticInnerClass.ordMethod();
	}
	private static class StaticInnerClass{

        private StaticInnerClass(){
            System.out.println("静态内部类实例化");
        }

        private static void staticMethod(){
            System.out.println("静态内部类,静态方法");
        }

        private void ordMethod(){
            System.out.println("静态内部类,非静态方法");
        }
    }
    /*
    静态内部类,静态方法
	静态内部类实例化
	静态内部类,非静态方法
	*/
}

总的来说,对于静态内部类,都无需实例化外部类即可调用静态内部类


静态块

静态块类加载器载入类的时候,这一部分代码被执行,常用于对静态变量进行初始化工作。这些代码只执行一次,不能再调用

public class StaticBlock {
    static {
        System.out.println("加载静态块");
    }

    public static void main(String[] args) {
        staticMethod();
        StaticBlock staticBlock = new StaticBlock();
        staticBlock.ordMethod();
    }

    public void ordMethod(){
        System.out.println("普通方法");
    }

    public static void staticMethod(){
        System.out.println("静态方法");
    }
    /*
    加载静态块
	静态方法
	普通方法
	*/
}

静态导入

用import static代替import静态导入包是JDK1.5中的新特性。

import static java.lang.System.out;

这样导入以后可以直接使用类,省略前面的ClassName,如下面的out.println

import static java.lang.System.out;
import static java.lang.Integer.*;

public class TestStaticImport {
	public static void main(String[] args) {
		out.println(MAX_VALUE);		
		out.println(toHexString(42))
	}

}

文档:http://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值