关于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…
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());
}
}
构造方法在初始化对象上比较方便。