Java中类的成员之三:构造器(构造方法)

简介: Java中类的成员之三:构造器(构造方法)

类的成员之三:构造器(构造方法)


构造器(construct)

构造器的特征
  1. 它具有与类相同的名称
  2. 它不声明返回值类型。(与声明为void不同)
  3. 不能被static、final、synchronized、abstract、native修饰,不能有 return语句返回值
构造器的作用:
  1. 创建对象
  2. 给对象进行初始化
  • 如:Order o = new Order(); Person p = new Person(“Peter”,15);
  • 如同我们规定每个“人”一出生就必须先洗澡,我们就可以在“人”的 构造器中加入完成“洗澡”的程序代码,于是每个“人”一出生就会自 动完成“洗澡”,程序就不必再在每个人刚出生时一个一个地告诉他们 要“洗澡”了。
说明(重点复习)
  1. 如果没有显示的定义类的构造器的话,则系统默认提供一个空参的构造器
  2. 定义构造器的格式:权限修饰符 类名(形参列表){}
  3. 一个类种定义的多个构造器,彼此构成重载
  4. 一旦我们显示的定义了类的构造器之后,系统不再提供默认的空参构造器
  5. 构造器的权限默认和类相同

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

  • 隐式无参构造器(系统默认提供)
  • 显式定义一个或多个构造器(无参、有参)

注 意:

  1. Java语言中,每个类都至少有一个构造器
  2. 默认构造器的修饰符与所属类的修饰符一致
  3. 一旦显式定义了构造器,则系统不再提供默认构造器
  4. 一个类可以创建多个重载的构造器
  5. 父类的构造器不可被子类继承
代码举例
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:

题目:

  1. 在前面定义的Person类中添加构造器,利用构造器设置所有人的age属 性初始值都为18。
  2. 修改上题中类和构造器,增加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);
    }
}
目录
相关文章
|
26天前
|
JSON Java 程序员
Java|如何用一个统一结构接收成员名称不固定的数据
本文介绍了一种 Java 中如何用一个统一结构接收成员名称不固定的数据的方法。
26 3
|
1月前
|
Java 程序员 数据库连接
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
本文详细介绍了Java中的初始化块,包括静态初始化块和非静态初始化块的概念、执行顺序和实际应用场景。通过具体示例,帮助读者理解这两种初始化块的区别和使用场景,让面试官对你刮目相看。
35 0
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
|
1月前
|
Java
在Java中定义一个不做事且没有参数的构造方法的作用
Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用super()来调用父类中特定的构造方法,则编译时将发生错误,因为Java程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。
|
2月前
|
设计模式 Java 测试技术
Java零基础-构造方法详解
【10月更文挑战第5天】Java零基础教学篇,手把手实践教学!
35 1
|
2月前
|
Java
java构造方法时对象初始化,实例化,参数赋值
java构造方法时对象初始化,实例化,参数赋值
82 1
|
3月前
|
Java API
java调用构造方法
java调用构造方法
49 3
|
2月前
|
Java
java构造方法的两种传值调用对实参的影响
java构造方法的两种传值调用对实参的影响
29 0
|
2月前
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
46 0
|
3月前
|
Oracle Java 关系型数据库
【颠覆性升级】JDK 22:超级构造器与区域锁,重塑Java编程的两大基石!
【9月更文挑战第6天】JDK 22的发布标志着Java编程语言在性能和灵活性方面迈出了重要的一步。超级构造器和区域锁这两大基石的引入,不仅简化了代码设计,提高了开发效率,还优化了垃圾收集器的性能,降低了应用延迟。这些改进不仅展示了Oracle在Java生态系统中的持续改进和创新精神,也为广大Java开发者提供了更多的可能性和便利。我们有理由相信,在未来的Java编程中,这些新特性将发挥越来越重要的作用,推动Java技术不断向前发展。
|
4月前
|
Java 调度 开发者
Java 神秘新成员 —— 虚拟线程究竟是什么?它又能解开哪些编程痛点之谜?
【8月更文挑战第23天】Java虚拟线程是一种轻量级执行线程,由Java运行时管理,相较于传统操作系统线程,其创建和管理成本更低。基于用户模式线程概念,Java应用程序无需依赖OS即可实现高度并发。虚拟线程数量可远超传统线程,有效提升多核处理器利用率和并发性能。它解决了传统Java线程模型中创建成本高、调度开销大及I/O阻塞等问题,极大提高了程序的并发性和响应速度。
44 1