Java学习day11-类的成员之三:构造器(构造方法)

一、构造器(构造方法)

语法格式:

修饰符 类名(参数列表){
    初始化语句;
}

  构造器的特征:

    1.它具有与类相同的名称

    2.它不声明返回值类型。(与声明为void不同)

    3.不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值

  构造器的作用:1.创建对象;2.给对象进行初始化;如Order o = new Order();  Person p = new Person(孙尚香, 15);

实例:创建Animal类的实例:Animal a = new Animal();调用构造器,将legs初始化为4.

public class Animal{
    private int legs;
    public Animal(){legs = 4;}//构造器,并调用构造器将legs初始化为4
(默认的构造方法前面有没有访问的修饰符跟定义的类有关,类是public的,默认的构造方法就是public,默认的类是缺省的默认的构造方法也是缺省的)
public void setLegs(int i){ legs = i; } public int getLegs(){ reyurn legs; } }

  根据参数不同,构造器可以分为如下两类:

    1.隐式无参构造器(系统默认提供)

    2.显示定义一个或多个构造器(无参、有参)

  注意:1.JAVA语言中,每个类都至少有一个构造器

        2.默认构造的修饰符与所属的类的修饰符一致

     3.一旦显示定义了构造器,则系统不再提供默认构造器

     4.一个类可以创造多个重载的构造器

     5.父类的构造器不可被子类继承

实例1:在前面定义的Person类中添加构造器,利用构造器设置所有人的age属性初始值都为18.

package day11;

public class Person1 {
    public Person1(){
        age = 18;
    }
    public int age;
}



package day11;

public class test1 {
        public static void main(String[] args){
    Person1 p1 = new Person1();
    System.out.println(p1.age);
        }
}

运行结果为:18

实例2:修改上题中类和构造器,增加name属性,使得每次创建Person对象的同时初始化对象的age属性值和name属性。

package day11;

public class Person1 {
    public Person1(int a,String n){
        //age = 18;
        age = a;
        name = n;
    }
    public int age;
    public String name;
}



package day11;

public class test1 {
        public static void main(String[] args){
    //Person1 p1 = new Person1();
    //System.out.println(p1.age);
        Person1 p1= new Person1(15,"孙尚香");
        System.out.println(p1.age);
        System.out.println(p1.name);
        }
}

运行结果为:15

      孙尚香

实例3:定义一个“点”(point)类用来表示三维空间中的点(有三个坐标)。要求如下:

    1.可以生成具有特定坐标的点对象。

    2.提供可以设置三个坐标的方法。

package day11;

public class Point {
    public Point (int m,int n,int k){
        x = m;
        y = n;
        z = k;
    }
    int x;
    int y;
    int z;
    
    public void setPoint(int m,int n,int k){
        x = m;
        y = n;
        z = k;
    }
    
}



public class test1 {
        public static void main(String[] args){
        Point po = new Point(1, 2, 3);//生成特定坐标点对象
        po.setPoint(6, 7, 8);//设置m,n,k为6,7,8
        } 
}

二、构造器重载

  构造器一般用来创建对象的同时初始化对象。如

class Person{
    String name;
    int age;
    public Person(String n, int a){
        name = n;
        age = a;
    }
}

  构造器的重载是得对象的创建更加灵活,方便创建各种不同的对象。构造器重载举例:

public class Person{
    public Person(){ //构造器重载,参数列表必须不同

    }
    public Person(int age){

    }
    public Person(String name){
   
    }
    public Person(int age, String name){
    
    }
}

三、this关键字

  在Java中,this关键字的作用和其词义很接近,主要为:

    1.this关键字在方法内部使用,即它的作用和其词义很接近。

    2.它在构造器内使用,表示该构造器正在初始化的对象。

  this表示当前对象,可以调用类的属性、方法和构造器。当在方法内需要用到调用该方法的对象,就用this。例如:

package day12;

public class Person {
        private String name;
        private int age;
        public Person(String name,int age){
            this.name = name;//当形参与成员变量重名时,如果在方法内部需要使用成员变量,
            this.age = age;//必须添加this来表明该变量是类成员
        }
        
        public void setName(String name){
            this.name = name;//在任意方法内,如果使用当前类的成员变量或成员方法,可以在其前面添加this,增强程序的阅读性
        } 
        
        public void setName01(String name){
            this.setName(name);
        }
        
        public void showInfo(){
            System.out.println("姓名:" + name);
            System.out.println("年龄:" +this.age);
        }
    }    
 

  使用this调用本类的构造器(this可以作为一个类中,构造器相互调用的特殊格式)

package day12;

public class Person1 {
    private String name;
    private int age;
    public Person1(){//无参构造
        System.out.println("新对象实例化");
    }
    public Person1(String name){
        this();//调用本类中的无参构造方法
        this.name = name;
    }
    public Person1(String name, int age){
        this(name);//调用一个有参数的构造方法
        this.age = age;
    }
    public String getInfo(){
        return"姓名:" + name + ",年龄:" + age;
    }
}

  注意:1使用this()必须放在构造器的首行!

     2.使用this调用本类中的其他构造器,保证至少有一个构造器是不用this的。(实际上就是不能出现构造器自己调用自己).

四、JavaBean

  1.JavaBean是一种Java语言写成的可重用组件。

  2.所谓JavaBean是指符合如下标准的Java类:

    >类是公共的

    >有一个无参的公共的构造器

    >有属性值,属性一般是私有的,且有对应的get、set方法

  3.用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。

package day12;
/**
 * 一个完整的JavaBean
 * 公共的类
 * 私有的属性
 * 属性对应的get和set方法 
 **/
public class Person2 {
    private String name;//姓名
    private int sex;//性别0男1女
    private int age;//年龄
    
    public void setName(String name){
        this.name = name;
    }
    
    public String getName(){
        return this.name;
    }
    
    public void setSex(int sex){
        this.sex = sex;
    }
    
    public int getSex(){
        return sex;
    }
    
    public void setAge(int age){
        this.age = age;
    }
    
    public int getAge(){
        return this.age;
    }
}




package day12;
/**
 * JavaBean的用法
 * **/
public class test {
    public static void main(String ages[]){
        Person2 p2 = new Person2();
        
        p2.setName("杜甫");
        p2.setSex(0);
        p2.setAge(20);
        
        System.out.println(p2.getName());
        System.out.println(p2.getSex());
        System.out.println(p2.getAge());
    }
}

打印结果为:杜甫

      0

      20

  小技巧:利用Eclipse自动生成get和set方法

      在写好属性之后,在代码中鼠标右键,找到Source(快捷键Alt+Shift+S)选项,然后选中Generate Getters and Setters...,然后勾选想要生成get与set方法的属性,点击ok完成。

猜你喜欢

转载自www.cnblogs.com/su-peng/p/11908512.html
今日推荐