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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘正祥 中级黑马   /  2013-5-27 17:32  /  871 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘正祥 于 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. */
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

1 个回复

倒序浏览
虚拟机运行时,将类加载进内存,主函数.. 加载到Table类的static Bowl=new Bowl(1)的时候 他就会创建Bowl对象并传入参数,然后就会输出... 其他也一样.. 这是你写类的方法的问题。导致,主函数没运行时,加载类就开始打印了。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马