概述
成员变量和实例变量,类变量的区别
A:在类中的位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
class Person {
static String name; //类变量
int num; //实例变量
public void speak(int x) {
int num = 10; //x和num都是局部变量
}
}
B:在内存中的位置不同
实例变量:在堆内存(实例变量属于对象,对象进堆内存)
类变量:存储于方法区的静态区(类变量属于类,类进方法区)
局部变量:在栈内存(局部变量属于方法,方法进栈内存)
C:生命周期不同
实例变量:随着对象的实例创建而存在,随着实例的消失而消失
类变量:类变量随着类的加载而加载,随着类的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
public class Person{
static String name; //类变量
int num; //实例变量
public void speak(int x) {
int num = 10; //局部变量
String name = "bbb";
//实例变量会被局部变量覆盖
System.out.println("1 --"+num);
//采用this来作为num的限定,则会输出实例变量的值
System.out.println("2 --"+this.num);
//类变量会被局部变量覆盖
System.out.println("3 --"+name);
//采用类名来作为限定,则会输出类变量的值
System.out.println("4 --"+Person.name);
}
public static void main(String[] args){
Person p = new Person();
p.num = 9; //实例变量必须通过实例来引用
p.name = "aaa";
p.speak(3);
Person p2 = new Person();
//p2依然应用Person类,依然输出aaa
System.out.println("5 --"+t2.name);
}
}
输出:
D:初始化值不同
类变量:有默认初始化值
实例变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用
//成员变量无需显式初始化。而局部变量必须显示的初始化
class Person{
//定义一个实例变量
public String name;
//定义一个类变量
public static int num;
}
public class Test{
public static void main(String[] args){
System.out.println(Person.num);
Person p = new Person();
System.out.println(p.name+"....."+p.num);
}
}
输出:
tip:实例变量不能在类体中先声明然后在方法中直接赋值,类变量可以
//可以运行
public class Hello {
static int a; //在类体中声明整型静态变量a。
public static void main(String[] args) {
a=3; //在方法中对静态变量a赋值。
System.out.println("a="+a);
}
}
//不能运行
public class Hello {
int a; //在类体中声明整型实例变量a。
public static void main(String[] args) {
a=3; //在方法中对实体变量a赋值。
System.out.println("a="+a);
}
}
//将上述代码改成这样可以运行
public class Hello {
int a; //在类体中声明整型实例变量a。
public static void main(String[] args) {
Hello h = new Hello();
h.a = 3;
//因为main方法是static的,它们只能访问static数据,所以要变成h.a。不是静态方法可以直接用a
System.out.println("a="+h.a);
}
}
最后
以上就是聪明小熊猫为你收集整理的JavaSE 成员变量与局部变量的全部内容,希望文章能够帮你解决JavaSE 成员变量与局部变量所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复