Java 有 3 类变量:
局部变量
成员变量 (实例变量)
类变量 (静态变量)
局部变量
局部变量声明在方法, 构造方法或者语句块中;
局部变量在方法, 构造方法, 或者语句块被执行的时候创建, 当它们执行完成后, 变量将会被销毁;
访问修饰符不能用于局部变量;
局部变量是在栈上分配的.
局部变量没有默认值, 所以局部变量被声明后, 必须经过初始化, 才可以使用.
例子
- package import_test;
- public class Dog {
- public void pupAge(){
- int age = 1;
- int color;
- System.out.println("小狗的年龄是:" + age);
- }
- public static void main(String args[]){
- Dog test = new Dog();
- test.pupAge();
- }
- }
例子中的 age 和 color 都是局部变量, 但 color 没赋值, 系统不会默认赋值, 例:
- package import_test;
- public class Dog {
- public void pupAge(){
- int age;
- age = age + 1;
- System.out.println("小狗的年龄是:" + age);
- }
- public static void main(String args[]){
- Dog test = new Dog();
- test.pupAge();
- }
- }
编译错误提示: Error:(6, 15) java: 可能尚未初始化变量 age
成员变量 (实例变量)
实例变量声明在一个类中, 但在方法, 构造方法和语句块之外;
当一个对象被实例化之后, 每个实例变量的值就跟着确定;
实例变量在对象创建的时候创建, 在对象被销毁的时候销毁;
实例变量的值应该至少被一个方法, 构造方法或者语句块引用, 使得外部能够通过这些方式获取实例变量信息;
实例变量可以声明在使用前或者使用后;
访问修饰符可以修饰实例变量;
实例变量对于类中的方法, 构造方法或者语句块是可见的. 一般情况下应该把实例变量设为私有. 通过使用访问修饰符可以使实例变量对子类可见;
实例变量具有默认值. 数值型变量的默认值是 0, 布尔型变量的默认值是 false, 引用类型变量的默认值是 null. 变量的值可以在声明时指定, 也可以在构造方法中指定;
实例变量可以直接通过变量名访问. 但在静态方法以及其他类中, 就应该使用完全限定名: ObejectReference.VariableName.
例子
- package import_test;
- public class Employee{
- // 这个成员变量对子类可见
- public String name;
- // 私有变量, 仅在该类可见
- private double salary;
- // 在构造器中对 name 赋值
- public Employee (String empName){
- name = empName;
- }
- // 设定 salary 的值
- public void setSalary(double empSal){
- salary = empSal;
- }
- public void printEmp(){
- System.out.println("name :" + name );
- System.out.println("salary :" + salary);
- }
- public static void main(String args[]){
- Employee empOne = new Employee("Jim");
- empOne.setSalary(2000);
- empOne.printEmp();
- }
- }
结果
- name : Jim
- salary :2000.0
类变量 (静态变量)
类变量也称为静态变量, 在类中以 static 关键字声明, 但必须在方法构造方法和语句块之外.
无论一个类创建了多少个对象, 类只拥有类变量的一份拷贝.
静态变量除了被声明为常量外很少使用. 常量是指声明为 public/private,final 和 static 类型的变量. 常量初始化后不可改变.
静态变量储存在静态存储区. 经常被声明为常量, 很少单独使用 static 声明变量.
静态变量在程序开始时创建, 在程序结束时销毁.
与实例变量具有相似的可见性. 但为了对类的使用者可见, 大多数静态变量声明为 public 类型.
默认值和实例变量相似. 数值型变量默认值是 0, 布尔型默认值是 false, 引用类型默认值是 null. 变量的值可以在声明的时候指定, 也可以在构造方法中指定. 此外, 静态变量还可以在静态语句块中初始化.
静态变量可以通过: ClassName.VariableName 的方式访问.
类变量被声明为 public static final 类型时, 类变量名称必须使用大写字母. 如果静态变量不是 public 和 final 类型, 其命名方式与实例变量以及局部变量的命名方式一致.
- import java.io.*;
- public class Employee {
- //salary 是静态的私有变量
- private static double salary;
- // DEPARTMENT 是一个常量
- public static final String DEPARTMENT = "开发人员";
- public static void main(String args[]){
- salary = 10000;
- System.out.println(DEPARTMENT+"平均工资:"+salary);
- }
- }
执行结果
开发人员平均工资: 10000.0
开发人员平均工资: 10000.0
来源: http://www.bubuko.com/infodetail-3046207.html