关键字static简述

static: 可以修饰变量,方法,静态块,静态内部类,静态导包。

静态变量:类变量,即该变量属于类本身,所有实例对象共享,可通过 类.变量 的方式直接获取,无需创建实例对象。
静态方法:该方法属于类本身,也不需要实例对象就可获取,所有实例对象共享。
静态代码块:属于类本身,类加载时初始。
静态内部类:static修饰类只有静态内部类这种情况,
静态导包:这个是JDK1.5之后的新特性,import static这两个关键字连用可以指定导入某个类中的指定静态资源。
注意:因为类加载机制的原因,静态方法不能访问非静态资源,因为静态方法在类加载时初始化,而非静态资源则是在创建对象实例时才初始化,这个顺序导致静态方法不能访问非静态资源,而非静态则可以调用静态的。

下面来个例子:

import static java.lang.System.out;
public class StaticDemo {
    //成员变量
    private String name;
    //静态变量
    private static int age = 25;

    public static void getField(){
        System.out.println("age:" + age);
        //静态方法中用成员变量会报:不能调用非静态属性的
        //System.out.println("name:" + name);
    }
    static {
        System.out.println("静态代码块");
    }
    static class internalClass{
        public void show(){
            System.out.println("静态内部类方法 show");
        }
    }

    public static void main(String [] args){
        //因为已经静态导包,所以可以这样用
        out.println(123);
        System.out.println("类.静态变量方式调用:"+ StaticDemo.age);
        System.out.println("类.静态方法方式调用:");
        StaticDemo.getField();
        StaticDemo.internalClass obj = new internalClass();
        System.out.println("内部类show方法:");
        obj.show();
    }
}

输出:
静态代码块
123
类.静态变量方式调用:25
类.静态方法方式调用:
age:25
内部类show方法:
静态内部类方法 show

你可能感兴趣的:(java)