A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 青衫禅客   /  2014-12-25 22:52  /  2443 人查看  /  29 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


都是黑马币啊
回复 使用道具 举报

都是黑马币啊
回复 使用道具 举报

都是黑马币啊
回复 使用道具 举报

都是黑马币啊
回复 使用道具 举报
雪落纷飞 发表于 2014-12-29 03:11
和构造函数中的this()super()一个道理放在首行,因为初始化的动作要先执行这样才会避免覆盖同名值, 构 ...

拜托看清楚图中要表明的问题再回帖好不好
回复 使用道具 举报
本帖最后由 雪落纷飞 于 2014-12-29 16:23 编辑

= =  
当类被加载进内存没调用构造函数new对象之前时候是先在方法区加载A类的信息,(静态成员加载完之后就是非静态信息)一个类里的非静态成员/代码块,按写代码的顺序加载。但调用属性时,必须注意加载顺序。如果在加载前调用,值为默认初始值(如:null 或者 0)。
  当你的i在上面的时候i已加载完成,执行到代码块的时候赋了新值。
  当你的i在下面的时候,还没有加载i调用的只是初始值0的i,(你可以把i=38移到调用i下面一行看看),然后代码块执行继续向下执行到了 int i 才是加载了i的信息并且赋给了一个值。

   楼主要是还看不懂就当我水贴吧。。。。
   
回复 使用道具 举报 1 0
{}叫作构造代码块,给所有对象进行初始化,放在里面的代码一般先执行,作用全局的
回复 使用道具 举报
,完全看不清……
回复 使用道具 举报
对于第二个问题:
类变量赋值 --》 静态代码快执行 --》成员变量或者非静态代码块执行,按从上到下的先后顺序执行--》构造方法

public class Test3 {
       
//        int i = 1;
        {
                i = 2;
        }
        int i = 1;
        public static void main(String[] args) {
                Test3 t3 = new Test3();
            System.out.println(t3.i);
        }
}
回复 使用道具 举报
你先写一下  static   int  变量名  让变量和类一起加入进内存  然后在去除static   直接用类加入内存  对比两次显示结果  看是不是有所不同
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马