作用域决定了变量名的可见性和生命周期。在Java中是由大括号{}的位置决定的。
//作用域起点
{
int x = 12;
// 仅 x 变量可用
{
int q = 96;
// x 和 q 变量皆可用
}
// 仅 x 变量可用
// 变量 q 不在作用域内
}
//作用域终点
Java的变量只在其作用域内才可用。
由于Java是一种自由格式的语言,空格,制表符和回车,并不会影响程序执行的结果。
在Java中不能重复定义变量
int x = 12;
{
int x = 96; // Illegal
}
}
对象的作用域
Java对象与基本类型有不同的生命周期,当我们使用new关键字创建对象时,它的生命周期将会超出作用域。
{
String s= new String("str")
}
在上列中,引用s在作用域终点前就结束了,但是引用s指向的字符串对象还在占用内存。虽然这个对象依然占用内存,但是我们无法在作用域之后访问这个对象。因为对它唯一的引用s已经超出作用域范围。
new出来的对象会一直存在内存当中,直到Java垃圾收集器检查出该对象不再可用,才会释放那些被占用的内存,供其他新对象使用。