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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 潘际昌 中级黑马   /  2013-11-24 10:52  /  2575 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Test {
  2. int x= 12;
  3. public void method(int x) {
  4. x+=x;
  5. System.out.println(x);
  6. }
  7. }
  8. Given:
  9. Test t = new Test();
  10. t.method(5);
复制代码

评分

参与人数 1黑马币 +5 收起 理由
枫儿 + 5 神马都是浮云

查看全部评分

11 个回复

倒序浏览
连主函数都没有,怎么运行?
回复 使用道具 举报 1 0
FFF 金牌黑马 2013-11-24 11:22:38
藤椅
我把代码改了一改。你看看是否能你有帮助~
  1. class Testgood {
  2.          int x= 12;
  3.          public void method(int x) {
  4.          this.x+=x;
  5.          x+=x;
  6.          System.out.println("加this的x="+this.x);
  7.          System.out.println("没有加this的x="+x);
  8.          }
  9.          }
  10. class Temp11_24{
  11.         public static void main(String[] args){
  12.          Testgood t = new Testgood();
  13.          t.method(5);
  14.         }
  15. }
复制代码
回复 使用道具 举报
必须是10啊~
  1. public class Test {
  2.         int x = 12;//此处x只是在栈中声明了一个值为12的int型变量,它被使用时,是作为实际参数传递给调用它的方法或者别的一些功能
  3.        
  4.         public void method(int x){
  5.         //这里括号内的x不是上面声明值为12的x,这里的X只是一个形式参数,它是在被调用的时候才被赋值的
  6.                 System.out.println(x+=x);
  7.         }
  8. }

  9. public class TestDemo {
  10.         public static void main(String[] args) {
  11.                 Test t = new Test();
  12.                 t.method(5);//此处才开始对Test内 method(int x)中的x赋值,跟Test中声明的int x=12没关系。       
  13.         }
  14. }
复制代码

评分

参与人数 1技术分 +1 黑马币 +5 收起 理由
枫儿 + 1 + 5 很给力!

查看全部评分

回复 使用道具 举报
FFF 发表于 2013-11-24 11:22
我把代码改了一改。你看看是否能你有帮助~

版主的java基础知识确实扎实。我个人觉得添加了this.x+=x这句代码确实让人一目了然,我想楼主想要得到的解答结果是为什么int x = 12没有参与到运算中去。  本人新手,根据自己理解帮助解答,错误之处希望谅解。
  1. lass Testgood {

  2.          int x= 12;//显式初始化值,跟默认的初始化值0的效果是一样的,不必过多纠结。

  3.          public void method(int x) {

  4.              this.x = x;//相当于有参的构造函数Testgood(int x)给调用的对象属性初始化。传入的x的值覆盖掉了显示初始化值

  5.              x+=x;

  6.              System.out.println("x="+x);
  7.          }
  8.         //这里有一个默认的无参构造方法,实际上没有给要创建的对象属性初始化,对象的属性值就是显式初始化值12。那为什么?还要存在呢?是为了给继承的父类对象属性进行初始化,这就是为什么每个构造函数里都有默认的super()这句话了

  9. }

  10. class Temp11_24{

  11.         public static void main(String[] args){

  12.            Testgood t = new Testgood();

  13.            t.method(5);
  14.         }

  15. }
  16. //希望能够帮助楼主解答疑惑
复制代码

评分

参与人数 1技术分 +1 黑马币 +5 收起 理由
枫儿 + 1 + 5 很给力!

查看全部评分

回复 使用道具 举报
还不到时候 发表于 2013-11-24 12:29
版主的java基础知识确实扎实。我个人觉得添加了this.x+=x这句代码确实让人一目了然,我想楼主想要得到的 ...

如果 Testgood类中重载了
public void method() {

         x+=x;

             System.out.println("x="+x);
         }
这里的变量x访问的就是类的成员变量x了
回复 使用道具 举报
FFF 发表于 2013-11-24 11:22
我把代码改了一改。你看看是否能你有帮助~

谁叫你改代码啦:L我要的是运行结果和解释,代码我也会改
回复 使用道具 举报
还不到时候 发表于 2013-11-24 12:29
版主的java基础知识确实扎实。我个人觉得添加了this.x+=x这句代码确实让人一目了然,我想楼主想要得到的 ...

还是你懂我:victory:
回复 使用道具 举报
10啊,就近原则
回复 使用道具 举报
但我觉得版主的代码那句代码写的好,其实我也是改了你的代码,加了this.x = x 是为了能更简单的理解,但这句话不是默认存在的,加与不加对你目前的需求没什么大的影响,但是
在主函数中输出:System.out.print(t.x),加与不加this.x = x 得到的结果是不一样的,你自己再加强理解下。
回复 使用道具 举报
哈哈,楼主只要是结果,当然结果是10了。版主改的好,但是改的多了点吧,题目是调用本类对象,改成两个类了。

点评

FFF
嘿嘿~~~  发表于 2013-11-25 23:41
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马