在 Java 中,类变量,实例变量可以不经过主动赋值就直接使用,而局部变量在不主动赋值的情况下,是无法使用的。在下面分析一下这个原因:

1. 类变量

类变量的赋值有两次,两次都在类加载的过程中,类加载可以简单的分为加载,连接,初始化,其中连接又分为验证,准备,解析。

第一次赋值在准备阶段:为类的静态变量分配内存,并将其初始化为默认值

第二次赋值在初始化阶段:也就是执行 clint,就是自己的静态变量赋值和静态初始化块

所以,即使没有为类变量赋值,也会在准备阶段赋默认值

2. 实例变量

在使用 new 创建实例的时候,在字节码的层次起码会有 new, invokespecial 这两条字节码语句,其中在 new 字节码执行的时候,会创建实例,并将其实例变量(包括本类及其全部父类所定义的每个实例变量)初始化为各自的默认值

接着在执行 invokespecial 时,会执行 lint,也就是其中一个构造方法

可见在实例变量的赋值过程中,也会有两次赋值,所以即使没有主动赋值,也已经有了默认值了

3. 局部变量

但是在局部变量中,局部变量是存储在局部变量表中的(引用和基本类型,引用所指向的对象还是在堆中的);而局部变量表是属于栈帧的一部分,虚拟机完全没有给这里赋初值,所以不赋初值是无法使用的

总结

通过上面的描述,可以知道,类变量和实例变更都存在一次自动的赋默认值的情况,所以类变量,实例变量可以不经过主动赋值就直接使用,而局部变量在不主动赋值的情况下,是无法使用的

java 类变量 赋值_Java 中类变量,实例变量,局部变量的赋值相关推荐

  1. python 类变量(属性)和实例变量(属性

    DAY 4. 类变量(属性)和实例变量(属性) 类变量:在所有类的实例之间都可以共享的变量,类变量在所有对象间只保留一份 在类体中定义 类的所有实例对象都可以访问类变量 类变量只能由类修改,实例对象只 ...

  2. java 实例变量初始化_java学习之实例变量初始化

    实例变量的初始化方法 第一种:通过构造函数进行初始化. 第二种:通过声明实例字段初始化. 第三种:通过对象代码块初始化. 通过构造函数进行初始化方法 通过构造函数进行对象初始化,必须在类中声明一个带参 ...

  3. java实例变量可以被覆盖吗_Java继承覆盖实例变量

    参见英文答案 > Java Inheritance – instance variables overriding                                    3个 我 ...

  4. java 私有变量访问_Java - 访问私有实例变量

    我需要从以下类列表(Species.java)访问私有变量,以便在KlingonOx.java类中使用它们. KlingonOx.java类的目的是确定大象物种的种群数量将大于克林贡牛种的数量. 这是 ...

  5. java静态变量实例变量_java中静态变量和实例变量的区别

    实例变量:只有在创建了实例对象之后才会被分配空间,才可以使用 静态变量:不需要创建实例对象就可以直接使用类名进行引用 public class Different { public static in ...

  6. java 如何测试_java – 如何测试一个变量是否设置?

    Java编译器不会让您定义变量并在赋值之前使用它们,因此问题不存在于与php中存在的相同的形式. 编辑 如果在你的情况下,编译器并没有阻止你(因为这是一个实例变量),最好的解决方案可能是将变量初始化为 ...

  7. java cas原理_Java并发之原子变量及CAS算法-上篇

    Java并发之原子变量及CAS算法-上篇 编辑 ​ 概述 本文主要讲在Java并发编程的时候,如果保证变量的原子性,在JDK提供的类中是怎么保证变量原子性的呢?.对应Java中的包是:java.uti ...

  8. Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序...

    实例化子类时,父类与子类中的静态代码块.实例代码块.静态变量.实例变量.构造函数的执行顺序是怎样的? 代码执行的优先级为: firest:静态部分 second:实例化过程 详细顺序为: 1.父类静态 ...

  9. Java基础篇:隐藏的实例变量

    有时一个方法需要引用调用它的对象.为此,Java定义了this这个关键字.this可以在引用当前对象的所有方法内使用.也就是,this总是调用该方法对象的一个引用.你可以在当前类的类型所允许对象的任何 ...

最新文章

  1. 在 ASP.NET 中执行 URL 重写
  2. RHCSA 系列(六): 使用 Parted 和 SSM 来配置和加密系统存储
  3. 美国康普SYSTIMAX iPatch智能配线系统介绍
  4. 视图解析自定义视图和自定义视图解析器——未完待续
  5. Prometheus部署监控容器
  6. Algorithms学习笔记-Chapter0序言
  7. c语言标准图形库,C语言图形库函数.docx
  8. JavaScript入门(part4)--简单数据类型
  9. React - antd4 中在form中为Switch赋值无效
  10. 使用SpringMVC参数传递时,解决get请求时中文乱码的问题
  11. c程序设计语言1-10答案,C语言程序设计试卷及答案_1(10页)-原创力文档
  12. LibreOffice的使用技巧
  13. C# WPF 定时器
  14. iframe用法详解
  15. Ubuntu引导文件丢失,grub修复(附加重装显卡驱动方法)
  16. C# 操作Word文本框——插入图片、表格、文字、超链接等
  17. 解决springboot的pom.xml文件第一行报错问题
  18. 青少年编程 中国电子学会scratch等级考试二级历年真题解析【持续更新 已更新至2023年3月】
  19. win10下注册MSCOMM32控件
  20. 怎么制作书单视频?一款好用的制作软件教程

热门文章

  1. alwayson高可用组_了解AlwaysOn可用性组上的备份-第1部分
  2. angularjs -- 监听angularJs列表数据是否渲染完毕
  3. hibernate课程 初探单表映射1-2 ORM定义
  4. 基于libpcan库can总线操作的Barrett 机械手控制及腕部六维力传感器驱动
  5. 目前最小的替换模板了,只有十几行代码
  6. UINavagationController页面跳转
  7. MySQL巧妙利用help_topic表把以逗号分隔的字符串转换成行
  8. 面向对象:MATLAB的自定义类 [MATLAB]
  9. 学习node.js的一些笔记
  10. C# Cache何时使用及使用方法