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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class Private1
  2. {
  3.   private String name;
  4.   private int age;
  5.   public void function()
  6.    {
  7.         name=this.name;
  8.     System.out.println(name);
  9.    }
  10.   public String function1(String name)
  11.   {
  12.    this.name=name;
  13.   }
  14. }
  15. class PrivateDemo1
  16. {
  17.   public static void main(String[] args)
  18.   {
  19.    Private1 p=new Private1();
  20.    p.function1("张三");
  21.   }
  22. }
复制代码

点评

记得及时处理帖子哦,继续追问,或将分类改成【已解决】,谢谢  发表于 2013-3-24 07:52

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 赞一个!

查看全部评分

12 个回复

正序浏览
因为你的function1 没有返回值。你定义的函数返回值类型是 String   但是却没有return 语句 所以会报错。如果不要返回子 将String改为 void就好了,。

楼上人的回答我也都看了,应该就是这个情况,如果还是报错的话,估计不是我这水平能看出来的了。你仔细检查下你的语句。符号什么的。。。
回复 使用道具 举报
不能编译通过,因为在function1函数中,是声明String类型返回值的,所以必须给出返回值,可以写成return this.name,另外你的函数中function里面name=this.name意义不大,因为当前对象this的name赋值给name,编译器编译时,赋值的时候找不到该方法中局部变量的name就会在name前面加上this修饰它,相当于这句话this.name=this.name;所以意义不大。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
(1)首先你定义的function1方法是String类型,此时的结果需要用return进行返回值操作,需要在function1方法体中的this.name=name;语句之前加入return语句。
(2)你将name和age全部私有操作时,你最好需要要对外提供一个set和get方法,便于对成员变量的使用
(3)在function方法中,加入name=this.name;这条语句是没有任何意义的。
(4)this的作用范围:
(a)当局部变量与成员变量重名时,此时我们可以用this来区分。
        class Person{
        int num=88;//成员变量
        public void method(){
                int num=99;//局部变量
                System.out.println(num);//99
                System.out.println(this.num);//88
        }
}

(b)this:代表它所在函数所属对象的引用。
        class Person{
        private int age;
        Person(int age){//构造函数在进栈的时候,都有个this所属的引用,因为这个它给对应对象的年龄进行初始化的,
                         //哪个对象调用它,this就代表哪个对象。
                this.age=age;
        }
        public boolean compare(Person p){
                return this.age==p.age;
        }
}
public class day03{
        public static void main(String[] args){
                Person p1=new Person(20);
                Person p2=new Person(20);
                boolean b=p1.compare(p2);
                System.out.println(b);
        }
}
此时,在compare方法中this.age代表的是p1的年龄,p.age就代表p2的年龄

(c)this关键字在构造函数中的调用
class Person{
        private int age;
        private String name;
        Person(){
       
        }
        Person(int age){
                this();
                this.age=age;
        }
        Person(int age,String name){
        //this也可以用于在构造函数中调用其他构造函数
                this(age);
                this.name=name;
        }
}
特别需要注意的是:this语句只能定义在构造方法的第一行,因为初始化要先执行。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
怎样在这里可以写日记啊
回复 使用道具 举报
Orina 发表于 2013-3-23 21:45
把string改为void程序应该怎样写??

把String直接改为void就ok了,不用加那句return的语句了,然后在main方法下面依然要调用p.function()方法.
回复 使用道具 举报
把string改为void程序应该怎样写??
回复 使用道具 举报
o拉,谢了啊
回复 使用道具 举报
Orina 发表于 2013-3-23 20:56
可以编译,可以运行,但没有结果.

没有结果是因为你没有在main方法中调用p.function();这句话,你加上再试一下就没有问题了

记住,要在main方法中p.function1("张三");这句话之后调用
回复 使用道具 举报
可以编译,可以运行,但没有结果.
回复 使用道具 举报
Orina 发表于 2013-3-23 20:53
你有没有改正去运行一下啊,结果还是报错.
如果我把void改成String行不行呢?

你可以告诉我报 的什么错吗?因为我运行过了,打印出张三了,是不是你哪里的分号没加上?还是什么细节的地方,你把报错信息告诉我,我就知道了,你改成void和在后面加上return this.name的效果是一样的.
回复 使用道具 举报
你有没有改正去运行一下啊,结果还是报错.
如果我把void改成String行不行呢?
回复 使用道具 举报
本帖最后由 胡国彬 于 2013-3-23 20:52 编辑

不能运行是因为你的Private1这个类的function1方法定义的是返回类型是String,但是你的方法体中没有给出返回值,所以会报错.
其实你只需要在function1中最后面加上一句代码就ok了,加上:    return this.name; 然后再在main方法中的最下面加上p.function(),就可以在控制台输出张三了.
你的function方法中的name=this.name;这句代码是无用的
this不光能在构造函数中使用,还可以在其他的方法中使用.

评分

参与人数 1技术分 +2 收起 理由
陈丽莉 + 2 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马