构造函数的作用: 给对应的对象进行初始化。
构造函数的格式:
构造函数的格式:
修饰符 函数名(形式参数列表){
初始化的语句;
}
构造函数要注意的细节:
1. 构造函数是没有返回值类型的。 2. 构造函数的函数名必须 与类名一致。 3. 构造函数并不是由我们手动调用的, 构造函数是在创建对应对象的时候由jvm主动调用的(每创建一个对象就会调用一次构造函数)。 4. 如果一个类没有显式的添加一个构造函数,那么java编译器会为该类添加一个无参的构造函数。 5. 如果一个类已经显式的添加一个构造函数,那么java编译器则不会再为该类添加一个无参的构造函数。 6. 构造函数是可以以函数重载的形式存在多个的。
疑问1 :我们现在知道创建对象的时候,jvm需要调用到对应的构造方法,那么以前我们没有学构造方法,那么
jvm还会调用到构造方法吗?而且构造方法存在吗?
存在构造方法的, 但是不是java虚拟机添加的,是java编译器添加的。
疑问2:java编译器添加的无参构造函数的修饰符是什么?
无参的构造函数的权限修饰符是与类名一致的。
需求: 使用一个java类描述一个婴儿。
问题: 在现实生活中有两种婴儿,一出生就有姓名与身份证编号(白户),
一种出生之后才有身份证编号与姓名(黑户)。
//婴儿类 class Baby{ 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) { /* Baby b1 = new Baby(); //黑户 b1.id = 110; b1.name= "狗娃"; System.out.println("身份证:"+ b1.id+" 姓名:"+ b1.name); */ new Baby(); new Baby(); Baby b2 = new Baby(110,"狗剩"); //白户 System.out.println("身份证:"+ b2.id+" 姓名:"+ b2.name); } }
需求: 使用java类描述一个员工,员工具备的公共属性: id、 name、 age. 公共行为:上班
要求:一旦创建一个员工对象,那么该员工对象要马上具备相应的属性值。
class Emp{ //事物的公共的属性 int id; String name; int age; //构造函数 public Emp(int i , String n ,int a){ id =i; name = n; age = a; } //上班 public void work(){ System.out.println(name+" 好好上班!!"); } } class Demo3 { public static void main(String[] args) { Emp e = new Emp(110,"狗娃",18); System.out.println("编号: "+ e.id+" 姓名:"+ e.name+" 年龄:"+ e.age); } }
问题:重复代码。
构造函数的作用:给对应的对象进行初始化。
构造代码块:给所有的对象进行统一的初始化。
构造代码块格式:
构造代码块格式:
{
初始化语句;
}
代码块的类型:
构造代码块: 代码块位于成员位置上。
局部代码块 :代码块位于方法之内。
局部代码块的作用: 缩短局部变量的生命周期。
静态代码块:
//婴儿类 class Baby{ int id; //成员变量 String name; //构造代码块 { //System.out.println("构造代码块被调用了....."); cry(); } //无参的构造函数 public Baby(){ } //带参构造函数 public Baby(int i,String n){ id = i; name = n; } public void cry(){ System.out.println("哇哇哇.."); } } class Demo4 { public static void main(String[] args) { Baby b1 = new Baby(110,"狗娃"); /* Baby b1 = new Baby(); //黑户 Baby b2 = new Baby(110,"狗娃"); //白户 //System.out.println("Hello World!"); */ } }