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

【Java10】成员变量与局部变量

Java中的变量只有两种:成员变量和局部变量。

和C++不同,没有全局变量了。

成员变量,field,我习惯称之为**”属性“**(但这些年,因为attribute更适合被叫做属性,所以渐渐不这么叫了)。

局部变量是在方法中定义的变量。

成员变量

和成员方法类似,成员变量也有两种:

  • static修饰的变量,也就是类成员变量
  • 没有static修饰的变量,也就是对象变量(也叫实例变量,早期习惯把对象叫做实例,对象初始化叫实例化)。

和成员方法也是类似的:

  • 类成员变量由类.类变量访问;
  • 实例变量由实例.实例变量访问;
  • 也可以由实例来访问类变量,实例.类变量,但要注意这时实际上访问的是类变量,对其修改会影响其他实例访问。
class Person
{public String name;public static int eyeNum;
}public class PersonTest
{public static void main(String[] args){System.out.println(Person.eyeNum); // 第一次调用Person类,该类自动初始化,eyeNum默认值是0// 实例化一个Personvar p = new Person();// 通过引用变量p来访问这个实例System.out.println(p.name, p.eyeNum); // p.name默认值是null}
}

成员变量不需要显式初始化,系统会默认在类的准备阶段或者在实例化的时候进行默认初始化。默认初始化规则和动态初始化数组元素是一样的。

局部变量

局部变量有三种定义形式(在三个不同的地方被定义):

  • 形参:定义方法签名时定义的变量,作用域是整个方法的生命期;
  • 方法局部变量:方法体内部,作用域是从定义的地方生效,方法结束时失效;
  • 代码块局部变量:在代码块内部定义的局部变量,作用域从定义该变量的地方生效,到该代码块结束时失效。

局部变量除形参外,必须显式初始化,否则不能访问。

作用域
  • 一个类中不能定义两个同名的成员变量,即便修饰符不同也不行;
  • Java允许局部变量和成员变量同名。且方法中的局部变量会覆盖成员变量。如果需要调用被覆盖的成员变量,需使用this指针(实例变量)或类名.类变量(类变量)

道理是这么个道理,但是真正编程的时候还是别这样了,徒增烦恼。

public class VariableOverrideTest
{private String name = "王五";private static double price = 78.0;public static void main(String[] args){var price = 65; // 方法中的局部变量覆盖成员变量System.out.println(price); // 65System.out.println(VariableOverrideTest.price); // 78.0}public void info(){var name = "孙悟空"; // 局部变量覆盖成员变量System.out.println(name); // 孙悟空System.out.println(this.name); // 王五}
}
http://www.lryc.cn/news/392529.html

相关文章:

  • Spring Session与分布式会话管理详解
  • 从0开始学习pyspark--Spark DataFrame数据的选取与访问[第5节]
  • Fastjson首字母大小写问题
  • GuLi商城-商品服务-API-品牌管理-效果优化与快速显示开关
  • 如何成为C#编程高手?
  • SpringBoot学习06-[SpringBoot与AOP、SpringBoot自定义starter]
  • Maven - 在没有网络的情况下强制使用本地jar包
  • JAVA--JSON转换工具类
  • 每日复盘-20240705
  • MySQL 一些用来做比较的函数
  • 一个使用率超高的大数据实验室是如何练成的?
  • Chiasmodon:一款针对域名安全的公开资源情报OSINT工具
  • 如何在Java中实现PDF生成
  • Redis 的缓存淘汰策略
  • 音乐播放器
  • 三星组件新的HBM开发团队加速HBM研发
  • 图书馆数据仓库
  • 基于uniapp(vue3)H5附件上传组件,可限制文件大小
  • Phoenix Omid Timestamp Oracle 组件实现原理
  • Lex Fridman Podcast with Andrej Karpathy
  • 力扣1895.最大的幻方
  • 【C++】 解决 C++ 语言报错:Segmentation Fault
  • 【linuxC语言】手撕Http协议之程序框架
  • 溶解氧(DO)理论指南(1)
  • Mysql中常用函数的使用示例
  • 开源205W桌面充电器,140W+65W升降压PD3.1快充模块(2C+1A口),IP6557+IP6538
  • Java中的内存数据库与缓存技术
  • GUKE万能工具箱(附带源码)
  • FFmpeg开发笔记(四十二)使用ZLMediaKit开启SRT视频直播服务
  • spring-boot-starter-data-redis是否支持reactive响应式编程