普通代码块之变量定义
在java中用{}括起来的称为代码块,代码块可分为以下四种: 1.普通代码块: 类中方法的方法体 2.构造代码块: 构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行。 3.静态代码块: 用static{}包裹起来的代码片段,只会执行一次。静态代码块优先于构造块执行。 4.同步代码块: 使用synchronized(){}包裹起来的代码块,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性。同步代码块需要写在方法中。 普通代码块变量定义问题
实例1:
public class Test { public static void main(String[] args) { int a = 11; System.out.println(a); // 局部代码块 { // 代码块中变量a编译不通过 int a = 1; System.out.println(a); } } }
实例2:
public class Test1 { public static void main(String[] args) { // 局部代码块 { int a = 1;// 把代码块方法上面定义就可以编译通过 System.out.println(a); } int a = 11; System.out.println(a); } } 下面这种成为局部代码块 普通代码块:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行” { int a = 1; System.out.println(a); } 这种代码块的作用就是:控制变量的声明周期,当我们使用完a后,并且在接下来的代码中,不会再用到a这个变量,那么就没必要让a在内存中存在占用空间了。 在上述实例一为错误的例子中编译报错,因为a定义在main方法的头部,它的作用范围是从方法的定义一直到方法的结束。因为java代码执行顺序是从上到下的,所以这种情况下,再定义一个与其同名的变量就会出错了。 在实例二正确的例子中,局部代码块中的变量a在跳出代码后已经被销毁释放了。所以在之后的新定义的一个a变量是可以通过的。而且这个变量a的作用范围也是从方法的定义一直到方法的结束的。
|