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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© LINUS 中级黑马   /  2013-3-30 22:58  /  2647 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 LINUS 于 2013-3-30 23:47 编辑

已知Student类,属性name,age;写出这个类,要求有属性,set和get方法,无参构造函数,有参构造函数(name, age)。

这是我下面的代码。学的已经乱套了,

什么时候用getName 什么时候需要建立对象,这个问题正确格式应该是?

可以具体代码给加注释 剖析一下么?万分感谢。

class Student(){
  String name;
  int age;
  public void method(){
  this.name = name;
  this.age = age;
  }
  setName(){
  String name = "张三";
  int age = 20;
  
  }
  getName(String name , int age){
          return ;
  }
}
class Demo{
        public static void main(String[] args){
          Student p = new Student();       
      p.method;
        }
}

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

10 个回复

倒序浏览
正确答案因该是:
class Student{
private String name;
private int age;

public Student() {//无参构造方法
}
public Student(String name, int age) {//有参构造方法
  this.name = name;
  this.age = age;
}
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;
}
}
class Test
{        
        public static void main(String[] args)
        {
         Student st=new Student("king",24);//为其进行初始化赋值
         System.out.println(st.getName());//得到返回的年龄
         System.out.println(st.getAge());

}
}
希望帮到你!
         

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
我明你说的意思
本身你的代码就是错的
回复 使用道具 举报
  1. package A;

  2. class demo
  3. {
  4.         public static void main(String args[])
  5.         {
  6.                 //创建对象
  7.                 student p=new student("张三",12);
  8.                 //调用对象类中的method方法
  9.                 p.method();
  10.                 //通过调用函数中getname和getage来显示姓名 年龄
  11.                 System.out.println("从主函数中调用getname和getage输出的这个人的姓名是:"+p.getname()+"\t年龄是:"+p.getAge());
  12.         }       
  13. }
  14. class student
  15. {
  16.         //定义私有的name age 变量。
  17.         private String name;
  18.         private int age;
  19.         //构造函数   
  20.         student (String name ,int age)
  21.         {
  22.                 this.name=name;
  23.                 this.age=age;
  24.         }
  25.         //name是私有变量,外部类不能调用,因此添加getname方法,返回name的值
  26.         public String getname()
  27.         {
  28.                 return name;
  29.         }
  30.         //同理与name
  31.         public int getAge()
  32.         {
  33.                 return age;
  34.         }
  35.         //student中的method方法,可以在对象中调用
  36.         public void method()
  37.         {
  38.                 System.out.println("method方法输出的姓名年龄:"+name+"\t"+age);
  39.         }

  40.         }
复制代码
你注意两次输出的代码。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
嘿嘿 楼主比较实在,楼主的这句话挺逗“这是我下面的代码。学的已经乱套了”

闲话少说,楼主这段代码,首先涉及一个封装的概念。

面向对象的封装,就是把一个对象的属性和行为(方法)封装到一个模块(类)中,
通常是将属性私有化,在提供get和set方法来访问这些属性。这样就达到了封装的目的。
当然我说的还不够全面,我说的这些是面向对象编程的基本思想。

你这个变量就是属性
可以封装成这样  
public class Student {
       
        private String name;
       
        private int age;

        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;
        }

}

同时还可以提供构造方法在里面    一些数值的传递我就不多说了,怕地方不够了 嘿嘿

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
class StudentDemo
{
        String name;
        int age;
        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 class Test
{
        public static void main(String args[]){
               
                StudentDemo s = new StudentDemo();
                s.setName("zhangsan");
                s.setAge(10);
                System.out.println("姓名  :"+s.name+",年龄  :"+s.age);
        }
}


感觉这个比较靠谱

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 黄诗宾 于 2013-3-30 23:26 编辑

2种方法代码实现如下,学会第一种即可,第二种只需要理解:

构造函数方法:
  1. class Student
  2. {
  3.         private String name;
  4.         private int age;
  5.                
  6.         //Person(){} 无参构造函数
  7.         Student(String name, int age){ //有参构造函数.接收主函数的赋值
  8.                 this.name = name; //如果这里没有this,则该值传不出去。  
  9.                 this.age = age;//this指向本类成员变量,将值赋予了对内存里的对象.
  10.         }
  11.         public void show(){
  12.                 System.out.println(name+"..."+age);
  13.         }
  14. }   

  15. class Demo{
  16.          public static void main(String[] args){  
  17.         Student s = new Student("张三",22);//给构造函数传值
  18.         s.show();
  19.          }
  20. }
复制代码
封装get set方法:
  1. class Person  {  
  2.     private String name;  //定义成员变量name  
  3.     private int age; //定义成员变量age  
  4.     //赋值函数,标准写法(未完美) 完美的写法是用构造函数初始化,this关键字  
  5.     public void setName(String n){ //注意前面的修饰符为void,括号里为要获取的参数类型和参数  
  6.         name = n;  
  7.     }public void setAge(int a){ //获取age值,为int类型  
  8.       age = a;  
  9.     }  
  10.     //取值函数,标准写法(未完美)  
  11.     public String getName(){ //函数类型为类类型  
  12.         return name;}  
  13.     public int getAge(){ //取出name值,直接写空括号,返回函数  
  14.         return age;}   
  15.   
  16.     void speak(){//输出函数  
  17.          System.out.println(name+".."+age+"...");  
  18.     }  
  19.    
  20. }  
  21. class Demo1{  
  22.         public static void main(String[] args) {  
  23.             Person p1 = new Person(); //定义一个对象名为p1  
  24.                 p1.setAge(22); //用p1给函数传值22
  25.                                 p1.setName("zhangsan");//传名字
  26.                         p1.speak();//打印
  27.         }  
  28. }  
复制代码

点评

thanks very much~~  发表于 2013-3-31 00:03

评分

参与人数 1技术分 +2 收起 理由
田磊阳 + 2

查看全部评分

回复 使用道具 举报

public class StudentDome {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub

        }

}

class Student{
        private int age;
        private String name;
       
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        //带参的构造方法
        public Student(int age, String name) {
                super();
                this.age = age;
                this.name = name;
        }
        //无参的构造方法
        public Student() {
                super();
        }
       
}

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
  1. A


  2. public class Demo {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.        
  8.                 Student p = new Student("张三",20 );        
  9.               p.method();
  10.           
  11.         }

  12. }

  13. B


  14. public class Student {
  15.         private static String name;
  16.         private static int age;
  17.         public Student(String name, int age) {
  18.        
  19.                 this.name=name;
  20.                 this.age=age;
  21.         }
  22.         public String getName() {
  23.                 return name;
  24.         }
  25.         public int getAge() {
  26.                 return age;
  27.         }
  28.         public static void method(){
  29.                 System.out.println("method方法输出的姓名:"+name+"\t"+"年龄:"+age);
  30.         }

  31.        
  32.        
  33. }       
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
LINUS 中级黑马 2013-3-30 23:32:28
10#
真心谢谢你们了~{:soso_e160:}
回复 使用道具 举报
  1. class Student
  2. {
  3.         String name;
  4.         int age;
  5.         Student()//无参数构造函数,
  6.         {}
  7.         Student(String name,int age)//有参数构造函数
  8.         {
  9.                 this.name=name;//设置对象的名字
  10.                 this.age=age;//设置对象的年龄
  11.         }
  12. }
  13. class  StudentDemo
  14. {
  15.         public static void main(String[] args)
  16.         {
  17.                 Student stu=new Student("zxp",20);
  18.                 System.out.println("创建学生对象的姓名:"+stu.name+",他的年龄:"+stu.age);
  19.         }
  20. }
复制代码
首先,构造函数是一个类默认就有的,
什么是构造函数,就是这个函数没有返回值类型,他的函数名与本类相同,而且只要类加载,他就加载,
如果我们写的类中不明确的写出构造函数,那么程序就默认有一个无参数的构造函数,,但是我们要是明确的写出来,
那么,在创建对象时,就根据你创建对象时给出的参数来选择调用哪个构造函数,比如说,上面的例子,
我创建stu对象时,我传入了String类型的zxp,和int型的20。所以,程序加载时,就会调用有参数的构造函数,无参数的构造函数就不会被调用。
有参数构造函数中的this就是指你在主函数中创建的对象,
至于你说的set,get方法,如果你把name有static来修饰,那么这个属性就变成静态的,静态的属性和函数只能在本类中使用,主函数属于另一个类,就不能直接用对象.name来使用,就必须在Student中写一个函数,让他来调用该静态属性,而该方法不是静态的,就可以在主函数中调用了,从而访问到静态的name属性。
打个比方来说,就是你不能出教室,但是在办公室的老师让你交作业,那么你的班级中就必须得有一个课代表,他可以帮你传达你的作业,
那么,你就相当于被静态了,而跑腿的课代表就是一个函数,老师就是在另一个类中的主函数。

点评

谢谢   发表于 2013-3-31 00:03

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

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