一. 代码块
概念:
使用{} 括起来的代码,称为代码块
分类:
根据它位置和声明的不同,我们可以将代码块分为局部代码块,构造代码块,静态代码块,同步代码块(多线程涉及)
a. 局部代码块
限定了变量的生命周期,变量在局部代码块中定义的,那么出来局部代码块之后,就访问不到了。在局部代码块中定义的变量,
在出了代码块之后,内存就会释放掉。
作用: 主要就是节约内存.
局部代码块中定义的变量,虽然说作用域是局部的,但是如果存在外部嵌套的代码块,且在局部代码块定义之前就定义了某个变量,
那么在我们局部的代码块中就不可以定义相同名称的变量。
但是如果在局部代码块执行之后,去定义一个和局部代码块中相同名称的变量,是可以的。因为局部代码块中的变量已经失去了作用域范围。
b.构造代码块
概念:
类中方法外出现,每次调用构造方法的时候,都会优先先调用构造代码块。
特点:
没创建一个对象,都会调用一次我们的构造代码块.
作用:
如果存在很多重载的构造方法,而且每个里面需要执行 相同的逻辑,那么就可以考虑将这些代码提取到构造代码块中来执行。
让我们代码结构更简练。增强了维护性.
使用场景其实不太多见。
c.静态代码块
概念:
类中方法外出现,但是用static 来进行修饰。
特点:
随着类加载的时候执行。
用处:
适用于整个软件的生命周期中,只需要执行一次的业务逻辑代码。
比如我们之后数据库的操作.
特别经典的一道面试题
//注意:静态代码也是按顺序随类的加载而执行的
package snippet;
public class Test {
public static int w=0;
public static int f=print("f");
public static int nom=99;
public static int s=print("s");
public static Test d1 =new Test("d1");
public static Test d2=new Test("d2");
{
System.out.println("构造快");
}
static{
System.out.println("静态块");
}
public Test(String str){
System.out.println((++w)+":"+str+" f="+f+" nom="+nom);
++f;++nom;
}
public static int print(String str){
System.out.println((++w)+":"+str+" f="+f+" nom="+nom);
++nom;
return ++f;
}
public static void main(String[] args){
Test d=new Test("init");
}
}