static代码块
格式
static{
Java语句
…
}
- 无论处于代码中的什么位置,静态代码块都会优先执行(因为static修饰的代码和代码块在方法区内存空间中进行类加载时便开始执行,而main函数执行发生在类加载之后,所以静态代码块
先于main函数执行
) - 静态代码块的执行顺序:也是自上而下,依次执行。
- static代码块只执行一次
- static关键字属于类,而不是类的实例。
补充
静态的方法(也就是被static修饰的方法)能直接用类名去调用
借助静态代码块我们可以在主函数执行前先加载一部分代码,来提高整体代码的效率
静态(static)代码块的影响是对大环境(类级别)
public class testOne
{
private int ID = 895; //ID为成员属性,执行顺序是:main方法->构造方法->成员属性赋值
static{
System.out.println("ID是"+ID);
}
}
/*
----测试结果----
错误: 无法从静态上下文中引用非静态 变量 ID
System.out.println("ID是"+ID);
*/
public class testTwo
{
//主函数
public static void main(String[] agrs){
System.out.println("运行中");
over();
}
//静态代码块
static{ //静态代码块在main函数前执行
System.out.println("测试开始---1");
}
public static void over(){
System.out.println("测试结束");
}
static{ //多个静态代码块按从上至下顺序执行
System.out.println("测试结束---2");
}
}
/*
-----测试结果------
测试开始---1
测试结束---2
运行中
测试结束
*/
*/
实例代码块
格式
{
java语句
}
//只有中括号,没有名称
1.实例代码块只在构造方法被调用时执行
2.构造方法每执行一次,实例代码块就会被提前执行一次
3.实例代码块先于构造方法执行。
-----补充-----
可以借助实例代码块可以为构造方法的执行做准备或判断构造方法是否执行
实例代码块的影响是对小环境的(方法)
public class testThree
{
//实例代码块
{
System.out.println("构造方法执行"); //构造方法每执行一次,实例代码块就会被提前执行一次
}
//无参构造方法
public testThree(){
System.out.println("创建对象");
}
//有参构造方法
public testThree(int id){
System.out.println("构造方法名需和类名相同");
}
public static void main(String[] agrs){
testThree id1 = new testThree();
testThree id2 = new testThree(2);
}
}
/*
----测试结果---
构造方法执行
创建对象
构造方法执行
构造方法名需和类名相同
*/