目
录
2.实例变量没有手动赋值时,系统就会自动赋默认值!那么是在类加载的时候给这些实例变量赋值的吗?
1
.什么是构造方法?有什么用?
- 定义: 构造方法是一个比较特殊的方法.其 方法名与类名 相同!并且 没有返回值类型!
- 作用: 使用一个类,需要先对类进行实例化,而实例化就是创建该类对象! 通过构造方法就可以完成对象的创建以及实例化变量的初始化. 也就是方构造法可以创建对象并且同时给对象的属性赋值!创建对象时要使用关键字new来调用构造方法,来完成变量的初始化!(补:实例变量没有手动赋值时,系统就会自动赋默认值!)
2
.实例变量没有手动赋值时,系统就会自动赋默认值!那么是在类加载的时候给这些实例变量赋值的吗?
不是 的.实例变量是 在构造方法执行的过程中 完成初始化和完成赋值的!
3
.构造方法的语法结构
[修饰符列表] 构造方法名(形式参数列表){ 构造方法体 }
public class Student {
String name;
int age;
public Student(String name, int age){ //构造方法
this.name = name;
this.age = age;
}
}
相比较一下,普通方法的语法结构:[修饰符列表] 返回值类型 方法名(形式参数列表){ 方法体 }
注意: 构造方法不需要指定返回值类型 ,也不能写void,写上后就表示普通方法了.(当没有返回值类型时,编译器就会判定该方法时构造方法,于是编译器会检测方法名是否和类名一致,如果不一致就会编译报错!)
那么问题来啦!为什么之前创键对象时调用构造方法时没有看到这个构造方法的语法结构出现在代码里呢?
public class Student {
String name;
int age;
public static void main(String[] args) { //程序入口
Student s1 = new Student();
s1.name="小明";
s1.age=20;
}
}
那是因为 当一个类没有提供任何构造方法时,系统就会默认提供一个无参构造方法 !这个构造方法被称为缺省构造器!
public class Student {
public Student(){ } //无参构造方法
}
(注意: 当一个类中手动的提供了构造方法,那么系统将不再提供无参构造方法了!)
4
.如何调用构造方法
使用 关键字new 运算符来调用构造方法. 语法格式:
无参构造方法: new 构造方法名();
有参构造方法: new 构造方法名( 实参 );
(注意: 当无参构造方法和有参构造方法都手动定义时,其 无参构造方法和有参构造方法都可以调用)
public class Student {
String name;
int age;
public Student(){}; //无参构造方法
public Student(String name, int age){ //有参构造方法
this.name = name;
this.age = age;
}
public static void main(String[] args) { //程序入口
Student s1 = new Student(); //调用无参构造方法
Student s2 = new Student(String name,int age); //调用无参构造方法
}
}
以上代码,咱们也可以发现一个问题,那就是在同一个类中构造方法是 可以 方法重载 的!
5
.调用有参构造方法的内存图
6
.总结构造方法的注意点
- 构造方法名和类名相同 !
- 修饰符列表目前写public,不要写成public static!
- 构造方法是支持方法重载的!同一个类中,构造方法可以有多个!
- 构造方法不需要指定返回值类型,也不能写void,写上后就表示普通方法了!
- 当一个类没有提供任何构造方法时,系统就会默认提供一个无参构造方法!
- 当一个类中手动的提供了构造方法,那么系统将不再提供无参构造方法了!
- 当无参构造方法和有参构造方法都手动定义时,其无参构造方法和有参构造方法都可以调用!
(小编也在努力学习更多哟!以后会多多分享哒!)
希望对友友们有所帮助!!!!