java Static 小解

来源:互联网 发布:对位算法 编辑:程序博客网 时间:2024/05/16 06:48

Static :

默认情况下,成员变量是实例化成员,在外部需要通过对象才能够操作,但是如果用static来修饰的话,就是静态成员,也叫类变量,无需通过对象就可以操作;

public class Test

{

    static int x;//成员变量可以是静态的变量

    int y1;

        

    class test1{

        int y;

        

    }

 

    public static void main(String[] args)

    {

        // TODO 自动生成的方法存根

    

        x=0;

        y=9;//报错

        y1=9;//报错

        Test test=new Test();

        test.y1=9;正确

    }

 

}

静态代码段:

class StaticCode
{
    static String country;
    static
    {
        country="China"; 
        System.out.println("StaticCode is loading !!");
    }
    
}
public class TestStaticCode
{
    static
    {
        System.out.println("TestStaticCode is loading!!");
    }
    
    public static void main(String[] args)
    {
        System.out.println("begin main method !!");
        new StaticCode();
        new StaticCode();
    }
}

 

输出结果为

TestStaticCode is loading!!

begin main method!!

StaticCode is loading!!

 

为什么会有如此顺序的输出?

为什么 StaticCode is loading !! 只被输出一次?

为什么StaticCode is loading!!不被第一个输出?

 

程序要进入main方法 首先要加载TestStaticCode这个类

从而要执行定义在这个类的静态代码段

输出 TestStaticCode is loading!!

当程序运行到 第一次出现StaticCode时 就会加载StaticCode这个类从而执行这个类的静态代码段

由于静态代码段只在类第一次加载时才执行 也就是第一个 new StaticCode(); 时才执行

后面不论你出现了多少个StaticCode都不会再次执行

而且静态代码段
不依赖于类的实例化 只要你的程序执行过程中第一次碰到了StaticCode就会马上执行静态代码

不信你把两个new语句去掉 换成

StaticCode s = null;

声明一个StaticCode 的空引用 程序也会执行静态代码

 

 

 

0 0
原创粉丝点击