• 作用域问题(所谓块就是一对花括号{}内)
  • (1) 作用域:
    作用域的概念很抽象,但简单地来说,作用域就是代码划分出来的一块块“区域”,作用域左右着其“居民的生存“(降生何处,生命周期)与名字的影响力(访问控制)。
  • (2) Java中局部变量的作用域:
    局部变量是指在方法中定义的变量。局部变量的 作用域从声明变量的地方开始,直到包含该变量的”块”结束 。
  • (3)局部变量的作用域对其生存、其变量名影响力的决定作用:
    局部变量在其作用域开始时降生在栈内存中,其作用域一结束,便会被释放掉,这同时意味着它的名字能够引用的范围也就在其作用域内;最典型的例子 说for循环()里声明的循环变量了,它就是当循环跳出时便会被释放,这时候在再去使用循环变量名就报错。
  • (4) 注意避免作用域冲突:
    同一块中不允许声明同名变量;(这就好比老”张三”还活着,就又出来个小”张三”,那么”张三”这个名字到底指的是哪个人呢?这就是作用域冲突了)
    可以在一个方法里的不同块里声明同名的局部变量。但是,最好不要在在两个有嵌套关系的块儿中分别声明同名的局部变量。
public static void method1( ) {
     for(int i = 1;i <10;i++) {
         x +=i;
      }
     for(int i = 1;i <10;i++) {
         y += i;
     }
 }
 //虽然在两个循环块中都定义了i,但因为两块独立,所以不会报错

public static void method1( ) {
      int i = 1;
      int sum = 0;
     for(int i = 1;i <10;i++) {
          sum += i;
      }
  }

//像这样在两个有嵌套关系的块中都定义了i,则会报错;但如果将”int i = 1”放到for后面,则此时二者作用域不冲突,不会报错

  • b:变量声明与初始化赋初值问题
  • 所有变量在使用前必须要声明。
  • 局部变量(方法当中的变量)在使用之前还必须显示初始化赋初值(如果不使用,那可以不赋值),要不编译系统会报错。
    *初始化赋值的两种时机:int a=10(声明时便赋值); 或 int a;a=10;(声明后赋值)

参考《Java编程思想》 5.6成员初始化
Java尽力保证所有变量使用前得到恰当的初始化。对于局部变量,若其没有显示初始化就使用则编译系统认为没有初始化(没有初值)那就会报错。你可能会疑问为什么编译系统不会帮你默认初始化呢?因为那样可能就掩盖掉了程序员的失误。
而对于类中的数据成员,在创建对象的过程中系统就会帮你默认初始化值,这个默认的初值对于非final的数据成员来说是恰当的,但对于final的数据成员是不行的、是无效的。(设想一下有效的话,那这默认值就成为不可更改的最终值了,那是什么鬼?)


  • c:一条语句可以定义几个变量,但不建议这么做
    int a,b,c…;