Java中类的构造方法

constructor;构造函数。

在创建对象的时候,对象成员可以由构造函数方法进行初始化。

new对象时,都是用构造方法进行实例化的;
例如;Test test = new Test("a");
 //Test("a");其中这个就是构造函数,“a”为构造方法的形参;
构造方法的方法名必须与类名一样。
构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
构造方法不能作用是完成对象的初始化工作,他能够把定义对象时的参数传递给对象的域。
构造方法不能由编程人员调用,而要系统调用。
构造方法可以重载,以参数的个数,类型,或排序顺序区分。

具体用法,代码实现。

1;单个构造函数方法;’
这里写图片描述
这里写图片描述
这里写图片描述

2;多个构造函数方法
(例子为;带参数与不带参数)
这里写图片描述

这里写图片描述

3;关于继承类的构造方法的调用;
先看事例;
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
我第一次看到结果的时候好惊讶的,怎么都调用了哈。看了知识点才知道。
在Subtine的主方法中只调用子类构造方法,实例化子类对象并且在子类构造方法中,没有调用父类的构造方法的任何语句。但是在实例化对象时,它相应的调用了父类构造方法,在结果中还可以看到调用构造方法的顺序,首先是顶级,再继续往下直达本身类。也就是说实例化子类的时候,要首先实例化父类对象,然后在实例化子类对象,所以在子类构造方法调用父类构造方法前,父类已经实例化了。
拓展一下。

package text_4_1;

public class Parent {
    Parent(int a){//就是将无参数构造方法改成有参数的。
        System.out.println("调用父类Parent构造方法" + a);
    }
}

package text_4_1;

public class Subparent extends Parent{
    Subparent(){
        System.out.println("调用子类Subparent的构造方法");
    }
}

package text_4_1;

public class Subtine extends Subparent{
    Subtine(){
        System.out.println("调用子类Subtine构造方法");
    }
}


package text_4_1;

public class Main {
    public static void main(String[] args){
        Subtine subtine = new Subtine();
    }
}

这样的代码将会报错;//就是将父类Parent类无参数构造方法改成有参数的。

Implicit super constructor Parent() is undefined. Must explicitly invoke another constructor
//隐式的超级构造函数()是未定义的。必须显式地调用另一个构造函数 

意思就是在子类调用构造函数时,必须先调用父类构造函数,因为无参数的构造函数,编译器会自动调用,也就是第一种情况不会报错。但是有参数的,就必须要利用Super的方法来调用。如果不进行调用那么将会报错。

将Subparent类改成。
package text_4_1;

public class Subparent extends Parent{
    Subparent(){
        super(5);//调用了其父类就不会报错了。
        System.out.println("调用子类Subparent的构造方法");
    }
}
//备注一下,调用父类构造方法就是;super();//就ok了。

还补充一点,关于构造方法的可扩展性;
查看过源码的应该都发现过jdk的编码人员会在一个类中建立多个构造方法;然而他的作用就是提高可扩展性;
这里写图片描述
这么多构造方法,他们之间并且还有联系;通过this()来调用自己类的其他构造方法,来减少代码的复制,增大程序的可读性;
这里写图片描述
至于怎么来进行封装;举个例子;
这里写图片描述
这里写图片描述
构造方法的可扩展性就表示在这里;
可以多多个构造方法;根据不同的参数决定调用哪个;带来很大的可扩展性
刚试了一下notepad++;然而直接爆出中文乱码,搞了好久才搞清楚;
这里写图片描述

原因是;国标码和ANSI之间的不兼容;
这里写图片描述

因为刚学,有什么不足的后期补上。
望路过的大神,指点一二。

Java编程中,构造方法是一种特殊的成员法,其名称必须与名完全相同,并且没有返回型。当你创建一个的实例时,构造方法会被自动调用,用于初始化对象的状态。例如,对于一个名为`Person`的,其构造方法可以这样声明: 参考资源链接:[达内Java1609班首次月考:Java基础与构造方法](https://wenku.csdn.net/doc/8397o5t9p5) ```java public class Person { private String name; private int age; // 无参构造方法 public Person() { // 初始化代码 } // 带参数的构造方法 public Person(String name, int age) { this.name = name; this.age = age; } } ``` 在实现`Runnable`和`Clonable`接口时,需要注意接口的定义和实现式。`Runnable`接口用于实现多线程,而`Clonable`接口用于创建对象的副本。例如,如果你想让`Person`支持多线程,可以这样实现`Runnable`接口: ```java public class Person implements Runnable { // 成员和构造方法同上 @Override public void run() { // 实现线程任务的代码 } } ``` 若要实现`Clonable`接口,需要在中重写`Object`中的`clone`法。这样可以使得`Person`的对象可以被克隆: ```java public class Person implements Clonable { // 成员和构造方法同上 @Override public Person clone() throws CloneNotSupportedException { return (Person) super.clone(); } } ``` 在上述代码中,`clone`法必须抛出`CloneNotSupportedException`异常。克隆操作会创建一个与原始对象具有相同字段值的新对象,但这些字段是浅复制。如果字段是引用型,那么复制的是引用,而不是引用的对象本身。 了解这些概念对于掌握Java面向对象编程至关重要,特别是在设计复杂系统时,构造方法和接口的使用能够提高代码的可读性和可维护性。有关Java数组声明、构造、接口实现以及标识符规范等更多详细内容,可以参考《达内Java1609班首次月考:Java基础与构造方法》,这本资料提供了全面的知识点解析和实例,能够帮助你打好Java编程的基础。 参考资源链接:[达内Java1609班首次月考:Java基础与构造方法](https://wenku.csdn.net/doc/8397o5t9p5)
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值