当前位置: 首页 > news >正文

成员变量与局部变量的区别?

如果你现在需要准备面试,可以关注我的公众号:”Tom聊架构“,回复暗号:”578“,领取一份我整理的50W字面试宝典,可以帮助你提高80%的面试通过率,价值很高!!

  • 语法形式:从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。
  • 存储方式:从变量在内存中的存储方式来看,如果成员变量是使用 static 修饰的,那么这个成员变量是属于类的,如果没有使用 static 修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。
  • 生存时间:从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动生成,随着方法的调用结束而消亡。
  • 默认值:从变量是否有默认值来看,成员变量如果没有被赋初始值,则会自动以类型的默认值而赋值(一种情况例外:被 final 修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值。

为什么成员变量有默认值?

  1. 先不考虑变量类型,如果没有默认值会怎样?变量存储的是内存地址对应的任意随机值,程序读取该值运行会出现意外。

  2. 默认值有两种设置方式:手动和自动,根据第一点,没有手动赋值一定要自动赋值。成员变量在运行时可借助反射等方法手动赋值,而局部变量不行。

  3. 对于编译器(javac)来说,局部变量没赋值很好判断,可以直接报错。而成员变量可能是运行时赋值,无法判断,误报“没默认值”又会影响用户体验,所以采用自动赋默认值。

成员变量与局部变量代码示例:

public class VariableExample {// 成员变量private String name;private int age;// 方法中的局部变量public void method() {int num1 = 10; // 栈中分配的局部变量String str = "Hello, world!"; // 栈中分配的局部变量System.out.println(num1);System.out.println(str);}// 带参数的方法中的局部变量public void method2(int num2) {int sum = num2 + 10; // 栈中分配的局部变量System.out.println(sum);}// 构造方法中的局部变量public VariableExample(String name, int age) {this.name = name; // 对成员变量进行赋值this.age = age; // 对成员变量进行赋值int num3 = 20; // 栈中分配的局部变量String str2 = "Hello, " + this.name + "!"; // 栈中分配的局部变量System.out.println(num3);System.out.println(str2);}
}

http://www.lryc.cn/news/277283.html

相关文章:

  • ES6---判断对象是否为{}
  • 高性能、可扩展、分布式对象存储系统MinIO的介绍、部署步骤以及代码示例
  • oracle重启数据库lsnrctl重启监听
  • 08、Kafka ------ 消息存储相关的配置-->消息过期时间设置、查看主题下的消息存活时间等配置
  • JAVA基础学习笔记-day15-File类与IO流
  • WPF ComboBox限制输入长度
  • windows配置网络IP地址的方法
  • windows配置电脑网络IP的方法
  • MySQL,原子性rename
  • FPGA之按键消抖
  • 国内知名的技术平台
  • C#操作注册表
  • Unity中BRP下的深度图
  • 物联网的感知层、网络层与应用层分享
  • kafka KRaft 集群搭建
  • oracle角色管理
  • 汽车信息安全--芯片厂、OEM安全启动汇总(2)
  • HarmonyOS 开发基础(五)Button
  • 带前后端H5即时通讯聊天系统源码
  • vsCode输出控制台中文乱码解决
  • 「服务器」4.新手小白如何安装服务器环境-宝塔
  • Docker安装MySql详细步骤
  • 【微服务合集】
  • Hadoop之mapreduce参数大全-2
  • 目标检测YOLO实战应用案例100讲-基于图像增强的鸟类目标检测(续)
  • MYSQL分表容量预估:简明指南
  • 面试宝典进阶之Java线程面试题
  • BOM简介
  • Java中的集合框架
  • Rustdesk打开Win10 下客户端下面服务不会自启,显示服务未运行