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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 完美恋爱 高级黑马   /  2013-11-19 08:54  /  1496 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 完美恋爱 于 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");
        }
}

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

6 个回复

倒序浏览
class A
{
        public static void main(String[] args)
        {
                B d = new B();
                    d.speak();
        }
}

回复 使用道具 举报
这么简单的问题啊,大哥. 不是来刷分的吧?
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. }
复制代码
回复 使用道具 举报 1 0
不明白你的B中的构造代码块到底是个嘛意思,注意对象初始化的顺序
静态代码块给类修饰,第一步执行,且里面不能引用非静态变量。构造代码块第二执行用于给对象初始化,其次是构造函数。就是说你的新建B对象初始化顺序是构造代静态代码块给类修饰,先speak:haha 再构造函数。打印结果是
haha
小明
回复 使用道具 举报
kellyzyb 发表于 2013-11-19 09:25
这么简单的问题啊,大哥. 不是来刷分的吧?
1.构造代码块优先于构造函数。调换一下位置就行。
2.类里面没有 ...

首先你没明白我要问的意思,其次,我都已经够了25个技术分了,刷分对我没有任何意义
回复 使用道具 举报
完美恋爱 发表于 2013-11-19 09:38
首先你没明白我要问的意思,其次,我都已经够了25个技术分了,刷分对我没有任何意义 ...

我是真不明白你什么意思,输出是小明,有多种方法。能不能说清楚
回复 使用道具 举报
请具体问题,不是要输出程序里的小明么?坛友理解的不对,那你的问题是什么
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马