黑马程序员技术交流社区

标题: 关于get中的问题 [打印本页]

作者: 侯茂绵    时间: 2012-7-15 22:52
标题: 关于get中的问题
本帖最后由 侯茂绵 于 2012-7-16 14:53 编辑

class Student
{
private  String name;
Sudent(String name)
{
this.name=name
}
public void setName(String name)
{
this.name=name;
}
public getName()   //  get前面为啥不能加void   经常习惯就加void
{
return name;
}
}

代码简写啦
作者: 贾飞雨    时间: 2012-7-15 23:02
有了return,也就是有了返回值了,那你还加什么void啊?以后就记住,有return必须不能有void,
加void的情况是没有返回值,一种是直接打印,你都打印了还有什么返回值啊?另一种是对引用型变量的操作,比如你传进来个数组啊,然后对他排序什么的,就没有返回值,所以用void,
作者: 何旭栋    时间: 2012-7-15 23:03
void方法不需要返回值的,既然是get方法,就必须要拿到东西,必须要有返回类型
所以get什么,就要return什么类型,name是String类型,就必须是
public String getName()
作者: 黄昆    时间: 2012-7-15 23:04
class Student
{
private  String name;
Sudent(String name)
{
this.name=name
}
public void setName(String name) //此处是设置属性的值,只需要传入一个值进去,不需要返回值,所以是void。
{
this.name=name;
}
public String getName()   //  此处是获取属性的值,返回值当然是定义的属性的类型啦。所以应该设置换回值为String。
{
return name;
}
}
//被private修饰的属性一般都要定义get和set方法,get方法是获取属性,set方法是设置属性。
作者: 程宏志    时间: 2012-7-15 23:05
set中使用void是因为没有返回值,而get后的函数是有返回值的!void的使用是一种语法形式!毕老师的视频有讲,留心他所说的话!
作者: 黑马振鹏    时间: 2012-7-15 23:07
应该是public String getName()   {
return name;
}
首先看定义 private  String name;
name是String类型的
getName这个函数是用来返回name的,函数的返回类型肯定是跟定义里一致的,应该用String
作者: 郑文博    时间: 2012-7-15 23:19
被私有修饰的成员变量,为了对外提供设置和获取方法,特意设置set()跟get()方法。
set()方法是为了传值的,故不需要返回对象,故用void修饰。
而get()方法是要返回所要获取的对象的成员变量值的,所以需要返回这个变量,故要在方法上定义返回值类型。
作者: 程潇    时间: 2012-7-15 23:29
这个问题暴露了你对于方法及其返回值理解不够透彻。
我们在定义一个方法时,首先就要考虑这个方法的功能是什么,即确定该功能的运算结果是什么,是否有返回值,确定返回值类型。然后还要明确在定义该功能的过程中是否需要未知的内容参与运算,即形参。
函数的定义主要考虑这两个方面:返回值和形参。

  1. class Student
  2. {
  3.     private  String name;
  4.     Sudent(String name)
  5.     {
  6.         this.name=name
  7.     }
  8.     public void setName(String name)
  9.     {
  10.         this.name=name;
  11.     }
  12.     public String getName()   //  此方法的作用是返回name,name的类型为String,方法的返回值类型自然就是String了
  13.     {
  14.         return name;
复制代码

作者: 柯玲    时间: 2012-7-15 23:41
用面向对象的思维来解释吧
我们知道,name是Student身上的一个私有属性,那我们要怎样才能获得类的私有属性呢?---当然是通过一个方法。那这个方法又是定义在哪里的呢?
根据面向对象的通俗理解“变量为私有,这个变量在谁身上,操作变量的方法就在谁身上。如果要操作这个变量,就要访问拥有变量的对象”
由此知道:getName()的方法应该定义在所属类Student里面。又知道我们定义此方法肯定是给外界操作的,它们就想知道name,所以必须有返回值,
而name在之前又被定义为String类型,所以返回值类型就为String.

就如“画圆”这个动作,画的方法在圆身上,我们通过circle.draw();操作这个方法以后会得到一个圆,所以circle就必须有返回值且返回值类型为圆
作者: 王宝康    时间: 2012-7-15 23:43
void是"无返回值"的意思,你的getXXX方法怎么会没有返回值呢,get是什么啊,get是获取,getXXX方法一般都是对象调用来取到对象的某一属性的,当然要有返回值了,你既然get了,想要返回东西了,你还加void(无返回值),这不是矛盾吗,你这时候应该加你要获取的那个对象属性的数据类型,就像你程序中的Student类的name属性,然后你定义的它是String类型的,所以,你的返回值类型就为String,即String getName() ,你的getName()会返回一个String类型的值。
作者: 陆鹏    时间: 2012-7-16 00:10
class Student
{
private  String name;
Sudent(String name)
{
this.name=name
}
public void setName(String name)
{
this.name=name;
}
public getName()   //  get前面为啥不能加void   经常习惯就加void
                           //那我问你,你返回的name是什么类型的?上面明明定义了那么是String,你却返回空?{
return name;
}
}

作者: 陆鹏    时间: 2012-7-16 00:11
class Student
{
private  String name;
Sudent(String name)
{
this.name=name
}
public void setName(String name)
{
this.name=name;
}
public getName()   //  get前面为啥不能加void   经常习惯就加void
                           //那我问你,你返回的name是什么类型的?上面明明定义了name是String,你却返回空?{
return name;
}
}

作者: 樊占江    时间: 2012-7-16 00:22
因为getname()有返回值,所以不能加void,void用于直接打印,没有返回值得情况下
作者: 牛少锋    时间: 2012-7-16 00:30
这是个封装的类,里面的代码是封装的,你需要定义个Public方法来返回你类里的私有成员变量,void()方法是没有返回值的。哥们还是改变习惯吧,虽然你对void很熟悉,具体问题具体对待
作者: 贾存双    时间: 2012-7-16 04:43
你这地方编译不会通过,缺少返回值类型。
作者: 党巾水    时间: 2012-7-16 11:44
public getName()   //  void代表没有返回值,楼主既然写了return name,就是返回name。所以这里要加上返回值类型String.
{
return name;
}

函数中只要return后面不是null,就要有对应的返回值类型,这个返回值类型除了基本数据类型,数组之外,还可以写类名。
作者: 苑占丽    时间: 2012-7-16 12:29
class Student
{
private  String name;
Sudent(String name)
{
this.name=name
}
public void setName(String name)
{
this.name=name;
}
public getName()   //  get前面为啥不能加void   经常习惯就加void
//因为get返回的是一个确定的值呀,void返回的是空类型,如果方法里只有输出的,方法的返回类型就是void。因为它并没有返回任何值,是直接输出了呀。而这个成员变量的get方法是希望得到name的值,所以,你觉得定义成void  ok吗?,,,应该根据成员变量的数据类型来判断得getXXX()的返回类型,当然,本题很明显是String类型。
{
return name;
}
}

作者: 高欢欢    时间: 2012-7-16 13:25
void  是空类型,不需要返回值得,既然有返回值了,方法的类型就不能定义为void!
作者: 王飞    时间: 2012-7-16 14:17
首先:return 是可以存在于返回值为void的方法中滴{:soso_e183:}
class Student
{
private  String name;
Sudent(String name)
{
this.name=name;
}
public void setName(String name)
{
this.name=name;
}
public void getName()   //  get前面为啥不能加void   经常习惯就加void----这个可以加void的,但是你在有return的方法中就不能return name或者return null了 ,只能return (什么都不写);此时return返回的就是void,不过这样写没意义

在方法中有return的情况下是可以把方法的返回类型设置成void,如果你设置成void,那么return 后面就什么都不能写,只能以分号;结尾。

此时就和没有返回值的方法(void 的方法)一样了

{
return name;   -------此处就应该改为return ;
}
}


楼主啊:
你写方法之前首先要明确以下几点:
要先想好-------有没有返回值 、------返回值类型又是什么、------

这是写方法之前要明确的




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