黑马程序员技术交流社区

标题: 请帮忙解答疑惑 [打印本页]

作者: 完美恋爱    时间: 2013-11-19 08:54
标题: 请帮忙解答疑惑
本帖最后由 完美恋爱 于 2013-11-19 10:36 编辑

class A
{
        public static void main(String[] args)
        {
                B d = new B();
        }
}

class B
{
        private String name = "haha";
        
        {
                speak();
        }
        
        B()
        {
                name = "小明";
        }
        
        void speak()
        {
                System.out.println(name+" wuwuwuwuwuuwuuuwu");
        }
}

怎么才能让输出的姓名是小明啊?


作者: hubby    时间: 2013-11-19 09:24
class A
{
        public static void main(String[] args)
        {
                B d = new B();
                    d.speak();
        }
}


作者: kellyzyb    时间: 2013-11-19 09:25
这么简单的问题啊,大哥. 不是来刷分的吧?
1.构造代码块优先于构造函数。调换一下位置就行。
2.类里面没有设置name的get set方法,又是private的,无法进行对象调用。
  1. class A
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 B d = new B();
  6.                
  7.         }
  8. }

  9. class B
  10. {
  11.         private String name = "haha";
  12.         

  13.         {
  14.                 name = "小明";
  15.         }
  16.         
  17.         B()
  18.         {
  19.                 speak();
  20.         }
  21.         
  22.         void speak()
  23.         {
  24.                 System.out.println(name+" wuwuwuwuwuuwuuuwu");
  25.         }
  26. }
复制代码

作者: hubby    时间: 2013-11-19 09:32
不明白你的B中的构造代码块到底是个嘛意思,注意对象初始化的顺序
静态代码块给类修饰,第一步执行,且里面不能引用非静态变量。构造代码块第二执行用于给对象初始化,其次是构造函数。就是说你的新建B对象初始化顺序是构造代静态代码块给类修饰,先speak:haha 再构造函数。打印结果是
haha
小明
作者: 完美恋爱    时间: 2013-11-19 09:38
kellyzyb 发表于 2013-11-19 09:25
这么简单的问题啊,大哥. 不是来刷分的吧?
1.构造代码块优先于构造函数。调换一下位置就行。
2.类里面没有 ...

首先你没明白我要问的意思,其次,我都已经够了25个技术分了,刷分对我没有任何意义
作者: kellyzyb    时间: 2013-11-19 09:48
完美恋爱 发表于 2013-11-19 09:38
首先你没明白我要问的意思,其次,我都已经够了25个技术分了,刷分对我没有任何意义 ...

我是真不明白你什么意思,输出是小明,有多种方法。能不能说清楚
作者: 黄炳期    时间: 2013-11-19 12:08
请具体问题,不是要输出程序里的小明么?坛友理解的不对,那你的问题是什么




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