黑马程序员技术交流社区

标题: 疑问??????????????? [打印本页]

作者: 坚持不懈    时间: 2012-10-30 10:44
标题: 疑问???????????????
本帖最后由 坚持不懈 于 2012-11-2 06:38 编辑
  1. class StaticCode //定义一个类
  2. {
  3. int num=9; //成员变量
  4. StaticCode() //构造函数给对象初始化
  5. {
  6. System.out.println("b");
  7. }
  8. static //类代码快
  9. {
  10. System.out.println("a");
  11. }
  12. { //构造代码快 给所有对象进行初始化
  13. System.out.println("c"+this.num);
  14. }
  15. StaticCode(int x) //构造函数给对象初始化
  16. {
  17. System.out.println("d");
  18. }
  19. public static void show() //静态方法
  20. {
  21. System.out.println("show run");
  22. }
  23. }

  24. class StaticCodeDemo
  25. {
  26. static //静态代码快
  27. {
  28. System.out.println("aa");
  29. }
  30. public static void main(String[] args)
  31. {
  32. new StaticCode(4); //建立对象 并切初始化
  33. }
  34. static //静态代码快
  35. {
  36. System.out.println("bb");
  37. }
  38. }

复制代码

我不明白为什么结果不执行aa bb呢?

作者: 坚持不懈    时间: 2012-10-30 10:50
急急急~~~~~~~~~~~~~~~~~```
作者: 坚持不懈    时间: 2012-10-30 10:52
  1. class StaticCode  //定义一个类
  2. {
  3.         int num=9;  //成员变量
  4.         StaticCode()  //构造函数给对象初始化
  5.         {
  6.                 System.out.println("b");
  7.         }
  8.         static    //类代码快
  9.         {
  10.                 System.out.println("a");
  11.         }
  12.         {          //构造代码快 给所有对象进行初始化
  13.                 System.out.println("c"+this.num);
  14.         }
  15.         StaticCode(int x)  //构造函数给对象初始化
  16.         {
  17.                 System.out.println("d");
  18.         }
  19.         public static void show() //静态方法
  20.         {
  21.                 System.out.println("show run");
  22.         }
  23. }

  24. class StaticCodeDemo
  25. {
  26.         static //静态代码快
  27.         {
  28.                         System.out.println("aa");
  29.         }
  30.         public static void main(String[] args)
  31.         {
  32.                 new StaticCode(4); //建立对象 并切初始化
  33.         }
  34.         static //静态代码快
  35.         {
  36.                         System.out.println("bb");
  37.         }
  38. }

  39. //aa bb  a  c=9  d
复制代码

作者: 刘学    时间: 2012-10-30 11:04
结果能输出 aa bb
作者: 种生祥    时间: 2012-10-30 11:07
你的两份代码都一样,都能输出
aa
bb  
a  
c9  
d
作者: 坚持不懈    时间: 2012-10-30 11:15
按理 aa bb 随着类的加载就已经存在了,可我运行结果没有,aa bb 啊,只运行了a  c9 d  为什么啊?
作者: 坚持不懈    时间: 2012-10-30 11:17

作者: 王永荣    时间: 2012-10-30 12:05
我执行的为什么有。。

作者: 幽竹小妖    时间: 2012-10-30 16:03
{:soso_e104:}
作者: 幽竹小妖    时间: 2012-10-30 16:04
围观而已
作者: 幽竹小妖    时间: 2012-10-30 16:05
class StaticCode  //定义一个类
{
        int num=9;  //成员变量
        StaticCode()  //构造函数给对象初始化
        {
                System.out.println("b");
        }
        static    //类代码快
        {
                System.out.println("a");
        }
        {          //构造代码快 给所有对象进行初始化
                System.out.println("c"+this.num);
        }
        StaticCode(int x)  //构造函数给对象初始化
        {
                System.out.println("d");
        }
        public static void show() //静态方法
        {
                System.out.println("show run");
        }
}

class StaticCodeDemo
{
        static //静态代码快
        {
                        System.out.println("aa");
        }
        public static void main(String[] args)
        {
                new StaticCode(4); //建立对象 并切初始化
        }
        static //静态代码快
        {
                        System.out.println("bb");
        }
}

//aa bb  a  c=9  d
作者: 幽竹小妖    时间: 2012-10-30 16:06
  1. class StaticCode  //定义一个类
  2. {
  3.         int num=9;  //成员变量
  4.         StaticCode()  //构造函数给对象初始化
  5.         {
  6.                 System.out.println("b");
  7.         }
  8.         static    //类代码快
  9.         {
  10.                 System.out.println("a");
  11.         }
  12.         {          //构造代码快 给所有对象进行初始化
  13.                 System.out.println("c"+this.num);
  14.         }
  15.         StaticCode(int x)  //构造函数给对象初始化
  16.         {
  17.                 System.out.println("d");
  18.         }
  19.         public static void show() //静态方法
  20.         {
  21.                 System.out.println("show run");
  22.         }
  23. }

  24. class StaticCodeDemo
  25. {
  26.         static //静态代码快
  27.         {
  28.                         System.out.println("aa");
  29.         }
  30.         public static void main(String[] args)
  31.         {
  32.                 new StaticCode(4); //建立对象 并切初始化
  33.         }
  34.         static //静态代码快
  35.         {
  36.                         System.out.println("bb");
  37.         }
  38. }

  39. //aa bb  a  c=9  d
复制代码

作者: 杨志男    时间: 2012-10-30 17:12
本帖最后由 杨志男 于 2012-10-30 17:14 编辑
  1. 说实话,我用myeclipse和Dos运行的结果,都有aa、bb
  2. <img border="0" alt="" src="http://bbs.itheima.com/forum.php?mod=image&aid=8840&size=300x300&key=fce248fc39d0489bdde1cb9f16eda5bf&nocache=yes&type=fixnone&ramdom=60K1j" aid="attachimg_8840">



  3. 要是不行的话,你可以看看这个,运行一遍结果,就知道构造函数和静态代码块的加载顺序了
  4. class Parent{
  5. static String name = "hello";
  6. {
  7. System.out.println("parent block");
  8. }
  9. static {
  10. System.out.println("parent static block");
  11. }
  12. public Parent(){
  13. System.out.println("parent constructor");
  14. }
  15. }

  16. class Child extends Parent{
  17. static String childName = "hello";
  18. {
  19. System.out.println("child block");
  20. }
  21. static {
  22. System.out.println("child static block");
  23. }
  24. public Child(){
  25. System.out.println("child constructor");
  26. }
  27. }

  28. public class StaticIniBlockOrderTest {

  29. public static void main(String[] args) {
  30. new Child();//语句(*)
  31. }
  32. }
复制代码

作者: 坚持不懈    时间: 2012-10-30 17:13
杨志男 发表于 2012-10-30 17:12

谢谢你,恩,弄明白了~~
作者: 坚持不懈    时间: 2012-10-30 17:14
谢谢大家,解决了~~~十分感谢
作者: 任雷彬    时间: 2012-10-30 18:29
你上面的代码运行后是可以打印出aa的。
你有可能在修改代码后没有保存或者保存错了地方。
下方修改后的代码打印出的是
a
c9
d

class StaticCode //定义一个类

{

int num=9; //成员变量

StaticCode() //构造函数给对象初始化

{

System.out.println("b");

}

static //类代码快

{

System.out.println("a");

}

{ //构造代码快 给所有对象进行初始化

System.out.println("c"+this.num);

}

StaticCode(int x) //构造函数给对象初始化

{

System.out.println("d");

}

public static void show() //静态方法

{

System.out.println("show run");

}

}


class StaticCodeDemo

{

static //静态代码快

{

//System.out.println("aa");   //将这个静态代码块注释,运行一下,不注释时也运行一下,比较一下。

}

public static void main(String[] args)

{

new StaticCode(4); //建立对象 并切初始化

}

static //静态代码快

{

//System.out.println("bb");   //将这个静态代码块注释,运行一下,不注释时也运行一下,比较一下。

}

}
尝试将主函数中的静态代码块注释后与不注释的代码比较两者的不同,如同代码中静态代码块的注释
作者: 坚持不懈    时间: 2012-10-30 20:16
{:soso_e181:}  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2