java 构造方法英文_Java(14)构造方法

本文详细介绍了Java构造方法的功能、使用方式、默认构造方法、字段初始化、构造方法的重载以及如何在一个构造方法中调用另一个构造方法。通过实例展示了如何在不同情况下初始化对象并避免编译错误。
摘要由CSDN通过智能技术生成

构造方法 (构造器constructor)

功能:初始化实例

1、使用方法

构造方法的名称就是类名,且修饰符跟类一致

构造方法的参数没有限制,在方法内部,可以编写任意语句

和普通方法相比,构造方法没有返回值,也没有void关键字

调用构造方法,必须使用new操作符

public class HelloG {

public static void main(String[] args) {

Person a=new Person("Jimmy",21); //静态方法不能访问非静态内部类

System.out.println(a.name);

System.out.println(a.age);

}

public static class Person{ //这里一定要加static非访问修饰符

private String name;

private int age;

public Person(String name,int age){

this.name=name;

this.age=age;

}

}

}

//=========================将Person类改为外部类==================================

public class HelloG {

public static void main(String[] args) {

Person a = new Person("Jimmy", 21);

System.out.println(a.GetName());

System.out.println(a.GetAge());

}

}

class Person {

private String name;

private int age;

public Person(String name, int age) {

this.name = name;

this.age = age;

}

public String GetName(){

return this.name;

}

public int GetAge(){

return this.age;

}

}

2、默认构造方法

默认构造方法没有参数,也没有执行语句, 如果一个类没有定义构造方法,编译器会自动为我们生成一个默认构造方法。

默认构造方法如下:

public class HelloA {

public HelloA(){}

}

如果我们自定义了一个构造方法,那么,编译器就不再自动创建默认构造方法

public class HelloG {

public static void main(String[] args) {

Person a=new Person(); //会编译错误

System.out.println(a.name);

System.out.println(a.age);

}

}

class Person{

private String name;

private int age;

public Person(String name,int age){

this.name=name;

this.age=age;

}

}

如果既要能使用带参数的构造方法,又想保留不带参数的构造方法,那么只能把两个构造方法都定义出来:

public class HelloG {

public static void main(String[] args) {

Person a=new Person(); //不会编译错误

System.out.println(a.name);

System.out.println(a.age);

}

}

class Person{

private String name;

private int age;

public Person(String name,int age){

this.name=name;

this.age=age;

}

public Person() {

}

}

3、未初始化字段默认值

没有在构造方法中初始化字段时,引用类型的字段默认是null,数值类型的字段用默认值(可回看八大基本类型),int类型默认值是0,布尔类型默认值是false:

public class HelloG {

public static void main(String[] args) {

Person a=new Person(); //会编译错误

System.out.println(a.GetName());

System.out.println(a.GetAge());

System.out.println(a.GetSex());

}

}

class Person{ //这里一定要加static非访问修饰符

private String name;

private int age;

private boolean Sex;

public Person() {

}

public String GetName(){

return this.name;

}

public int GetAge(){

return this.age;

}

public boolean GetSex(){

return this.Sex;

}

}

/*结果为:

null

0

false

*/

4、字段初始化顺序

如果创建字段的时候就初始化了,而且构造方法再初始化一遍,所以最终的值由构造方法的代码确定

public class HelloB {

public static void main(String[] args) {

PersonB b=new PersonB(21,"Krystal");

System.out.println(b.GetName());

System.out.println(b.GetAge());

}

}

class PersonB{

private int age=21;

private String name="Jimmy";

public PersonB(int age,String name){

this.age=age;

this.name=name;

}

public int GetAge(){

return this.age;

}

public String GetName(){

return this.name;

}

}

5、多个构造方法(构造器的重载)

构造方法既然是个方法,则表明可以进行重载,编译器通过参数数量、位置和类型自动区分构造方法

public class HelloB {

public static void main(String[] args) {

PersonB b=new PersonB(18);

System.out.println(b.GetName());

System.out.println(b.GetAge());

}

}

class PersonB{

private int age=21;

private String name="Jimmy";

//构造方法1

public PersonB(int age,String name){

this.age=age;

this.name=name;

}

//构造方法2

public PersonB(int age){

this.age=age;

this.name="Jimmy";

}

//构造方法3

public PersonB(){

}

public int GetAge(){

return this.age;

}

public String GetName(){

return this.name;

}

}

/*

输出结果为:

Jimmy

18

*/

6、构造方法调用构造方法

一个构造方法可以调用其他构造方法,这样 做的目的是便于代码复用。调用其他构造方法的语法是this(…):

package test;

public class TestOne {

private String name;

private int sizeA;

public TestOne(String name, int sizeA) {

this.name = name;

this.sizeA = sizeA;

}

public TestOne(String name) {

this(name, 18);

}

public TestOne() {

this("krystal", 18);

}

public String getName(){

return this.name;

}

public int getSizeA(){

return this.sizeA;

}

}

class TestA {

public static void main(String[] args) {

TestOne a=new TestOne();

System.out.println(a.getName()+" "+a.getSizeA());

}

}

//运行结果为:krystal 18

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值