类的成员之三:构造器(构造方法)
构造器(construct)
构造器的特征
- 它具有与类相同的名称
- 它不声明返回值类型。(与声明为void不同)
- 不能被static、final、synchronized、abstract、native修饰,不能有 return语句返回值
构造器的作用:
- 创建对象;
- 给对象进行初始化
- 如:Order o = new Order(); Person p = new Person(“Peter”,15);
- 如同我们规定每个“人”一出生就必须先洗澡,我们就可以在“人”的 构造器中加入完成“洗澡”的程序代码,于是每个“人”一出生就会自 动完成“洗澡”,程序就不必再在每个人刚出生时一个一个地告诉他们 要“洗澡”了。
说明(重点复习)
- 如果没有显示的定义类的构造器的话,则系统默认提供一个空参的构造器
- 定义构造器的格式:权限修饰符 类名(形参列表){}
- 一个类种定义的多个构造器,彼此构成重载
- 一旦我们显示的定义了类的构造器之后,系统不再提供默认的空参构造器
- 构造器的权限默认和类相同
根据参数不同,构造器可以分为如下两类:
- 隐式无参构造器(系统默认提供)
- 显式定义一个或多个构造器(无参、有参)
注 意:
- Java语言中,每个类都至少有一个构造器
- 默认构造器的修饰符与所属类的修饰符一致
- 一旦显式定义了构造器,则系统不再提供默认构造器
- 一个类可以创建多个重载的构造器
- 父类的构造器不可被子类继承
代码举例
package GouZaoQi;
public class A {
public static void main(String[] args) {
//创建类的对象:new +构造器
Person p1 = new Person();
p1.eat();
Person p2=new Person("tom");
System.out.println(p2.name);//运行结果:tom
}
}
class Person{
//属性
String name;
int age;
//构造器
public Person(){
System.out.println("构造器");
}
//构造器(作用:给对象初始化)
public Person(String a){
name = a;//相当于new对象的时候就可以给name赋值
}
//方法
public void eat(){
System.out.println("人吃饭");
}
}
练习题
练习题1:
题目:
- 在前面定义的Person类中添加构造器,利用构造器设置所有人的age属 性初始值都为18。
- 修改上题中类和构造器,增加name属性,使得每次创建Person对象的同 时初始化对象的age属性值和name属性值。
代码:
package GouZaoQi;
//1.在前面定义的Person类中添加构造器,利用构造器设置所有人的age属性初始值都为18。
//2.修改上题中类和构造器,增加name属性,使得每次创建Person对象的同时初始化对象的age属性值和name属性值。
public class LXT {
public static void main(String[] args) {
Person2 p1 = new Person2("tom",9);
System.out.println("name="+p1.getName()+",age="+p1.getAge());//运行结果:name=tom,age=9
}
}
class Person2{
private int age;
private String name;
public Person2(){
age =18;
}
public Person2(String n,int a){
name=n;
age=a;
}
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
练习题2:
题目:
编写两个类,TriAngle和TriAngleTest,其中TriAngle类中声明私有的底边长base和高height,同时声明公共方法访问私有变量。此外,提供类必要的构造器。另一个类中使用这些公共方法,计算三角形的面积。
代码:
TriAngle
package GouZaoQi;
//编写两个类,TriAngle和TriAngleTest,其中TriAngle类中声明私有的底
//边长base和高height,同时声明公共方法访问私有变量。此外,提供类
//必要的构造器。另一个类中使用这些公共方法,计算三角形的面积。
public class TriAngle {
//属性
private double base;
private double height;
//构造器
public TriAngle(double b,double h){
base=b;
height=h;
}
//方法
public double getBase(){
return base;
}
public double getHeight(){
return height;
}
}
TriAngleTest
package GouZaoQi;
//编写两个类,TriAngle和TriAngleTest,其中TriAngle类中声明私有的底
//边长base和高height,同时声明公共方法访问私有变量。此外,提供类
//必要的构造器。另一个类中使用这些公共方法,计算三角形的面积。
public class TriAngleTest {
public static void main(String[] args) {
TriAngle t1 = new TriAngle(4, 5);
System.out.println("三角形面积为:"+t1.getBase()*t1.getHeight()/2);
}
}