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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王龙 中级黑马   /  2012-10-22 19:37  /  2902 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是我的主函数,为啥name不对
package abc;

public class PersonDemo {

        public static void main(String[] args) {
                Peron p=new Peron();
                p.name="zhangsan";
                p.show();

        }

}


这是Person函数
package abc;

public class Peron {
        private String name;
         private int  age;
        private String country="CN";
       
        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }

        public int getAge() {
                return age;
        }

        public void setAge(int age) {
                this.age = age;
        }

        public String getCountry() {
                return country;
        }

        public void setCountry(String country) {
                this.country = country;
        }

        public void show(){
                System.out.println(name+"::"+country);
        }
       
}


点评

哥们细心点,不要出这样的错误啊,私有的你都不知道你怎么p.name 的啊  发表于 2012-11-12 20:38

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

13 个回复

正序浏览
public class PersonDemo {
        public static void main(String[] args) {
                Peron p=new Peron();
                p.name="zhangsan";
                p.show();
        }
}
1.name是Person类中的私有属性,p.name这样是不能直接调用的,因为会出现字段Person.name不可视,
必须提供公有的方法来访问私有的属性,也就是set()和get()方法才能被调用,所以应该把p.name="zhangsan";
改成p.setName("zhangsan");
2.public class Peron {
程序的功能的次要的,最重要的是养成良好的编程习惯,我建议你还是把Peron改成Person,这样的话让别人
一看就知道是表达人的特性。
回复 使用道具 举报
私有属性在本类外是直接访问不了的,必须提供公有的方法进行访问。 你可以p.setName("张三")  或者把private string name改为public   String  name;

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 刘艳伟 于 2012-11-14 20:09 编辑

  对于私有成员变量或方法,只有在本类中创建该类的对象时,这个对象才能访问自己的私有成员变量和类中的私有方法。你要为name属性赋值,只能采用调用其set方法的形式来实现,如p.setName("zhangsan");
  如果你想采用p.name="zhangsan";的形式,可以按如下方式实现:
Person.java
===============================
package abc;//两个类在同一个包中

public class Person {
        String name;//当不用public、protected、private修饰时,为友好变量
        int age;
        String country = "CN";
   //所有的get/set方法可以不写,不影响运行
        public void show() {
                System.out.println(name + "::" + country);
        }
}

PersonDemo.java
===============================
package abc;//两个类在同一个包中

public class PersonDemo {
        public static void main(String[] args) {
                Person p = new Person();
                p.name = "zhangsan";
                p.show();
        }
}

  采用以上方式时,Person.java中的变量是友好变量,只有当以上两个类在相同包中时才能成功运行,如果二者不在同一个包中,则要将Person.java中的变量改为public的才行。如下所示:
Person.java
===============================
package com.a;//此类在com.a包中

public class Person {
        public String name;
        public int age;
        public String country = "CN";
   //所有的get/set方法可以不写,不影响运行
        public void show() {
                System.out.println(name + "::" + country);
        }
}

PersonDemo.java
===============================
package com.b;//此类在com.b包中

public class PersonDemo {
        public static void main(String[] args) {
                Person p = new Person();
                p.name = "zhangsan";
                p.show();
        }
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 dan8612 于 2012-11-13 22:36 编辑

因为你把name私有化了。
p.name="zhangsan";可以改为p.setName("zhangsan");

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你调用那个属性name属于Person类私有属性  
既然您使用了属性封装 如果在外部调用或赋值就必须用该属性提供的get()和set()方法
public class PersonDemo {

        public static void main(String[] args) {
                 Peron p=new Peron();
                  p.setname("zhangsan");
                 p.show();

        }

}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
7℃洋 中级黑马 2012-11-12 21:57:52
9#

public class PersonDemo {

        public static void main(String[] args) {
                 Peron p=new Peron();
                 p.name="zhangsan";
                 p.show();

        }

}
你这不是函数的调用吧,应该该为:

public class PersonDemo {

        public static void main(String[] args) {
                 Peron p=new Peron();
                 p.setname(zhangsan);
                 p.show();

        }

}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public is ok!
回复 使用道具 举报
邱峁 中级黑马 2012-11-12 18:29:54
7#
你的name是用private修饰的属性 不是方法,在别的类中是调用不了的。
public void setName(String name)
                        {
                 this.name = name;

这里的name有两个
name一个是共我们改变属性值的,你可以不用这个名
this.name一个是属性的,

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在Peron方法中,name被private修饰,就不能在PersonDemo类中直接调用,编译就通不过
回复 使用道具 举报
  1. class PersonDemo
  2. {

  3.         public static void main(String[] args)
  4.                         {
  5.                  Person p=new Person();
  6.                  p.setName("zhangsan");
  7.                  p.show();

  8.             }

  9. }

  10. class Person
  11. {       
  12.                  private String name;
  13.          private int  age;
  14.          private String country="CN";
  15.          
  16.         public String getName()
  17.                         {
  18.                  return name;
  19.             }

  20.         public void setName(String name)
  21.                         {
  22.                  this.name = name;
  23.             }

  24.         public int getAge()
  25.                         {
  26.                  return age;
  27.             }

  28.         public void setAge(int age)
  29.                         {
  30.                  this.age = age;
  31.             }

  32.         public String getCountry()
  33.                         {
  34.                  return country;
  35.             }

  36.         public void setCountry(String country)
  37.                         {
  38.                  this.country = country;
  39.             }

  40.         public void show()
  41.                         {
  42.                  System.out.println(name+"::"+country);
  43.             }
  44.          
  45. }
复制代码
我打了一个修改后的代码:

点评

非常感谢  发表于 2012-10-22 20:43

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
1.public class PersonDemo{}和public class Peron{}是不需要在前面加上public声明的
2.p.name="zhangsan";这一句你有两个错误:
      第一个是你在Peron中定义了setName来获取名字,应该是p.setName
      第二个是赋值有问题,应该是p.setName("zhangsan")
还有一点是Person而不是Peron 当然这个无伤大雅

点评

那个public申明只是扩大类的权限的,不是说有setName而是他的name属性是私有的  发表于 2012-11-12 20:41
回复 使用道具 举报
p.name="zhangsan";  改为p.setName("zhangsan");

还有哥们你的Peron拼错啦,应该为Person

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 给你的细心奖励个

查看全部评分

回复 使用道具 举报
本帖最后由 汪坤洋 于 2012-10-22 19:50 编辑

用p.setname获取name,p.getname输出name,p.name是person是静态类时好像才可以调用

点评

你说反了吧,setName是设置名字吧,get是得到  发表于 2012-11-12 20:37
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马