引入
我们都知道类是有且仅有五大成分组成的分别是:“成员变量”,“构造器”,“成员方法”,“代码块”,“内部类”,今天小烦给您说说五大成分中的其中一个"代码块",代码块按照有无static可以分为静态代码块和实例代码块.下面请跟着小烦跟着往下看↓↓↓↓↓↓↓↓↓
1.静态代码块
静态代码块的掌握:
怎么写,怎么用
格式:
在类中方法外定义一个{},使用static关键字修饰
public class Demo{
//静态变量
//静态方法
//静态代码块
static{
//就是静态代码块
}
}
特点:
静态代码块是用来对类进行初始化的.
执行特点:类加载到内存后只会执行一次.
可以用来初始化静态成员,或者做一些要系统初始化的逻辑.
public class Demo14 {
public static void main(String[] args) {
Today stu1 = new Today();
System.out.println("stu1 = " + stu1);
Today stu2 = new Today();
System.out.println("stu2 = " + stu2);
System.out.println("main方法执行完毕");
System.out.println("Today.num = " + Today.num);
System.out.println("Today.num2 = " + Today.num2);
}
}
class Today{
static int num = 100;
static int num2 ;
static {
System.out.println("这是静态代码块!!");
num2 = 10000;
}
}
运行结果
2.实例代码块
实例代码块
没有static修饰,必须放在类下.与对象初始化一起加载.
格式
class 类名{
//其他成分
{
//实例代码块、构造代码块
}
}
特点:
只会在对象创建是,任何一个构造方法执行之前执行一次.
作用:对对象进行初始化
如果在创建对象之前,就需要给对象中的某些成分进行初始化,可以在每一个构造方法去操作.也可以在构造代码块中完成
public class Demo14 {
public static void main(String[] args) {
Today stu = new Today();
System.out.println("stu.name = " + stu.name);//null 阿三
Today stu1 = new Today("张三");
System.out.println("stu1.name = " + stu1.name);//结果?
}
}
class Today {
String name;
{
//会在每次构造方法执行前,执行一次
System.out.println("构造代码块");
name = "阿三";
}
public Today() {//构造方法
System.out.println("构造方法");
}
public Today(String name) {
//调用构造方法之前会执行实例代码块
this.name = name;
}
}
运行结果
实例代码块和静态代码块的区别:
执行的时机:
静态代码块:类加载到内存时,执行一次(和创建对象没关系)
实例代码块:创建对象的时候,在执行构造方法前执行一次(每创建一个对象都会执行一次)
使用区别:
静态代码块:用来初始化对象的成员,也可以在此去初始化静态的成员