关于Java类中的构造方法

1、构造方法又被称为构造函数/构造器/Constructor

2、构造方法语法结构:

[修饰符列表] 构造方法名 (形式参数列表) {

        构造方法体;

}

3、回顾一下普通方法的语法结构:

[修饰符列表] 返回值类型 方法名 (形式参数列表) {

        方法体;

}

4、对于构造方法来说,“返回值类型”不需要指定,并且也不能写void。只要写上void,这个方法就成为普通方法了。

5、对于构造方法来说,构造方法的方法名必须和类名保持一致

6、构造方法的作用:

        - 构造方法存在的意义是,通过构造方法的调用,可以创建对象。

        -创建对象的同时,初始化实例变量的内存空间。【给实例变量赋值】

7、构造方法如何调用。

        - 普通方法调用:方法修饰符中有static的时候:类名.方法名(实参列表);

                                    方法修饰符中没有static的时候:引用.方法名(实参列表);

        - 构造方法调用 new 构造方法名 (实参列表);

8、构造方法调用结束之后,有返回值吗?

        每一个构造方法实际上执行结束后都有返回值,但是这个" return 值 ;"这样的语句不需要写。并且返回值类型是构造方法所在类的类型。由于构造方法的返回值类型就是类本身,所以返回值类型不需要编写。

public class User {

	//构造函数
	public User() {
		System.out.println("User's Default Constructor Invoke !");
	}
	
}
public class ConstructorTest01 {

	public static void main(String[] args) {
		
		User u1 = new User();    //User's Default Constructor Invoke !
		// User u2 = new User(10);
		
	}

}

上述代码可以运行

 (eclipse中单行注释 ctrl + /,多行注释 ctrl + shift + /,java特殊注释 alt + shift + j)

9、当一个类中没有定义任何构造方法的话,系统默认给该类提供一个无参数的构造方法,这个构造方法被称为缺省构造器。

10、当一个类显示的将构造方法定义出来了,那么系统则不再默认为这个类提供缺省构造器。建议开发中手动的为当前类提供无参数构造方法。因为无参数构造方法太常用了。

public class User {

	//构造函数
	public User() {
		System.out.println("User's Default Constructor Invoke !");
	}

    public User(int i){
        System.out.println("带有Int类型参数的构造器");
    }
	
}

11、构造方法支持重载机制。在一个类中编写多个构造方法,这多个构造方法显然已构成方法重载机制。


进一步理解

//账户类
public class Account {
	//账号
	private String actno;
	
	//余额
	private double balance;

	//无参数构造函数
	/**
	 * 初始化实例变量的内存空间,这些是看不到的
	 * acton = null;
	 * balance = 0.0;
	 */
	public Account () {
	
	}

    //setter and getter省略
	
}

        成员变量之实例变量,属于对象级别的变量,这种变量必须现有对象才能有实例变量。

        实例变量没有手动赋值的时候,系统赋默认值,这个系统赋默认值不是在类加载的时候,因为类加载的时候只加载了代码片段,还没来得及创建对象。所以此时实例变量并没有初始化。

        实际上,实例变量的内存空间是在构造方法执行过程当中完成开辟的。完成初始化。系统在默认赋值的时候,也是在构造方法执行过程当中完成的。

eclipse自动生成构造方法,空白处鼠标右键 - - > Source  - - > Generate Constructor using Fields…

java创建构造器快捷键 java构造器和构造方法_构造方法

 

java创建构造器快捷键 java构造器和构造方法_java创建构造器快捷键_02

public class Customer {
	private int num;
	private String name;
	private String birth;
	
	//无参数
	public Customer() {
		super();
	}

    //三个参数全使用
	public Customer(int num, String name, String birth) {
		super();
		this.num = num;
		this.name = name;
		this.birth = birth;
	}

}

 测试:

public class ConstructorTest03 {

	public static void main(String[] args) {
		
		Customer c1 = new Customer();
		System.out.println(c1.getNum());                                                                     
       	System.out.println(c1.getName());                                                              
    	System.out.println(c1.getBirth()); 	
    	
        //赋值
		Customer c2 = new Customer(1111,"张三","20020813" );
		System.out.println(c2.getNum());                                                                     
       	System.out.println(c2.getName());                                                              
    	System.out.println(c2.getBirth());  
	}	
}

构造方法在初始化对象上比较方便。