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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙沛 中级黑马   /  2012-9-3 20:06  /  4054 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙沛 于 2012-9-3 20:20 编辑

看到视频里初始化对象之后有这两个方法
public void setname(String s){
    name = s;//请问这个name为什么前面不加Sting
                  //请问为什么不用return name而用void
}
public getname(){
    return name; //请问这个name是从哪里来的
}
大家别嫌弃我是菜鸟啊,真的不懂,另外给我讲解下,setname和get那么的执行的原理吧

点评

对不起,我看错了,这是一个之前的帖子。。。  发表于 2012-9-16 18:44
奇怪这都不知道 为什么24分哎  发表于 2012-9-16 18:42
你这几行代码的问题比较多,命名有问题,getName的返回值掉了,革命尚未成功,仍需努力!!!  发表于 2012-9-3 21:11

10 个回复

倒序浏览
public void setname(String s){
    name = s;//请问这个name为什么前面不加Sting  这个String 前面是指给变量指定属性类型,这里name是给八s赋值给name,就是把传进来的数值给你新建的对象的name属性
                  //请问为什么不用return name而用void  这里的void是指格式,没什么实际意义
}
public getname(){
    return name; //请问这个name是从哪里来的 name来自的类里面的属性值
}
回复 使用道具 举报
//请问这个name为什么前面不加Sting
在完整的代码里面已经声明的name变量的数据类型是String,所以在函数里面不需要再声明一次。
你去看看完整的代码。

//请问为什么不用return name而用void
因为这个函数只是设置name的值而已,没有未知内容,所以不需要返回值类型。
而且你这个问法有点问题,是因为用了void的返回值类型之后,才不用return。
void是没有具体返回值类型,所以return省略不写。

//请问这个name是从哪里来的。
如果是name的值哪里来呢,就是上面setname函数赋予。
如果你问的是name这个变量是哪里来,这个name就是完整代码里面所声明变量
回复 使用道具 举报
public void setname(String s){
     name = s;//请问这个name为什么前面不加Sting    //楼主仔细看代码,在类的成员变量里面应该会有定义一个name对象,即private String name;
                                                                             //而行就相当于this.name = s;
                   //请问为什么不用return name而用void   //setName方法是用参数s改变name的值,不用做返回值的动作
}
public getname(){   //这行错了,要改成public String getName()
     return name; //请问这个name是从哪里来的    //返回的就是成员变量name
}

一般代码如下

public class Student {
private int age;
private String name;
Student(int age,String name){
  this.age=age;
  this.name=name;
}
public void setName(String name){
  this.name=name;
}
public String getName(){
  return name;
}
}

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 吴通 于 2012-9-3 21:17 编辑

楼主你好
这个属于面向对象的封装思想。
通过封装可以把不需要对外提供的内容隐藏起来,只需要对外提供访问方式就行了。
通过private关键字把name私有,那么需要提供一种能够访问人name的方式
通过set和get来实现这个功能,也就是设置和获取。
调用的函数能够通过set来初始化变量,通过get返回值来获取这个变量。
set设置不需要返回值,故它的类型为void ,get的返回值就是name的类型,故为String

class Person
{
private String name;
private int age;
public void setName(String n)  //下面getName也为String
{
  name=n;
}
public String getName()
{
  return name;
}
public int setAge(int a)   //下面getAge也为int
{
  age=a;
}
public int getAge()
{
  return age;
}
    void speak()
}

class PersonDemo1
{
public static void main(String[] args)
{
  Person p=new Person();
  p.setName("lishi");
  p.setAge(20)
  System.out.println(p.getName()+"::"+p.getAge());
}
}

可以看出set接收的类型就是get的返回值类型,
想age,setAge(int a),里面是int类型的,则获取也是int的,setName(String n),是String类型的,则获取get也是String类型的。
因为获取的当然是设置的值,那么获取的当然是设置值的类型。
getName里面的return name的name就是setName里面设置的

点评

setAge()返回值错误,请改正!  发表于 2012-9-3 21:09

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 建议加上this.

查看全部评分

回复 使用道具 举报
本帖最后由 冰舞世界 于 2012-9-3 21:08 编辑

java语言具有封装的特性,private私有是封装的一种特性。
成员变量一旦被private;外部的东西就不能访问它了
例如
class Person
{
    private name; // name 被private了,Person类外部就访问不到name,  


我们在外部要想访问Person中的name,就必须对name进行设置和获取
name被private了 ,不能直接访问或者获取,必须先改变name的属性,用set()方法设置一下 即

public void setName(String s){
          name = s; // 不加String,是因为这句的意思对Private了的name 进行设置,已经知道name就是person中的private 的name。如果String name相当于给name指定类型,重新定义      
}
这段的意思对name进行设置,不需要return,

设置好了 就获取
public String getName()
{
           //通过上面的setName()方法对private 了name进行设置,那么现在就可以获取到了。
           return name;
          //这个name还是成员变量中的name,只不过是现在这个name,被访问的权限大了而已
}
任何成员变量和方法一旦被private,外部想访问,就必须通过set和get方法,进行设置和获取。
回复 使用道具 举报
类中的成员变量肯定有String name;
方法前修饰符为void setName()不需要有返回值所以不用写return,如果要写也可以写return;。
而在方法getName()中获取name所以需要返回值,楼主写错了,应该是 String getName(){  return name;}
回复 使用道具 举报
哥们,对于你说的那个name前边为什么不加String,其实这个在前边已经定义过了,name是个私有化成员变量。
当这个Person类中对name进行了私有化时,是为了安全,不让外部进行随意的修改。所以用方法setName()和getName()加以访问。
规范代码如下:
  1. class Person
  2. {
  3.         private String name;
  4.         Person(String name)
  5.         {
  6.                 this.name = name;
  7.         }

  8.         public void setName(String name)
  9.         {
  10.                 this.name = name;
  11.         }

  12.         public String getName()
  13.         {
  14.                 return name;
  15.         }
  16. }
复制代码
回复 使用道具 举报
{:soso_e101:}
回复 使用道具 举报
表示我无法回答,压力很大
回复 使用道具 举报
bucuo..........
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马