类变量,成员变量,局部变量
每博一文案
很多时候觉得自己很受伤,其实是心里越放越大的结果,一点点小事都让你怀疑人生,这不是敏感,而是太过脆弱。
人与人之间的际遇大同小异,但是却是活出全然不同的人生,就是因为心里容纳了不同的东西。
打开新闻接受的是负能量,你表现出来的也会是负能量而敞开心扉,接受阳光,那么表现出来的亦是更多的快乐。
人心意识。
房间需要时时清扫,与其积压很多的垃圾,不如腾出地方给自己留有更多的阳光。
—————— 一禅心灵庙语
类变量,成员变量,局部变量
- 由于变量声明的位置的不同,可以将变量分为成员变量和局部变量,以及类变量 。成员变量位于类中方法之外,即属性,而被 static 关键字修饰的属性 称为 “类变量” 又称为“静态变量” ** 。局部变量位于类中,方法之内的或者代码块中。成员变量和局部变量,以及类变量有如下6** 个区别:
- 声明位置不同
- 作用范围不同(作用域)
- 是否有默认值
- 是否需要初始化
- 在内存中的位置
- 作用时间不同(生命周期)
声明位置的不同
- 成员变量:类中,方法之外
- 类变量:类中,方法之外
- 局部变量:类中,方法之内
class Member {
int iNum; // 成员变量
static int sNum; // 类变量又名“静态变量”
public void jNum() {
int jNum; // 局部变量
}
}
public class Blog01 {
public static void main(String[] args) {
Member member = new Member(); // 产生对象,实例化对象
}
}
作用范围不同 (作用域)
- 成员变量:整个类中
- 类变量:整个类中
- 局部变量:当前的方法/当前的代码块
class Member {
int iNum; // 成员变量
static int sNum; // 类变量又名“静态变量”
public void jNum() {
int jNum; // 局部变量
}
public void visit() {
System.out.println(iNum); // 访问成员变量,没有问题
System.out.println(sNum); // 访问类变量,没有问题
System.out.println(jNum); // 访问局部变量,不可以报错,作用域
}
}
public class Blog01 {
public static void main(String[] args) {
Member member = new Member(); // 产生对象,实例化对象
member.visit();
}
}
- 结果:
- 图示:
是否有默认值:
- 成员变量:如果属性没有赋值,有默认值初始值
- 类变量:如果属性没有赋值,有默认值初始值
- 局部变量:无默认值
class Member {
int iNum; // 成员变量
static int sNum; // 类变量又名“静态变量”
public void jNum() {
int jNum; // 局部变量
}
public void visit() {
System.out.println(iNum); // 访问成员变量
System.out.println(sNum); // 访问类变量
// System.out.println(jNum); // 访问局部变量,不可以报错,作用域
// 这里因为局部变量没有初始化无法使用的。
}
}
public class Blog01 {
public static void main(String[] args) {
Member member = new Member(); // 产生对象,实例化对象
member.visit();
}
}
- 结果:
是否需要初始化:
- 成员变量:不需要初始化,有默认初始值
- 类变量:不需要初始化,有默认初始值
- 局部变量:必须进行初始化,否则报错
public class Blog01 {
public static void main(String[] args) {
int num;
System.out.println(num);
/*局部变量,未初始化值,不可以使用
* 强行使用,报错*/
}
}
- 结果:
作用时间不同
- 成员变量:从对象的创建阶段开始,到对象的结束
- 类变量:和类同时加载到创建,到内存当中,到类的结束
- 局部变量:调用方法或者代码块时创建局部变量,从方法或者代码块执行结束,局部变量就会释放自身空间
- 注意: 创建,开辟空间不是目的,存放数据才是目的,因为存放数据需要有空间可以存放,所以才开辟空间的
class Member {
int iNum; // 成员变量
static int sNum; // 类变量又名“静态变量”
public void jNum() {
int jNum; // 局部变量
}
public void visit() {
int jNum = 10; // 这里我们创建一个同名的 jNum 局部变量
/*发现并没有发生,定义冲突,间接说明第一次创建的局部变量,被释放了*/
System.out.println(iNum); // 访问成员变量
System.out.println(sNum); // 访问类变量
System.out.println(jNum);
}
}
public class Blog01 {
public static void main(String[] args) {
Member member = new Member(); // 产生对象,实例化对象
member.visit();
}
}
- 结果:
在内存中的位置
- 成员变量:在堆区中存放该数据
- 类变量: 在方法区中存放,被static修饰的属性,class类同样也是在方法区中存放
- 局部变量:在栈区中存放该数据
最后:
限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家!后会有期,江湖再见!