Logo

郎哥编程

Java类的构造方法

2018-03-03 1062

前面一节讨论了Java类的方法,了解了Java方法的声明、调用和传入参数的用法。本节主要讨论Java类的构造方法。

一个新对象初始化的最终步骤是通过new关键字去调用对象的构造方法,构造方法需满足如下要求:

(1)方法名必须与类名称完全相匹配;

(2)构造方法不需要返回类型;

(3)构造方法不能被static、final等关键字修饰,且不能有return返回语句。

11.5节讲到了如何创建Java对象,下面的例子创建一个apple对象:

Fruits  apple  =  new  Fruits("80%”,  “60%”,  ”30%”);

使用new关键字创建创建Java对象时,系统首先为要创建的对象分配内存空间,然后调用类的构造方法初始化类成员属性或类成员变量,最后返回对象实例的引用给apple。

构造方法也分为有参和无参,Fruits类的构造方法属于有参构造方法,调用有参构造方法时,需要传入相对应的参数。无参构造方法则无需传入参数。下面分别讨论无参和有参构造方法。

1、无参构造方法

无参构造方法又分为隐式无参构造方法和显式无参构造方法。

隐式无参构造方法

在定义类的时候,如果没有给类定义一个构造方法,Java编译器在编译时会默认提供一个隐式的构造方法,它没有任何参数,并且有一个空的方法体。例如,Person类中隐含一个无参构造方法,在main方法中可以通过new关键字来调用此默认的构造方法,代码如下:

package com.milihua.fruits;
public class Person {
    //声明名称属性,并被初始化为"张三"
    private String name = "张三";
    //声明年龄属性,并被初始化为22
    private int age = 22;
    
    //定义一个方法,public是修饰符,void表示没有返回值
    public void tell() {
     System.out.println("姓名:" + name + ",年龄:" + 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 static void main(String[] args) {
        // TODO Auto-generated method stub
        //创建person对象,调用系统提供的一个隐式无参构造方法
        Person  person = new Person();
        person.tell();
    }
    }

显式无参构造方法

隐式无参构造方法是由系统提供的,无法修改其内容。但有时需要在调用这个构造方法时初始化类成员属性或执行一些操作,要实现这个需求,就需要为它定义一个显式无参构造方法,修改上述代码如下:

package com.milihua.fruits;
public class Person {
    //声明名称属性,并被初始化为"张三"
    private String name;
    //声明年龄属性,并被初始化为22
    private int age;
   
    //定义一个显示构造方法
    public Person()
    {
     this.name = "张三";
     this.age = 22;
    }
   
    //定义一个方法,public是修饰符,void表示没有返回值
    public void tell() {
     System.out.println("姓名:" + name + ",年龄:" + 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 static void main(String[] args) {
        // TODO Auto-generated method stub
        //创建person对象,调用系统提供的一个隐式无参构造方法
        Person  person = new Person();
        person.tell();
    }
   
}

2、显示有参构造方法

构造并初始化对象是构造方法的作用,所以有时需要给这个方法传入一些参数,定义一个显示的有参构造方法。例如:

//定义一个显示有参构造方法
    public Person(String instrName,int innAge)
    {
     this.name = instrName;
     this.age = innAge;
    }

下面为Person类增加有两个参数的显式构造方法,修改后的代码如下:

package com.milihua.fruits;
public class Person {
    //声明名称属性,并被初始化为"张三"
    private String name;
    //声明年龄属性,并被初始化为22
    private int age;
   
    //定义一个显示有参构造方法
    public Person(String instrName,int innAge)
    {
     this.name = instrName;
     this.age = innAge;
    }
   
    //定义一个方法,public是修饰符,void表示没有返回值
    public void tell() {
     System.out.println("姓名:" + name + ",年龄:" + 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 static void main(String[] args) {
        // TODO Auto-generated method stub
        //创建person对象,调用系统提供的一个隐式无参构造方法
        Person  person = new Person("张三",22);
        person.tell();
    }
   
}

■ 知识点拨

构造方法和方法的类似之处在于它们都包含可执行代码,区别在于,只有当Java类实例化时才执行构造方法。构造方法通常包含类属性初始化代码,从严格意义上说,构造方法并不是方法,因为它不会返回任何值。

■ 思考练习

用eclipse新建一个Person项目,实现教材内容中的例子代码。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论