黑马程序员技术交流社区

标题: 求这个代码的运行结果 [打印本页]

作者: 潘际昌    时间: 2013-11-24 10:52
标题: 求这个代码的运行结果
  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);
复制代码

作者: 樊志伟    时间: 2013-11-24 10:55
连主函数都没有,怎么运行?
作者: FFF    时间: 2013-11-24 11:22
我把代码改了一改。你看看是否能你有帮助~
  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. }
复制代码

作者: 乔_博_文    时间: 2013-11-24 11:35
必须是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. }
复制代码

作者: 还不到时候    时间: 2013-11-24 12:29
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. //希望能够帮助楼主解答疑惑
复制代码

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

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

         x+=x;

             System.out.println("x="+x);
         }
这里的变量x访问的就是类的成员变量x了
作者: 潘际昌    时间: 2013-11-24 12:47
FFF 发表于 2013-11-24 11:22
我把代码改了一改。你看看是否能你有帮助~

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

还是你懂我:victory:
作者: 繁华终成泣    时间: 2013-11-24 12:57
10啊,就近原则
作者: 还不到时候    时间: 2013-11-24 13:06
但我觉得版主的代码那句代码写的好,其实我也是改了你的代码,加了this.x = x 是为了能更简单的理解,但这句话不是默认存在的,加与不加对你目前的需求没什么大的影响,但是
在主函数中输出:System.out.print(t.x),加与不加this.x = x 得到的结果是不一样的,你自己再加强理解下。
作者: 胡陈思    时间: 2013-11-25 22:07
哈哈,楼主只要是结果,当然结果是10了。版主改的好,但是改的多了点吧,题目是调用本类对象,改成两个类了。




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