Java的成员变量和局部变量
Java的成员变量和局部变量
根据定义变量位置的不同,可以将变量分为成员变量和局部变量
成员变量是在类范围内定义的变量
局部变量是在一个方法内定义的变量
成员变量
类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;
package com.cnblogs;
/*
* 本类用于测试成员变量
*/
public class TestMemberVar {
//成员变量:类中,方法外定义
String name = "柒";//实例变量
static int age = 21;//类变量
public static void main(String[] args) {
// System.out.println(name);//实例变量在静态方法中不可以直接调用
System.out.println(age);//类变量可以在任何方法中直接调用 结果-->21
//实例化一个a对象
TestMemberVar a = new TestMemberVar();
a.testVar();// 结果 -->柒 21
a.age = 99;
a.name = "张三";
a.testVar();// 结果 -->张三 99
//实例化一个b对象
TestMemberVar b = new TestMemberVar();
b.testVar();// 结果 -->柒(实例变量只改变对象自身的值,所以a对象的name改变,不影响对象b的name变量) 99(类变量是针对所有对象的,所以a改变age,b的age也改变)
}
public void testVar() {
System.out.println(name);//实例变量在非静态方法中可以直接调用
System.out.println(age);//类变量可以在任何方法中直接调用
}
}
成员变量可以不自行初始化,系统会自动对其进行默认初始化,布尔值默认值为 false ,除了基本数据类型,其余的默认值都是null。
package com.cnblogs;
/*
* 本类用于测试成员变量
*/
public class TestMemberVar {
//成员变量:类中,方法外定义
String name;//实例变量
static int age;//类变量
public static void main(String[] args) {
System.out.println(age);//结果为 0
TestMemberVar a = new TestMemberVar();
a.test();//结果为null
}
public void test() {
System.out.println(name);
}
}
局部变量
成员变量需要自行初始化值
作用域:在方法/局部代码块中,对应的代码执行完局部变量就被释放
package com.cnblogs;
/*
* 本类用于测试局部变量
*/
public class TestPartVar {
public static void main(String[] args) {
//定义局部变量
// int num;
// System.out.println(num);//这里会提示错误The local variable num may not have been initialized(局部变量num可能尚未初始化)
//所以局部变量必须自行初始化值
int num1 = 0;
System.out.println(num1);//结果为0
}
}
java的局部变量和成员变量是可以重名的,局部变量会覆盖成员变量的值。
package com.cnblogs;
/*
* 本类用于测试局部变量
*/
public class TestPartVar {
//定义成员变量
int num = 99;//实例变量
static int num2 = 9;//类变量
public static void main(String[] args) {
//定义局部变量
int num = 88;
int num2 = 8;
System.out.println(num);// 结果为88
System.out.println(num2);// 结果为8
TestPartVar a = new TestPartVar();
a.test();// 结果为66 6
}
public void test() {
//定义局部变量
int num = 66;
System.out.println(num);
int num2 = 6;
System.out.println(num2);
}
}