| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 870 人关注过本帖
标题:求一个关于类的加载和static变量及方法和构造器运行先后问题
只看楼主 加入收藏
calix
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:249
专家分:1442
注 册:2015-5-4
收藏
得分:7 
静态代码块 > 构造方法 > 实例代码块(有对象产生才会执行)
静态方法和属性由外层只执行一遍,上面的代码中d.t1 == d.t1.t1 == d.t1.t1.t1 == ...

public static Demo2 t1=new Demo2("t1") 这种写法不太建议,赋值放在构造方法里面比较好
比如非静态的情况
public Demo2 t1=new Demo2("t1")这样声明加初始化的方式,会多次执行且会造成内存溢出
2015-09-20 20:47
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
楼主的代码风格奇异,在下实在看不明白啊,不过大概能猜出楼主为啥纠结,这里有一个细节:static的声明顺序

为了简单说明问题,我这里自己写了一个类
程序代码:
public class Foo {

    public static Foo f1 = new Foo();

    {
        System.out.println("<init>");
    }

    static {
        System.out.println("<clinit>");
    }

    public static void main(String...args) {
        Foo.f1.toString();
    }

}

输出结果为
<init>
<clinit>


恩,竟然是<init>在前<clinit>在后,为啥?因为你声明的f1排在static{}之前。

实际上编译出来的代码大概是这样的

程序代码:
public class Foo {
    
    public static Foo f1 = null;
    
    static <clinit>() {
        f1 = new Foo();
        System.out.println("<clinit>");
    }

    public <init>() {
        super.<init>();
        System.out.println("<init>");
    }
}



结论:对于static块而言,顺序很重要,整个Class执行的顺序如calix而言

静态代码块 > 构造方法 > 实例代码块(有对象产生才会执行)

淘宝杜琨
2015-10-07 00:07
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
程序代码:
public class Test2 {
    public Test2()
    {
        System.out.println("==============构造方法======");
    }
    {
        System.out.println("==============实例块=======");
    }
    static
    {
        System.out.println("==============静态块=======");
    }
    public static void main(String[] agrs) {
        new Test2();
    }
    
}

运行结果:
==============静态块=======
==============实例块=======
==============构造方法======

剑栈风樯各苦辛,别时冰雪到时春
2015-10-07 10:06
快速回复:求一个关于类的加载和static变量及方法和构造器运行先后问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023814 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved