static

2019-06-27 14:01 更新

static

非静态的可以访问静态的;
静态的不能访问非静态的。
静态的和类相关;
非静态和对象相关。

1.访问静态成员:

类名.静态成员;
对象名.静态成员;

2.关于带static代码执行顺序:

1 加载类:
    1.1 先将所有的静态属性做默认初始化。
    1.2 根据设置的值做显式的初始化。
    1.3 调用静态代码块。
    注意:系统调用StaticTest的main方法时必须先加载StaticTest类,
        而不是在main方法中StaticTest d才加载StaticTest类。
2 创建对象时:
    2.1 对所有的实例属性做默认的初始化。
    2.2 根据设置的值做显式的初始化。
    2.3 调用构造代码块。
    2.4 调用构造方法(如果有父类,先调用super())
3 系统在堆内存中给对象分配空间,确定对象的首地址。

3.小练习: 其中(1(1.1))代表第1次执行了1.1步骤。

public  class StaticTest {
    public static int i = 0;//(1(1.1))、(5(1.2))
    public static StaticTest s1 = new StaticTest("s1");//(2(1.1))、(6(1.2))
    public static int j = StaticTest.print("i");//(3(1.1))、(12(1.2))
    public static int k = 233;//(4(1.1))、(14(1.2))
    public int x = 10;//(7(2.1))、(8(2.2))、(16(2.1))、(17(2.2))
//  静态代码块:(15(1.3))
    static {
//      会着类的加载而调用,只会调用一次,某些程序中初始化的工作
        System.out.println("调用了静态代码块。");
    }
//  构造代码块:(9(2.3))、(18(2.3))
    {
//      当创建对象的时候会被调用,而且会被调用很多次,取决于创建了几个对象;
//      会在构造器之前调用.
        System.out.println("调用了构造代码块。");
    }
//  构造方法:(10(2.4))、(19(2.4))
    public StaticTest(String string) {
        System.out.println("调用了构造方法。");
        StaticTest.print(string);
    }
//  静态方法(11)、(13)、(20)
    public static int print(String s) {
        System.out.println("---------------");
        System.out.println("调用了静态方法。");
//      局部代码块
        {
//          会产生一个局部作用域
            int i = 233;
            System.out.println("调用了局部代码块。");
        }
        System.out.println(s);
        System.out.println("***************");
        return 666;
    }
    public static void main(String[] args) {
        StaticTest d = new StaticTest("S");
    }
}

4.输出结果:

调用了构造代码块。
调用了构造方法。
---------------
调用了静态方法。
调用了局部代码块。
s1
***************
---------------
调用了静态方法。
调用了局部代码块。
i
***************
调用了静态代码块。
调用了构造代码块。
调用了构造方法。
---------------
调用了静态方法。
调用了局部代码块。
S
***************
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号