黑马程序员技术交流社区

标题: java基础中封装的小问题求解 [打印本页]

作者: 不去会死    时间: 2014-6-11 09:28
标题: java基础中封装的小问题求解
本帖最后由 不去会死 于 2014-6-13 07:32 编辑

  1. public class Test{
  2.         public static void main(String[] args){
  3.                 Person p = new Person();
  4.                 p.setAge(40);
  5.                 p.person();
  6.         }
  7. }
  8. class Person
  9. {
  10.        private int age;

  11.        public void setAge(int a)
  12.       {
  13.               age = a;
  14.        }
  15.         public int getAge()
  16.        {
  17.               return age;
  18.        }
  19.       void person()
  20.       {
  21.              System.out.println("age" + "=" + age);
  22.        }
  23. }
复制代码



作者: 姿_`态    时间: 2014-6-11 09:32
楼主是什么问题呐,
作者: 不去会死    时间: 2014-6-11 09:36
后面的代码居然没有显示,为什么啊?
public class Test{
      public static void mian(String[] args){
             Person p = new Person;
             p.setAge(40);
      }
}
运行结果:40
为什么主函数调用setAge方法,却能够返回getAge中的age,但是getAge方法并没有设置形参,谁能给一个解释一下吗?
作者: 不去会死    时间: 2014-6-11 09:38
姿_`态 发表于 2014-6-11 09:32
楼主是什么问题呐,

刚才不知道为什么后面的代码没有显示,现在后面补充了,求解释
作者: 不去会死    时间: 2014-6-11 10:18
整个类中成员变量age是同一个,太糗了:shutup:
作者: 四顾行者    时间: 2014-6-11 10:38
你连speak()方法都没有调用,居然还能输出运行结果。new person()还有括号,算是默认构造函数
作者: axuan    时间: 2014-6-11 10:42

getter 方法不能有任何参数,始终返回一个值。
setter 方法始终带一个参数,从不返回任何值。
getter 和 setter 方法能够以直接访问的方式访问类属性
调用 getter 和 setter 方法时,方法名后面不带任何括号或参量。调用 getter 和 setter 方法与按相同的名称调用属性类似
作者: tanshion    时间: 2014-6-11 10:44
Class Person
{
       private Int age;

       public void setAge(int a)
      {
              this.age = a;
       }
        public int getAge()
       {
              Return age;
       }
       void speak()
      {
             System.out.println(“age”+age);
       }
}
public class Test{
      public static void mian(String[] args){
             Person p = new Person();
             p.setAge(40);
      }
}
这个是通过set方法给成员变量赋值由get方法获取值吧!!
作者: 姿_`态    时间: 2014-6-11 10:46
之所以能够返回,是因为return语句,return 的是age ,age成员变量,所以不需要参数,因为就算有参数你也没有操作它,只是返回了而已,所以不需要参数,你得到的结果肯定是调用了speak()方法,那有一个输出语句,把return的东西输出了,所以就显示了
作者: 不去会死    时间: 2014-6-11 10:53
四顾行者 发表于 2014-6-11 10:38
你连speak()方法都没有调用,居然还能输出运行结果。new person()还有括号,算是默认构造函数 ...

额,大意了,那个void我应该去掉的
作者: a6217815    时间: 2014-6-11 10:54
你这代码能编译通过?
1、建立对象的时候Person后面的括号没了。
2、别说出的结果对不对,你连speak()方法都没有调用。
3、编译器 看的懂 Int、Return这样的词?java是区分大小写的。
4、定义的是age,setAge()方法中调用的是Age,这两个根本不是一个函数。
----------------------------------------------
赶紧看视频去....这些错误也太基础了,根本不可能编译,别说出结果了
作者: 不去会死    时间: 2014-6-11 11:03
a6217815 发表于 2014-6-11 10:54
你这代码能编译通过?
1、建立对象的时候Person后面的括号没了。
2、别说出的结果对不对,你连speak()方法 ...

这个我确实没有试过,我是在Word中打出来并复制过来的,很多它自动调整到大写了,本来只是想问一下原理,结果出了这么多小问题,我从新整理一下代码
作者: a6217815    时间: 2014-6-11 11:41
不去会死 发表于 2014-6-11 11:03
这个我确实没有试过,我是在Word中打出来并复制过来的,很多它自动调整到大写了,本来只是想问一下原理, ...

哦 这样啊,那就先不管大小写问题。还是建立对象的时候的括号补上,然后你在主函数中调用speak方法  p.speak(),这样才能输出 age40,调用getAge方法 p.getAge()就会输出 40。
只调用一个p.setAge()只能赋值不能返回结果的..
作者: 18353666072    时间: 2014-6-11 12:18

  1. public class Test{
  2.         public static void main(String[] args){
  3.                 Person p = new Person();//创建了person对象,你就可以使用person中的set,,get方法,
  4.                 p.setAge(40);这里你给他传值为40;
  5.                 p.person();这里你调用的是person中的构造方法,所以那就会执行构造方法中的输出语句,  System.out.println("age" + "=" + age);
  6.         }
  7. }
  8. class Person
  9. {
  10.        private int age;

  11.        public void setAge(int a)
  12.       {
  13.               age = a;
  14.        }
  15.         public int getAge()
  16.        {
  17.               return age;
  18.        }
  19.       void person()
  20.       {
  21.              System.out.println("age" + "=" + age);
  22.        }
  23. }
复制代码


楼主的问题是:为什么主函数调用setAge方法,却能够返回getAge中的age,但是getAge方法并没有设置形参
---------是因为return语句,return 的是age 的成员变量;他就是返回一个数值的作用,记住就好啊,,,,,
嘻嘻嘻。。。。。技术分啊  啊 {:3_51:}




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