第一讲:变量类型
在Java中,所有变量必须先声明然后才能使用。声明变量时可以只声明,也可以声明的同时初始化变量。
示例:
int a; // 声明了一个变量a
int b = 1; // 声明并初始化了一个变量b
char c = 'c', d = 'd', e = 'e'; // 声明并初始化了三个变量c,d,e
Java中的变量类型主要包括三种:局部变量、实例变量、静态变量(类变量)。
示例:
public class Demo {
static int a = 0; // 静态变量(类变量):独立于方法外,用static修饰
int b = 1; // 实例变量:独立于方法外,不用static修饰
public void test() {
int c = 2; // 局部变量:在方法内部
}
}
局部变量
使用局部变量需要注意以下几点:
-
局部变量需要在方法或语句块中声明使用,他的作用域就是整个方法或语句块。在方法或语句块中使用时被创建,方法或语句块结束时被销毁。
-
局部变量不能被访问修饰符(访问修饰符后续会具体介绍)修饰。
-
局部变量的空间分配在栈中分配。注意:只在虚拟机栈中分配,不会在本地方法栈中分配(详情会在JVM内存结构中介绍)。
-
局部变量没有默认值,所以必须声明及初始化之后才能使用。
示例:
public class Demo {
public static void main(String[] args) {
Demo demo = new Demo();
demo.test();
}
public void test() {
int a = 0; // 方式一:声明并初始化
// int a; // 方式二:声明未初始化
a = a + 1;
System.out.println("a的值是:" + a);
}
}
方式一结果:a的值是:0
方式二结果:variable number might not have been initalized
实例变量
使用实例变量需要注意以下几点:
- 实例变量声明在方法和语句块的外面,但在类的内部;类内部的所有方法和语句块都可以使用。
- 实例变量的作用域是整个类内部,当对象创建时创建,对象销毁时销毁。注意:每个创建的对象都有独自的一份实例变量,相互之间不可见。
- 实例变量可以用访问修饰符修饰;如果该变量不想被外部类修改的话,一般使用private修饰符定为类私有,对外不可见。
- 实例变量在使用前可以不初始化,因为它有默认值;数值类型的默认值为0,布尔类型为false,引用类型为null;初始化实例变量的工作一般在声明时、类的构造方法中、非静态代码块中。
- 实例变量可以直接通过变量名使用,但是如果在静态方法或其他类中,则应使用完全限定名:ObjectReference.VariableName。
示例:
public class Demo {
public int a; // 声明未初始化,使用时默认值为0;对子类可见
private int b = 1; // 声明并初始化,使用时值为1;对子类不可见
private int c;
public Demo (int value) {
c = value; // 构造方法中对实例变量c初始化赋值,执行后c的值为2
}
public void test() {
c = c + a; // 变量a、c在普通方法中(未被static修饰的方法)可以直接使用
System.out.println(c);
}
public static void main(String[] args) {
Demo demo = new Demo(2); // 执行构造方法
demo.test();
// c = c + a; // 变量a、c在静态方法(被static修饰的方法)中不可以直接使用
demo.c = demo.c + demo.a; // 通过对象引用可以在静态方法中使用实例变量
System.out.println(demo.c);
}
}
输出:
2
2
静态变量(类变量)
使用静态变量需要注意一下几点:
- 静态变量声明在方法之外,但在类的内部,需要使用static修饰。
- 同一个类创建多少个对象,他的实例变量就会有多少份,每个对象都是独一份的。注意:静态变量只会有一份,它不属于任何一个对象,它属于类,所有对象共享该变量;也就是说如果一个对象将其值修改,其他对象可见。
- 静态变量一般被用于常量使用,常量初始化之后不可改变;声明方法 public/private static final int varName = 1。
- 静态变量的作用域是整个类,它在使用时创建,在类被销毁或程序结束时销毁。注意:如果该类的某个对象销毁了,但是还有该类的其他对象还存在,那么该静态变量就不会被销毁。
- 静态变量的默认值和实例变量一样,但是它的初始化可以在声明时、类的构造方法中、静态代码块中。
- 静态变量的使用方式一般是通过类名来访问:ClassName.VariableName;它在静态方法和非静态方法中都可以使用。
示例:
public class Demo {
private static final int a = 1; // 静态常量,值不可变
private static int b; // 静态变量,值可变
public static void main(String[] args) {
Demo.b = Demo.b + Demo.a;
System.out.println("b的值为:" + Demo.b);
}
}
输出:b的值为:1