黑马程序员技术交流社区

标题: 大伙帮我看看,基础问题 [打印本页]

作者: 王龙    时间: 2012-10-22 19:37
标题: 大伙帮我看看,基础问题
这是我的主函数,为啥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);
        }
       
}



作者: 汪坤洋    时间: 2012-10-22 19:49
本帖最后由 汪坤洋 于 2012-10-22 19:50 编辑

用p.setname获取name,p.getname输出name,p.name是person是静态类时好像才可以调用
作者: 吴兵    时间: 2012-10-22 20:15
p.name="zhangsan";  改为p.setName("zhangsan");

还有哥们你的Peron拼错啦,应该为Person
作者: 杨雪松    时间: 2012-10-22 20:24
1.public class PersonDemo{}和public class Peron{}是不需要在前面加上public声明的
2.p.name="zhangsan";这一句你有两个错误:
      第一个是你在Peron中定义了setName来获取名字,应该是p.setName
      第二个是赋值有问题,应该是p.setName("zhangsan")
还有一点是Person而不是Peron 当然这个无伤大雅
作者: 杨雪松    时间: 2012-10-22 20:26
  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 21:34
在Peron方法中,name被private修饰,就不能在PersonDemo类中直接调用,编译就通不过
作者: 邱峁    时间: 2012-11-12 18:29
你的name是用private修饰的属性 不是方法,在别的类中是调用不了的。
public void setName(String name)
                        {
                 this.name = name;

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

作者: jerry2627    时间: 2012-11-12 19:30
public is ok!
作者: 7℃洋    时间: 2012-11-12 21:57

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();

        }

}
作者: 黑_礼_服    时间: 2012-11-13 14:42
你调用那个属性name属于Person类私有属性  
既然您使用了属性封装 如果在外部调用或赋值就必须用该属性提供的get()和set()方法
public class PersonDemo {

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

        }

}

作者: 郑丹丹    时间: 2012-11-13 15:12
本帖最后由 dan8612 于 2012-11-13 22:36 编辑

因为你把name私有化了。
p.name="zhangsan";可以改为p.setName("zhangsan");
作者: 刘艳伟    时间: 2012-11-14 20:04
本帖最后由 刘艳伟 于 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();
        }
}

作者: 赵保磊    时间: 2012-11-14 20:30
私有属性在本类外是直接访问不了的,必须提供公有的方法进行访问。 你可以p.setName("张三")  或者把private string name改为public   String  name;
作者: 韩俊杰    时间: 2012-11-18 19:28
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,这样的话让别人
一看就知道是表达人的特性。





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