变量的分类
Java 语言中若变量按声明的位置分类,
可以分为:成员变量、局部变量,
而成员变量又分为:实例变量、静态变量。
实例变量是指不使用static修饰的变量,
静态变量是指使用static修饰的变量。
局部变量包括:方法内声明的变量、方法的形参、构造器的形参、代码块内声明的变量。
成员变量
成员变量:如果一个变量定义的位置在方法的外部,在类的内部,此时该变量被称为成员变量。成员变量不是必须要赋值,成员变量是有默认值的,具体的值是根据数据类型来定。
有默认值
byte/short/int/long : 0
float/double : 0.0
char : 0 或 ‘\u0000’
boolean : false
引用类型: null
实例变量
实例变量是指不使用static修饰的变量,
类中的实例变量在用该类创建对象的时候才会被分配内存空间。
//实例变量的赋值
public class Test01 {
int m = 10,n;//A
//n=200; 成员变量 在声明的同时赋值或者在方法内赋值
void f(){
if(m == n)
n=+m; //C
else
n = n - m; //D
}
}
实例变量的调用
public class Test1 {
int a=10; //成员变量 示例变量
public static void main(String[] args) {
Test1 test1 = new Test1();
int a = test1.a; //局部变量a
System.out.println(a);
test1.sys();
}
public void sys() {//示例方法
System.out.println(a);
}
}
//类Test2
public class Test2 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Test1 test1=new Test1();
int a=test1.a;
System.out.println(a);
}
}
静态变量
java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。静态变量是成员变量的一种。
1.静态变量在类中,但在方法、构造方法、语句块之外;
2.系统自动赋初值,此外,静态变量还可以在静态语句块中初始化);
3.对象. 或 类名. 两种形式调用;
4.存储在方法区的静态方法区;
5. 生命周期是 随类加载而加载,类消失而消失;
6. 无论一个类创建了多少个对象,类只拥有静态变量的一份地址拷贝;
7.为了对类的使用者可见,大多数静态变量声明为public类型;
局部变量
局部变量:如果一个变量的定义的位置是在方法的内部,此时 该变量被称为局部变量。局部变量在使用的前必须要赋值。
不会赋默认值 必须赋初值才能使用
public class MemberLocal{
static String name; //静态变量 由 static修饰 又称全局变量 可以被静态方法使用
int num=10;//成员变量 又称实例变量 一般使用在其他需要的方法中 使用时需要new一下
public static void A() {
int num=20; //局部变量 在这个方法内使用
System.out.println("我是静态变量name 我的值是初始值"+name);
System.out.println("我是局部变量num 我需要赋值后使用 我的值是"+num);
name = "被A修改过的name";
}
public static void B(int param) { //方法的参数就是局部变量
//参数在方法调用的时候必然是会被赋值的
System.out.println("我是局部变量parame 我需要赋值后使用 我的值是"+param);
System.out.println("我是静态变量name 我的值是"+name);
}
public static void main(String[] args){
int numB = 100;
A();
B(numB);
}
}
静态变量 成员变量 局部变量对比
成员变量和局部变量的对比
相同点:
1.声明格式相同
格式: 数据类型 变量名 = 变量值
2.变量,必须先声明后使用
3.变量,都有其作用域
不同点:
1.声明的位置不同:
成员变量:直接声明在类的内部
局部变量:方法内声明的变量
方法的形参、构造器的形参
代码块内声明的变量。
2.权限修饰符的使用:
成员变量:可以在声明的类型前,指明权限修饰符。
权限修饰符有:private、public、protected、默认
局部变量:不可以声明权限修饰符
3.默认初始化值:
成员变量:在声明时,如果没有显示赋值。则其有默认初始化值。
byte/short/int/long : 0
float/double : 0.0
char : 0 或 '\u0000'
boolean : false
引用类型: null
局部变量:在使用变量前,一定要进行显示初始化。即:局部变量没有初始化值
对于方法的形参(局部变量的一种)而言,是在调用方法时,给形参赋值。
4.在内存中加载的位置不同:
成员变量:声明在堆空间中(永久存在)
局部变量:声明在栈空间中
注意事项:
1.当成员变量与局部变量名相同时,使用就近原则,只要你能访问到,哪个声明的地方离你近就访问的是哪个,必须访问成员变量时,使用this访问。
2.每个对象都有自己的成员变量,并不是共享一份,而静态变量则是所有对象共享一份。
3.静态变量的访问,一般使用‘类名.变量名’进行访问,也可使用‘对象名.变量名’进行访问,但不推荐,因为静态变量并不属于某个对象,而属于整个类