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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 无气打火机 中级黑马   /  2013-6-21 11:55  /  1368 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是代码!问什么运行的时候前面那个代码块报错。而后面那个代码块不报错?不是说构造代码块是随着创建对象而加载的么?报错的提示

如果我将上面的 i 加了this 他就可以运行了,但是结果是 0  10  ,为什么结果不同?难道构造代码块还有先后区分的么? 那个变量赋值还比构造代码块早?

QQ图片20130621115153.jpg (22.86 KB, 下载次数: 0)

QQ图片20130621115153.jpg

QQ图片20130621115333.jpg (11.68 KB, 下载次数: 1)

QQ图片20130621115333.jpg

7 个回复

正序浏览
代码块,静态代码块,构造函数在对象构造时的执行顺序是:

1)静态代码块(如果构造的对象时该类的第一个对象)

2)代码块(不同的代码块之间按照在类中出现的先后顺序执行

3)构造函数(如果构造函数调用了该类的其它构造函数,则先执行调用的那个构造函数)
回复 使用道具 举报
实例变量(非静态变量)
    1. 不能向前引用,如果向前引用,则称为非法向前引用,这是不允许的
    2. 变量属于类的实例对象
    3. 随着类的实例被创建而分配内存空间
回复 使用道具 举报
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Test t=new Test();
  6.         }
  7. }
  8. class Test
  9. {
  10.         Test()//这个地方
  11.         {
  12.                 System.out.println(i);
  13.         }
  14.         int i=10;
  15.         {
  16.                 System.out.println(i);
  17.         }
  18. }
复制代码
回复 使用道具 举报
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Test t=new Test();
  6.         }
  7. }
  8. class Test
  9. {
  10.         [color=Red]Test()[/color]
  11.         {
  12.                 System.out.println(i);
  13.         }
  14.         int i=10;
  15.         {
  16.                 System.out.println(i);
  17.         }
  18. }
复制代码
回复 使用道具 举报
class Demo
{
        public static void main(String[] args)
        {
                Test t = new Test();
        }
}
class Test
{
        private int i =10;//私有类
       
        {
                System.out.println(i);
        }
        {
                System.out.println(i);
        }
}  
//这才是正确格式写法!
回复 使用道具 举报
大哥 你思路好乱而且代码写好乱 ,格式又不对!
回复 使用道具 举报
前面那个构造函数应该这样写 Test(){  System.out.println(i);} 你把Test()漏掉了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马