黑马程序员技术交流社区

标题: 一个关于静态数据初始化的问题 [打印本页]

作者: 刘正祥    时间: 2013-5-27 17:32
标题: 一个关于静态数据初始化的问题
本帖最后由 刘正祥 于 2013-5-28 22:32 编辑

下面一段代码有点长,主要是没理解静态数据的初始化时间,所以输出结果与自己想象的不一样,
我原以为首先输出的是  Creating new Cupboard() in main...  为什么输出结果会是那样,求解释?
  1. public class StaticInitDemo {
  2.       public static void main (String[] args) {
  3.            System.out.println("Creating new Cupboard() in main...");
  4.            new Cupboard();
  5.            System.out.println("Creating new Cupboard() in main...");
  6.            new Cupboard();
  7.            table.method_2(1);
  8.            cupboard.method_3(1);
  9.       }
  10.       static Table table = new Table();
  11.       static Cupboard cupboard = new Cupboard();
  12. }
  13. class Bowl{
  14.       Bowl(int marker){
  15.              System.out.println("Bowl("+marker+")");
  16.       }
  17.       void method_1(int marker){
  18.            System.out.println("method_1("+marker+")");
  19.       }
  20. }
  21. class Table{
  22.       static Bowl bowl1 = new Bowl(1);
  23.       Table(){
  24.              System.out.println("Table()");
  25.              bowl2.method_1(2);
  26.       }
  27.      void method_2(int marker){
  28.             System.out.println("method_2("+marker+")");
  29.      }
  30.     static Bowl bowl2 = new Bowl(2);
  31. }
  32. class Cupboard{
  33.      Bowl bowl3 = new Bowl(3);
  34.      static Bowl bowl4 = new Bowl(4);
  35.      Cupboard(){
  36.             System.out.println("Cupboard()");
  37.             bowl4.method_1(2);
  38.       }
  39.       void method_3(int marker){
  40.            System.out.println("method_3("+marker+")");
  41.       }
  42.       static Bowl bowl5 = new Bowl(5);
  43. }

  44. /*   输出内容如下:
  45. Bowl(1)
  46. Bowl(2)
  47. Table()
  48. method_1(2)
  49. Bowl(4)
  50. Bowl(5)
  51. Bowl(3)
  52. Cupboard()
  53. method_1(2)
  54. Creating new Cupboard() in main...
  55. Bowl(3)
  56. Cupboard()
  57. method_1(2)
  58. Creating new Cupboard() in main...
  59. Bowl(3)
  60. Cupboard()
  61. method_1(2)
  62. method_2(1)
  63. method_3(1)
  64. */
复制代码

作者: 刘兆华    时间: 2013-5-28 02:13
虚拟机运行时,将类加载进内存,主函数.. 加载到Table类的static Bowl=new Bowl(1)的时候 他就会创建Bowl对象并传入参数,然后就会输出... 其他也一样.. 这是你写类的方法的问题。导致,主函数没运行时,加载类就开始打印了。




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