Java的变量类型
以下内容引用自http://wiki.jikexueyuan.com/project/java/variable-types.html:
一个变量提供了程序可以操作的命名存储。Java中的每个变量都有一个特定的类型,它决定了变量内存的大小和布局;可以存储在该存储器中的值的范围;以及可以应用于变量的一组操作。
在使用前必须现将所要使用的变量进行声明。声明变量的基本格式如下:
data type variable [ = value][, variable [= value] ...] ;
这里的data type是Java的一种数据类型,variable是一种变量的名称。要声明一个以上的特定变量类型,可以采用逗号分隔开。
下面是Java中有效的变量声明和赋值的例子:
int a, b, c; // Declares three ints, a, b, and c. int a = 10, b = 10; // Example of initialization byte B = 22; // initializes a byte type variable B. double pi = 3.14159; // declares and assigns a value of PI. char a = 'a'; // the char variable a iis initialized with value 'a'
Java中共有三种变量:
- 本地变量(局部变量)
- 实例变量
- 类、静态变量
一、本地变量(局部变量)
- 本地变量在方法、构造器或者块中声明
- 本地变量在方法、构造器或者块进入时被创建,一旦退出该变量就会被摧毁
- 可访问描述符不能用于本地变量
- 本地变量仅在已经声明的方法、构造器或者块中可见
- 本地变量在栈深度内部实施
- 本地变量没有默认值,因此本地变量必须被声明并且在第一次使用前要给它赋值
例子:
这里,age(年龄)是本地变量。这是在pupAge()方法下定义的,它的范围仅限于这个方法。
public class Test{ public void pupAge(){ int age = 0; age = age + 7; System.out.println("Puppy age is : " + age); } public static void main(String args[]){ Test test = new Test(); test.pupAge(); } } //上述代码会输出如下结果: Puppy age is: 7
例子:
下面的例子使用了本地变量age但是没有进行初始化,所以在编辑是就会显示错误。
public class Test{ public void pupAge(){ int age; age = age + 7; System.out.println("Puppy age is : " + age); } public static void main(String args[]){ Test test = new Test(); test.pupAge(); } } //编辑时会产生如下错误: Test.java:4:variable number might not have been initialized age = age + 7; ^ 1 error
二、实例变量
- 实例变量在类中声明,但是它在方法、构造器或者块外。
- 当堆中的对象被分配了一个空间时,每个实例变量的位置就被创建了。
- 当对象采用关键字“new”创建时实例变量就被创建了,当对象被销毁时它也就被销毁了。
- 实例变量的值必须被一个以上的方法、构造器或者块,或者类中必须出现的对象的状态的重要部分所引用。
- 实例变量可以在类级别上,在使用前或者使用后声明。
- 实例变量可以用可访问描述符。
- 实例变量对类中的所有方法、构造器或者块可见。一般来讲,推荐将这些变量私有(访问层面)。然而子类的可见性可用可访问描述符给予那些变量。
- 实例变量有默认值。数字的默认值为零,布尔型默认值为假,对象引用默认值为空。在声明或者构造器内可以进行赋值。
- 实例变量可以采用直接在类中叫名字方式访问。然而在静态方法和不同的类(实例变量可以被访问)中应当使用完全限定名称。ObjectReference.VariableName
例子:
import java.io.*; public class Employee{ // this instance variable is visible for any child class. public String name; // salary variable is visible in Employee class only. private double salary; // The name variable is assigned in the constructor. public Employee (String empName){ name = empName; } // The salary variable is assigned a value. public void setSalary(double empSal){ salary = empSal; } // This method prints the employee details. public void printEmp(){ System.out.println("name : " + name ); System.out.println("salary :" + salary); } public static void main(String args[]){ Employee empOne = new Employee("Ransika"); empOne.setSalary(1000); empOne.printEmp(); } } //上述代码会输出如下结果: name : Ransika salary :1000.0
三、类、静态变量
- 类变量也叫静态变量,它是在类中用static关键字声明的,但是它在方法、构造器或者块之外。
- 每个类中只有一个类变量,不管这个类有多少对象。
- 除了作为常量被声明之外,类变量很少被应用。常量是被作为public、private、final和static被声明的变量。实例初始化后值不会被改变。
- 静态变量存储在静态内存中,除了声明final之外,静态变量也很少使用public或rpivate作为常量。
- 静态变量随着程序的开始和结束而开始和结束。
- 可见性和实例变量相似。然而大多数静态变量被声明为public由于他们必须为类的使用者所用。
- 默认值和实例变量相似。对于数字的默认值为零,布尔型默认值为假,对象引用默认值为空。在声明或者构造器内可以进行赋值。除此之外,可以在特殊的静态初始化区赋值。
- 静态变量可以用类的名称访问。ClassName.VariableName
- 当静态变量被作为public static final声明时,变量(常量)名称都要用大写字母。如果静态变量不是public和final,它的命名方法和实例变量和本地变量相同。
- 声明为final后不能为其赋值。
例子:
import java.io.*; public class Employee{ // salary variable is a private static variable private static double salary; // DEPARTMENT is a constant public static final String DEPARTMENT = "Development "; public static void main(String args[]){ salary = 1000; System.out.println(DEPARTMENT+"average salary:"+salary); } } //上述代码会输出如下结果: Development average salary:1000
注:如果变量从类外访问,常量就必须以Employee.DEPARTMENT访问。
测试工程:https://github.com/easonjim/5_java_example/tree/master/javabasicstest/test3