普通代码块
定义:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”。
执行方式:被调用时执行
执行时间:只有在被调用时才会执行。
执行次数:调用几次就执行几次
构造代码块
定义:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。
作用:给该类所有对象进行初始化。
执行方式:自动执行
执行时间:创建对象时执行,而且优先于构造函数执行。
执行次数:同一个对象只执行一次。
构造函数
作用:给对象进行初始化,调用对应的构造函数。
执行方式:自动执行
执行时间:创建对象时执行。
执行次数:同一个对象只执行一次。
静态代码块
定义:在类中使用static关键字声明的代码块。
作用:对类进行初始化。
执行方式:自动执行
执行时间:在类被加载的时候执行。
执行次数:最多执行二次(一次:创建对象的时候;另一次:第一次访问类中的静态成员和运行该类中主函数的时候)
注意:
1.由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
2.在类被使用时就会被加载到内存,而不是第一次创建类的实例(对象)时被加载。
3.类什么时候被加载/类加载时机:
(1)创建对象的时候,会加载该类及该类的所有父类;
(2) 第一次访问类中的静态成员和运行主函数的时候;
定义:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”。
执行方式:被调用时执行
执行时间:只有在被调用时才会执行。
执行次数:调用几次就执行几次
构造代码块
定义:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。
作用:给该类所有对象进行初始化。
执行方式:自动执行
执行时间:创建对象时执行,而且优先于构造函数执行。
执行次数:同一个对象只执行一次。
构造函数
作用:给对象进行初始化,调用对应的构造函数。
执行方式:自动执行
执行时间:创建对象时执行。
执行次数:同一个对象只执行一次。
静态代码块
定义:在类中使用static关键字声明的代码块。
作用:对类进行初始化。
执行方式:自动执行
执行时间:在类被加载的时候执行。
执行次数:最多执行二次(一次:创建对象的时候;另一次:第一次访问类中的静态成员和运行该类中主函数的时候)
注意:
1.由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
2.在类被使用时就会被加载到内存,而不是第一次创建类的实例(对象)时被加载。
3.类什么时候被加载/类加载时机:
(1)创建对象的时候,会加载该类及该类的所有父类;
(2) 第一次访问类中的静态成员和运行主函数的时候;
(3)class.forName("类名");
4.静态代码块不能存在于任何方法体内。
5.静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
构造函数和代码块的优先级
静态代码块 > main函数代码块 > 构造代码块 > 构造函数
演示代码:
运行结果:
4.静态代码块不能存在于任何方法体内。
5.静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
构造函数和代码块的优先级
静态代码块 > main函数代码块 > 构造代码块 > 构造函数
演示代码:
/**
需求:
1.验证构造函数和代码块的优先级及执行次数。
2.验证优先级:静态代码块 > main函数代码块。
3.验证类被使用时就会被加载到内存,而不一定是第一次创建类的实例(对象)时被加载。
*/
//Person类
class Person{
public String name;
public int age;
//构造代码块的执行次数
private static int num1 = 0;
//构造函数的执行次数
private static int num2 = 0;
//静态代码块的执行次数
private static int num3 = 0;
//构造代码块
{
System.out.println("Person类的构造代码块,第" + (++num1) +"次执行");
}
//构造函数
Person(String name, int age){
System.out.println("Person类的构造函数,第" + (++num2) +"次执行");
}
//静态代码块
static{
System.out.println("Person类的静态代码块,第" + (++num3) +"次执行");
}
//普通代码块
public static void speak(){
System.out.println("Person类的普通代码块");
}
}
//测试类
class Demo{
//静态代码块的执行次数
private static int num = 0;
//静态代码块
static{
System.out.println("测试类Demo的静态代码块,第" + (++num) +"次执行");
}
public static void main(String[] args){
System.out.println("进入main");
//验证类被使用时就会被加载到内存,而不一定是第一次创建类的实例(对象)时被加载。
System.out.println("调用Person类的静态方法");
Person.speak();
System.out.println("创建第一个对象");
Person p = new Person("张三", 20);
System.out.println("创建第二个对象");
Person p1 = new Person("李四", 21);
}
}
运行结果:

本文详细介绍了Java与Android开发中三种类型的代码块:普通代码块、构造代码块与静态代码块的功能、执行方式、执行时间和执行次数,并通过演示代码验证了它们之间的优先级关系。
363

被折叠的 条评论
为什么被折叠?



