作用域问题(所谓块就是一对花括号{}内)
(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…;