实例变量:
-
实例变量在类中声明,但在方法的外面,构造函数或任何块。
-
当空间分配给某个对象在堆中,插槽为每个实例变量创建值。
-
当一个对象与使用关键字 “new” 来创建,在对象被销毁销毁创建的实例变量。
-
实例变量认为必须由一个以上的方法,构造函数或块,或一个对象的状态的关键部分必须出现在整个类中引用的值。
-
实例变量可以在使用前或后级的级别声明。
-
访问修饰符可以给出实例变量。
-
实例变量对于所有方法,构造函数和块在类中可见。通常,建议,使这些变量私有(接入层)。然而能见度子类可以给这些变量与使用访问修饰符。
-
实例变量有默认值。对于数字的默认值是0,为布尔值是false和对象引用为null。值可以在声明或构造函数中分配。
-
实例变量可以直接通过调用变量名的类的内部访问。然而在静态方法和不同的类(当实例变量被赋予访问)应使用完全限定名调用 ObjectReference.VariableName.
-
1 public class Sample 2 { 3 private int a=1; //实例变量 4 5 public void b() 6 { 7 int a=2; //局部变量 8 System.out.println("局部变量:a="+a); 9 System.out.println("实例变量:a="+this.a);//局部变量的作用域内引用实例变量:this.变量名 10 } 11 public static void main(String[] args) 12 { 13 new Sample().b(); 14 } 15 } 16
=========================================================================================
局部变量:
-
局部变量的方法,构造函数或块中声明。
-
创建局部变量的方法,构造函数或块时进入,一旦退出方法,构造函数或块中的变量将被销毁。
-
访问修饰符不能用于局部变量。
-
局部变量是可见的,只有内声明的方法,构造函数或块。
-
局部变量在堆栈级别内部实现。
-
在这里对局部变量没有默认值,因此局部变量应该声明和初始值应在第一次使用前分配。
例如:
在这里,age 是一个局部变量。这是定义里面 pupAge() 方法,其范围仅限于该方法。
1 public class Test{ 2 public void pupAge(){ 3 int age = 0; 4 age = age + 7; 5 System.out.println("Puppy age is : " + age); 6 } 7 8 public static void main(String args[]){ 9 Test test = new Test();10 test.pupAge();11 }12 }
这将产生以下结果:
Puppy age is: 7
例如:
下面的示例使用 age 没有初始化它,所以它会在编译时给出错误信息。
1 public class Test{ 2 public void pupAge(){ 3 int age; 4 age = age + 7; 5 System.out.println("Puppy age is : " + age); 6 } 7 8 public static void main(String args[]){ 9 Test test = new Test();10 test.pupAge();11 }12 }
编译它,这将产生以下错误:
Test.java:4:variable number might not have been initializedage = age + 7; ^1 error
类/静态变量:
-
类变量也称为静态变量在类的static关键字声明的,但在方法外面,构造函数或块。
-
每个类变量只有一个副本,不管有多少对象从它被创建。
-
静态变量很少使用不是被声明为常量等。常量是被声明为公共/私营,最终和静态变量。常量变量从来没有从他们的初始值改变。
-
静态变量被存储在静态存储器中。这是罕见的使用静态变量以外声明为final,用作公共或私有常数。
-
在程序启动时的静态变量被创建,在程序停止销毁。
-
能见度类似于实例变量。然而,大多数静态变量声明为 public,因为它们必须可用于类的使用者。
-
默认值是相同的实例变量。对于数字,默认值是0;为布尔值,它是假的,和对象引用,它为null。值可以在声明或构造函数中分配。另外值可以在特殊的静态初始化块进行分配。
-
静态变量可以通过调用与类名来访问。 ClassName.VariableName.
-
当定义的变量为 public static final ,那么变量的名称(常量)都是大写。如果静态变量是不公开的和最终的命名语法是相同的实例变量和局部变量。
例子:
1 import java.io.*; 2 3 public class Employee{ 4 // salary variable is a private static variable 5 private static double salary; 6 7 // DEPARTMENT is a constant 8 public static final String DEPARTMENT = "Development "; 9 10 public static void main(String args[]){11 salary = 1000;12 System.out.println(DEPARTMENT+"average salary:"+salary);13 }14 }
这将产生以下结果:
Development average salary:1000
注意:如果变量是从外部类访问的常数应被访问 Employee.DEPARTMENT