一. 普通函数与构造函数的区别:
- 返回值类型的区别:
1.构造函数是没有返回值类型的。
2.普通函数是有返回值类型的。 - 函数名的区别:
1.构造函数的函数名要与类名一致。
2. 普通函数的函数名只要符合标识符命名规则即可。 - 调用方式的区别:
1. 构造函数是在创建对象的时候JVM调用的。
2. 普通函数是由我们使用对象调用的,一个对象可以多次调用普通的函数。 - 作用上的区别:
1. 构造函数的作用用于初始化一个对象。
2. 普通函数是用于描述一类事物的公共行为的。
二. 构造函数要注意的细节:
- 构造函数是没有返回值类型的。
- 构造函数的函数名必须要与类名一致。
- 构造函数并不是由我们手动调用的,而是在常见对应的对象时,JVM就会主动调用对应的构造函数。
- 如果一个类没有显式的械上一个构造方法时,那么java编译器会为该类添加一个无参的构造函数。
- 如果一个类已经显式的写上一个构造方法时,那么java编译器则不会再为该类添加一个无参的构造方法。
疑问:创建对象时,jvm就会调用到对应的构造方法,那么我们以前没有学构造方法,那么以前创建对象时,jvm是否 也会调用构造方法呢?如果有?构造方法从何而来呢?
会调用, java编译器在编译的 时候给加上去的。
jdk提供了一个java开发工具(javap.exe)给我们进行反编译的。
javap 反编译工具的使用格式:
javap -c -l -private 类名
疑问: java编译器添加 的无参构造方法的权限修饰符是 什么?
与类的权限修饰是一致的。
//婴儿类
class Baby{
int id; //身份证
String name; //名字
//构造函数
public Baby(int i , String n){
id = i;
name = n;
System.out.println("baby的属性初始化完毕!!");
}
//无参 的构造函数
public Baby(){
System.out.println("无参的构造函数被调用了..");
}
//哭
public void cry(){
System.out.println(name+"哇哇哭...");
}
}
class Demo2
{
public static void main(String[] args)
{
//创建一个baby对象
Baby b1 = new Baby(110,"狗娃"); //婴儿诞生 白户
System.out.println("编号:"+ b1.id +" 姓名:"+ b1.name);
b1.cry();
b1.cry();
/*
//黑户
Baby b2 = new Baby();
new Baby();
b2.id = 112;
b2.name = "狗剩";
System.out.println("编号:"+ b2.id +" 姓名:"+ b2.name);
*/
}
}
三.构造代码块
构造代码块的作用:给对象进行统一的初始化。
构造函数的作用:给对应的对象进行初始化。
构造代码块的格式:
{
构造代码块
}
注意:构造代码块的大括号必须位于成员位置上。在创建对象时执行。
注意事项:
- java编译器编译一个java源文件的时候,会把成员变量的声明语句提前至一个类的最前端。
- 成员变量的初始化工作其实都在构造函数中执行的。
- 一旦经过java编译器编译后,那么构造代码块的代码块就会被移动到构造函数中执行,构造函数中的代码是最后执行的。
- 成员变量的显示初始化与构造代码块的代码平级,按照当前代码的顺序依次执行。
代码块的类别
- 构造代码块。
- 局部代码块:大括号位于方法之内(用于缩短局部变量的生命周期,节省一点点内存,很少使用了已经)
- 静态代码块。