Java构造函数

本文详细介绍了Java构造函数的定义、作用、创建规则、类型及其与普通函数的区别。构造函数在对象创建时自动调用,用于初始化对象的状态。Java构造函数分为默认构造函数和参数化构造函数,可以通过构造函数重载提供不同初始化方式。此外,文章还讨论了构造函数与抽象类、接口的关系,并给出了相关编程示例和练习题。
摘要由CSDN通过智能技术生成

Java构造函数

1、Java构造方法定义

Java中的构造方法是一种特殊的方法,用于初始化对象。Java构造函数在对象创建时被调用。它构造值,即提供对象的数据。与函数名相同,无返回值。

2、作用

一般用来初始化成员属性和方法的,即new对象产生后,就调用了对象的属性和方法。

3、创建Java构造函数的规则

创建函数基本上定义了两个规则。分别如下:

  • 1、构造函数必须与其类名称相同
  • 2、构造函数必须没有显式返回类型

4、构造函数与普通函数的区别

  • 1、构造函数式对象一建立就运行,给对象初始化,就包括属性,执行方法中的语句一般函数是对象调用才执行,用“.方法名“的方式,给对象添加功能
  • 2、一个对象建立,构造函数值运行一次一般函数就可以被该对象调用多次
/**
* 构造函数
*/
public class Person {

    String name; //姓名
    int age; //年龄

    // 一个无参数的构造函数
    Person(){

    }

    Person(String name,int age){
        this.name = name;
        this.age = age;
    }

    public void setName(String name){
        this.name = name;
    }

    public static void main(String[] args) {
        //调用的有参构造函数
        Person p = new Person("张三",14);
        p.setName("王五");
        System.out.println("姓名:" + p.name + "  年龄:" + p.age);

        Person person = new Person();
        person.name = "李四";
        person.age = 15;
        System.out.println(person.name + "  " + person.age);
    }
}

5、Java构造函数类型

有两种类型的构造函数

  • 默认构造函数(无参数构造函数)
  • 参数化构造函数

1、Java默认构造函数
没有参数的构造函数称为默认构造函数。默认构造函数的语句如下:

<class_name>(){}

默认构造函数的示例:
在这个例子中,在Bike类中创建了无参数(no-arg)构造函数,它将在对象创建时被调用。

class Bike1{
 Bike1(){
    System.out.println("This is a GouZaoHanShu");
 }
 public static void main(String[] args) {
    Bike1 bike  = new Bike1();     
 }
}

默认构造函数的目的是为对象提供默认值,如0,null等。
显示默认值的默认构造函数示例

       class Student3 {
           int id;
           String name;
           void display(){
               System.out.println(id + " " + name);
           }
       }

在上边代码中我们并没有为其提供构造函数,但是我们在输出是会发现其是有值的,这就是在上边的类中,代码中并没创建任何构造函数,但编译器自动提供了一个默认构造函数。默认构造函数分别为字段:id和name分别提供了0和null

2.Java参数化构造函数

参数化构造函数用于为不同对象提供不同初始化的值。

示例:

在构造函数中我们可以添加任意多少的参数

   int id;
   String name;

   GouZaoHanShu2(int id,String name){
       this.id = id;
       this.name = name;
   }

   void display(){
       System.out.println(id + " " + name);
   }

   public static void main(String[] args) {
       GouZaoHanShu2 g1 = new GouZaoHanShu2(111,"zhangsan");
       GouZaoHanShu2 g2 = new GouZaoHanShu2(222,"lisi");

       g1.display();
       g2.display();
   }

3.Java构造函数重载

构造方法重载是Java中的一种技术,一个类可以有任何数量的参数列表不同的构造函数。编译器通过构造函数参数列表中的参数数量以及其类型来区分这些构造函数。

特点抽象类接口
构造方法
普通成员变量
普通方法可以有非抽象的必须是抽象的
抽象方法的访问类型public、protected和默认只能是public的,默认public abstract
静态方法可以有
静态成员变量有 public static final的
其他类只能继承一个抽象类可以实现多个接口
应用场景模块之间通信契约代码重用

6、关于Java构造函数题目

1、下列有关Java构造函数叙述正确的是()

  • A、构造器的返回值为void类型
  • B、如果一个源文件中有多个类,那么构造器必须与公共类同名
  • C、构造器可以有0个,1个或一个以上的参数
  • D、每个类可以有一个以上的构造器

答案:CD
1、构造器没有返回值

    // 一个无参数的构造函数
    Person(){

    }

    Person(String name,int age){
        this.name = name;
        this.age = age;
    }

2、B中有多个类时构造函数不一定与公共类同名,因为每个类都可以有构造函数,函数类同所属类。
3、C构造器中可以有任意个参数
4、D每个类都有一个默认构造函数。

2、下面哪个关键字可以用于Java的构造方法上?

  • A、final
  • B、static
  • C、synchronized
  • D、native
  • E、None of these

构造方法不能被子类继承,所以final修饰没有意义。构造方法用于创建一个新的对象,不能作为类的静态方法,所以用static修饰没有意义。此外,Java语言不支持native或synchronized的构造方法。

### Java 构造函数详解 #### 定义与作用 构造函数是在创建对象时自动调用的方法,主要用于初始化新创建的对象。通过构造函数可以设置对象的状态并执行必要的初始化操作[^1]。 ```java public class Demo3 { public Demo3(){ System.out.println("我是构造函数"); } } ``` 这段代码展示了最简单的无参构造函数定义方式。每当`new Demo3()`被执行时,“我是构造函数”的消息就会打印出来[^2]。 #### 类型区分 存在两种主要类型的构造函数:无参数的构造函数(也称为默认构造器),以及带有参数的构造函数(即有参构造)。后者允许传入特定值来定制化实例化的对象属性[^4]。 ```java Demo3 demo3 = new Demo3(); Demo3 demo4 = new Demo3(2); ``` 上述例子中,第一个语句触发了无参构造函数;而第二个则激活了一个接受整数作为输入参数的版本,并将该数值传递给了构造函数内部逻辑处理。 #### 特殊规则 值得注意的是,虽然可以在同一个类里定义多个不同签名形式下的构造函数实现所谓的“重载”,但是它们之间不允许相互覆盖或继承自其他类中的同名成员——也就是说,构造函数不支持传统意义上的多态特性[^3]。 此外,当一个子类需要显式指定其父级构造器的行为模式时,可以通过使用 `super(...)` 来完成这一目标。如果未明确指出,则会隐含地尝试调用超类里的无参构造方法[^5]。 #### 使用场景举例 下面的例子进一步说明如何利用带参数的构造函数来进行更复杂的初始化工作: ```java class Boy { String name; int age; String gender; // 无参构造 Boy() { System.out.println("无参构造"); } // 带三个参数的构造 Boy(String n, int a, String g) { name = n; age = a; gender = g; System.out.println("有参构造"); } void run() { System.out.println("跑..."); } } // 测试部分 Boy b = new Boy(); // 调用了无参构造 Boy b2 = new Boy("Jack", 10, "男"); // 调用了三参构造 ``` 在此案例中,两个不同的构造函数分别负责不同类型的数据填充任务,从而使得程序能够灵活应对各种情况下的需求。 #### 高级技巧:链式调用 有时为了简化代码结构或是遵循某些设计原则,可能会希望在一个构造过程中多次调用其他的构造函数。这可通过内置的关键字`this(...)`达成目的,它表示当前正在构建的对象本身,并且只能放在另一个构造体的第一条指令位置上。 ```java Person(String name) { this.name = name; } Person(String name, int age) { this(name); // 这里调用了单参构造 this.age = age; } ``` 这种做法不仅提高了可读性和维护效率,还减少了重复劳动的可能性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值