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);
    }
}
目录
相关文章
|
6月前
|
Java
java构造方法,构造代码块,静态代码块的执行顺序
本文介绍了Java中构造方法、构造代码块和静态代码块的执行顺序。静态代码块用`static`声明,在JVM加载类时执行一次;构造代码块在每次创建对象时执行,先于构造方法;构造方法用于对象初始化,创建对象时调用。示例代码展示了这三者的输出顺序,并解释了它们的区别和应用场景。
187 1
|
7月前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
132 13
|
10月前
|
JSON Java 程序员
Java|如何用一个统一结构接收成员名称不固定的数据
本文介绍了一种 Java 中如何用一个统一结构接收成员名称不固定的数据的方法。
119 3
|
10月前
|
Java
在Java中定义一个不做事且没有参数的构造方法的作用
Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用super()来调用父类中特定的构造方法,则编译时将发生错误,因为Java程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。
|
10月前
|
Java 程序员 数据库连接
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
本文详细介绍了Java中的初始化块,包括静态初始化块和非静态初始化块的概念、执行顺序和实际应用场景。通过具体示例,帮助读者理解这两种初始化块的区别和使用场景,让面试官对你刮目相看。
118 0
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
|
11月前
|
设计模式 Java 测试技术
Java零基础-构造方法详解
【10月更文挑战第5天】Java零基础教学篇,手把手实践教学!
139 1
|
11月前
|
Java
java构造方法的两种传值调用对实参的影响
java构造方法的两种传值调用对实参的影响
85 0
|
11月前
|
Java
java构造方法时对象初始化,实例化,参数赋值
java构造方法时对象初始化,实例化,参数赋值
291 1
|
11月前
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
144 0
|
Java API
java调用构造方法
java调用构造方法
102 3