注: 注释掉的代码都表示错误的代码 由于Java是面向对象语言,所有变量都是类成员,所以Java只有局部变量,没有全局变量
<!-- lang: java -->
/*
* 常量测试类
* 类常量 和 局部常量
*/
class A{
final int i = 1; //类常量,在声明时必须赋值
// final int i; i=1;
static final int x = 1;
final StringBuffer sbf = new StringBuffer("hello");
public void test1(){
final int f ; //局部常量可以先声明后使用,但常量没有初始值
// System.out.println(f); //局部常量在使用时必须赋值
f = 1;
System.out.println(i); //1
final int i = 2; //类常量此时将被隐藏
System.out.println(i); //2
sbf.append("world");
System.out.println(sbf); //引用的对象不可以改变,但是引用的内容可以改变
}
}
/*
* 变量测试类
* 成员变量:声明在类体中的变量;可分为:实例变量(不加static) 和 类变量(加static,即静态变量)
* 局部变量:不是声明在类体括号里面的变量
*/
class B{
public int x = 1; //类变量可以加访问修饰符
static int y = 1;
static int n ;
int m ; //类变量具有初始值,而局部变量没有初始值,使用时必须赋值
// m = 1; //语法规定不能这么赋值,应该写成
{m = 1;}
public void test1(){
++x;
++y;
System.out.println("x = "+x+"\n"+"y = "+y);
System.out.println("m = "+m);
System.out.println("n = "+n);
int z = 100;
z = 200; //重新赋值
int x = 100;
this.y = 200;
// 类变量被隐藏,但加关键字this可以调用
System.out.println("z = "+z+" x = "+this.x+" y = "+y); // z = 200 x = 2 y = 200
}
//局部变量的声明错误
public static void test2(){
// static int x = 1; //局部变量是保存在栈中的,而静态变量保存于方法区
// public int x; //局部变量不能加任何访问修饰符
int i ;
// int i = 1; //同一个范围内不允许有两个局部变量命名冲突
}
}
public class TestMain {
public static void main(String[] args) {
new A().test1();
new B().test1(); //x = 2;y = 2
//无论创建多少个对象,永远都只分配一个静态变量,静态变量在内存中只有一个,JVM加载这个类的过程时会为静态变量分配内存
new B().test1(); //x = 2;y = 3
}
}