A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

普通代码块之变量定义



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的作用范围也是从方法的定义一直到方法的结束的。

1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马