注: 注释掉的代码都表示错误的代码 因为Java是面向对象语言,全部变量都是类成员,因此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 } }