构造函数:
构造函数的作用: 给对应的对象进行初始化。
构造函数的格式:
修饰符 函数名(形式参数列表){
初始化的语句;
}
构造函数要注意的细节:
1. 构造函数是没有返回值类型的。
2. 构造函数的函数名必须 与类名一致。
3. 构造函数并不是由我们手动调用的, 构造函数是在创建对应对象的时候由jvm主动调用的(每创建一个对象就会调用一次构造函数)。
4. 如果一个类没有显式的添加一个构造函数,那么java编译器会为该类添加一个无参的构造函数。
5. 如果一个类已经显式的添加一个构造函数,那么java编译器则不会再为该类添加一个无参的构造函数。
6. 构造函数是可以以函数重载的形式存在多个的。
7. 构造函数可以以函数重载的形式存在多个。
疑问1 :我们现在知道创建对象的时候,jvm需要调用到对应的构造方法,那么以前我们没有学构造方法,那么
jvm还会调用到构造方法吗?而且构造方法存在吗?
存在构造方法的, 但是不是java虚拟机添加的,是java编译器添加的。
疑问2:java编译器添加的无参构造函数的修饰符是什么?
无参的构造函数的权限修饰符是与类名一致的。
如何反编译: 反编译可以使用jdk给我们提供的开发工具---》javap
javap -c -l -private class文件
需求: 使用一个java类描述一个婴儿。
问题: 在现实生活中有两种婴儿,一出生就有姓名与身份证编号(白户),
一种出生之后才有身份证编号与姓名(黑户)。
//人类
class Person{
int id; //身份证编号
String name; // 名字
//无参的构造函数
public Baby(){
System.out.println("无参的构造函数调用了..");
}
//带参构造函数
public Baby(int i , String n){
id = i ;
name = n;
System.out.println("两个参数构造函数调用了..");
}
public void cry(){
System.out.println("哇哇哇呜呜呜….”);
}
}
class Demo2 {
public static void main(String[] args)
{
/*
Person b1 = new Person(); //黑户
b1.id = 110;
b1.name= “张三”;
System.out.println("身份证:"+ b1.id+" 姓名:"+ b1.name);
*/
Person Baby();
Person Baby();
Person b2 = new Person(110,”李四”); //白户
System.out.println("身份证:"+ b2.id+" 姓名:"+ b2.name);
}
}