Java中的static———静态变量

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

**开源地址:https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB **

}

}

class Chinese {

// 姓名; 实例变量

String name;

//身份证号; 实例变量

String idNum;

//国籍; 实例变量

String nation;

//无参构造器

public Chinese() {}

//有参构造器

public Chinese(String myName, String myIdNum, String myNation) {

this.name = myName;

this.idNum = myIdNum;

this.nation = myNation;

}

}

输出结果:

姓名:张三 身份证号:333333333333 国籍:中国

姓名:李四 身份证号:444444444444 国籍:中国

可以看出来,这个Chinese类抽象的是中国人,所以这里面”国籍“实例变量就可以声明为静态变量,让国籍固定为chinese;

访问时只需要用Chinese类来访问就可以了;

代码如下:

public class StaticTest02 {

public static void main(String[] args) {

Chinese c1 = new Chinese(“张三”, “333333333333”);

System.out.print(“姓名:” + c1.name);

System.out.print(" 身份证号:" + c1.idNum);

// 静态变量不需要实例化,只需要用类来访问就可以了

System.out.println(" 国籍:" + Chinese.nation);

Chinese c2 = new Chinese(“李四”, “444444444444”);

System.out.print(“姓名:” + c2.name);

System.out.print(" 身份证号:" + c2.idNum);

System.out.println(" 国籍:" + Chinese.nation);

}

}

class Chinese {

// 姓名; 实例变量

String name;

//身份证号; 实例变量

String idNum;

//国籍; 静态变量

static String nation = “中国”;

//无参构造器

public Chinese() {}

//有参构造器

public Chinese(String myName, String myIdNum) {

this.name = myName;

this.idNum = myIdNum;

}

}

输出结果:

姓名:张三 身份证号:333333333333 国籍:中国

姓名:李四 身份证号:444444444444 国籍:中国

可以看到输出结果都是一样的,这时候应该会有一个疑问:既然输出结果都一样,那么用静态变量有什么用呢?

这就涉及到底层的内存了,简单说一下,实例变量都存放在堆中,每一个实例变量都会占有一定的内存空间,像”国籍“这个实例变量同样每声明一个对象就会多占用一块空间,而静态变量存放在方法区中,而且只需要声明一次,这个类就可以一直用;

所以,如果这个类的所有对象的属性值都是一样的,不建议定义为实例变量,会浪费内存空间

建议定义为静态变量,在方法区中只保留一份,节省内存的开销

小总结

对于静态变量,

**对象级别的变量不需要static

类级别的变量需要static**

对象级别:一个对象对应一份数据,各个对象都可以不同

类级别: 所有对象对应一份数据,各个对象都一样

引用访问静态变量


静态变量可以使用引用去访问,但实际上在执行过程中,引用所指向的对象并没有参与,如果是空引用访问实例变量,程序一定会发生空指针异常,但是如果用空引用访问静态变量,程序并没有发生空指针异常,所以通过引用访问静态变量实际上还是直接通过去访问的

测试代码:

public class StaticTest03 {

public static void main(String[] args) {

Chinese c = new Chinese(“张三”, “3333333333”);

System.out.print(“姓名:” + c.name);

System.out.print(" 身份证号:" + c.idNum);

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值