构造方法的作用:
-
1、创建对象
-
2、创建对象的同时,初始化实例变量的内层空间 (给实例变量赋值)。
成员变量之实例变量,属于对象级别的变量,这种变量必须先有对象才能有实例变量。
实例变量没有手动赋值的时候,系统默认赋值,那么这个系统默认赋值是在什么时候完成的呢?是在类加载的时候吗?
不是,因为类加载的时候只加载了代码片段,还没来得及创建对象。所以此时实例变量并没有初始化。
实际上,实例变量的内存空间是在构造方法执行过程当中完成开辟的。完成初始化的。系统在默认赋值的时候,也是在构造方法执行过程当中完成的赋值。
关于java类中的构造方法:
-
1、构造方法又被称为构造函数/构造器/Construator
-
2、构造方法语法结构:
[修饰符列表] 构造方法名 (形式参数列表){
构造方法体;
} -
3、回顾普通方法的语法结构:
[修饰符列表] 返回的类型 方法名 (形式参数列表){
方法体;
} -
4、对于构造方法来说,“返回值类型”不需要指定,并且也不能写void,
只要写上void,那么这个方法就成为普通方法了。 -
5、对于构造方法来说,构造方法的方法名必须和类名保持一致。
-
6、构造方法的作用?
构造方法存在的意义是,通过构造方法的调用,可以创建对象。 -
7、构造方法应该怎么调用?
普通方法是这样调用的:
方法修饰符中有static的时候:类名.方法名(实参列表)
方法修饰符中没有static的时候:引用.方法名(实参列表)
- new 构造方法名(实参列表) -
8、构造方法调用执行之后,有返回值吗?
每一个构造方法实际上执行结束之后都有返回值,但是这个"retu.rn 值:”这样的语句不需要写。构造方法结束的时候java程序自动返回值。
并且返回值类型是构造方法所在类的类型。由于构造方法的返回值类型就是类本身,所以返回值类型不需要编写。 -
9、当一个类中没有定义任何构造方法的话,系统默认给该类提供一个无參数的构造方法,这个构造方法被称为缺省构造器。
-
10、当一个类显示的将构造方法定义出来了,那么系统则不再默认为这个类提供缺省构造器。建议开发中手动的为当前类抛供无参對构造方法。因为无参数构造方沐太常用了。
-
11、构造方法支持重载机制。在一个类当中编写多个构造方法,这多个构造方法显然已经构成方法重载机制。
“构造器”类(Constructor.class)
public class Constructor {
public static void main(String[] args) {
// 创建User对象
// 调用User类的构造方法完成对象的创建
// 以下程序创建了4给对象,只要构造函数调用就会创建对象,并且一定是在"堆内存"中开辟内层空间
User u1 = new User(); // new User 中的User是构造方法名,因为,调用方法需要加()
User u2 = new User(10);
User u3 = new User("zhangsna");
User u4 = new User(10,"zhangsan");
// 调用本类带static的doSome方法
// 类名.方法名();
Constructor.doSome();
doSome(); // 因为在本类中所以类名可以不写。
// 调用本类不带static的doOther方法
// 引用.方法名();
Constructor t = new Constructor();
t.doOther();
}
// 在本类中定义带static修饰符的方法
public static void doSome(){
System.out.println("do some!");
}
// 在本类中定义不带static修饰符的方法
public void doOther(){
System.out.println("do Other!");
}
}
用户类(User.class)
public class User{
// 这是一个无参数构造方法,不写也存在
// 因为,定义了有参构造函数,系统默认的无参数构造方法就会消失
// 所以,要调用无参构造方法时,一定要把无参数构造方法写上
public User(){
}
// 有参数的构造方法
public User(int i){
System.out.println("带有int类型的构造器");
}
public User(String name){
System.out.println("带有String类型的构造器");
}
public User(int i,String name){
System.out.println("带有int,String类型的构造器");
}
}