1、构造代码块
作用:给对象进行初始化。对象一建立就运行,而且优先于构造函数执行。
和构造函数区别:
构造代码块是给所有对象进行统一初始化,而构造函数时给对应的对象初始化。
构造代码块中定义的是不同对象共性的初始化内容。
class Person
{
private String name;
private int age;
Person()//定义一个构造函数
{
System.out.println("person run");
}
Person(String a)//定义一个构造函数
{
name = a
System.out.println("person run"+name);
}
{
System.out.println("我是构造代码块,我最先执行");
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person();//先
我是构造代码块,
我最先执行,后其他
Person p1 = new Person("xiaoming”);//先
我是构造代码块,
我最先执行,后其他
}
}
2、构造函数
特点:
函数名与类名相同
不用定义返回值类型
不可以写return语句
作用:
给对象进行初始化。(对象一建立就会调用与之对应的构造函数)
注意:
默认构造函数的特点
多个构造函数是以重载的形式存在的
当一个类中没有定义构造函数时,那么系统会默认给该类加入一个控参数的构造函数,类名(){}。当类中定义了构造函数时,系统就不会加入默认构造函数。
构造函数是在对象一建立时运行,给对象初始化。而一般方法是对象调用才执行,是给对象添加对象具备的功能。一个对象建立构造函数只运行一次,而一般方法可以被该对象调用多次。什么时候定义构造函数?当分析事物时,该事物存在具备一些特性或者行为,那么僵这些内容定义在构造函数中。构造函数的参数根据需要而定。
class Person
{
private String name;
private int age;
Person()//定义一个构造函数
{
System.out.println("person run");
}
Person(String a)//定义一个构造函数
{
name = a
System.out.println("person run"+name);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person();
Person p1 = new Person("xiaoming”);
}
}
3、静态代码块
格式:
static
{
静态代码块中的执行语句。
}
特点:随着类的加载而执行,只执行一次。用于给类进行初始化。
class StaticCode
{
static
{
System.out.println("a");
}
}
class StaticCodeDemo
{
static
{
System.out.println("b");
}
public static void main(String[] args)
{
new StaticCode();
new StaticCode();
System.out.println("d");
}
static
{
System.out.println("c");
}
}
结果:b c a d
注意:Person p = new Person("zhangsan",20);
内存执行过程:
因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中。
执行该类中的static代码块,如果有的话,给Person.class类进行初始化
在堆内存中开辟空间,分配内存地址
在对内存中建立对象的特有属性,并进行默认初始化
对属性进行显示初始化(属性有初始值时,将初始值赋给属性)
对对象进行构造代码块初始化
对对象进行对应懂得构造函数的初始化
将内存地址赋给栈内存中的变量
总结:
构造函数给特定对象进行一次初始化
构造代码块给多个对象进行初始化
静态代码块给类进行一次初始化