java对象创建与引用变量的详解

创建对象

ClassName objectRefVar = new ClassName();
这条语句包含了三个部分:

  1. 创建对象 ——new ClassName();
    用new操作符创建了一个对象(实例化),且相应的构造方法被调用;新创建的对象在内存中被分配空间。它们可以通过引用变量来访问.

  2. 声明对象引用变量 ——ClassName objectRefVar;

    本质上来说,一个类是一个程序员定义的类型。类是一种引用类型,这意味着该类类型的变量都可以引用该类的一个实例(即实例化对象)。实例对象的数据和方法可以运用点操作符(.)通过对象的引用变量进行访问。

  3. 将对象的引用赋值给这个引用变量——objectRefVar = new ClassName();

下面是一个例子:

Circle myCircle-new Circle();

变量 myCircle中放的是对 Circle 对象的一个引用

注意事项:

  1. 从表面上看,对象引用变量中似乎存放了一个对象,但事实上,它只是包含了对该对象的引用。严格地讲,对象引用变量和对象是不同的,但是大多數情况下,这种差异是可以忽略的。因此,可以简单地说 myCircle 是一个 Circle 对象,而不用冗长地描述说, myCircle 是一个包含对 Circle 对象引用的变量
  2. 另外在 Java 中,数组被看作是对象。数组是用 new 操作符创建的。一个数组变量实际 上是一个包含数组引用的变量。
  3. 创建匿名对象
    new Circle()或者 System.out.println("Area is " + new Circle(5).getArea();
    前面的语句创建了一个 Circle 对象。后面的语句创建了一个 Circle 对象,然后调用它的 getArea 方法返回其面积

基本类型变量和引用类型变量的区别

存储的值

每个变量都代表一个存储值的内存位置。声明一个变量时,就是在告诉编译器这个变量 可以存放什么类型的值。
在这里插入图片描述

赋值

基本类型赋值:
在这里插入图片描述
引用类型赋值:在这里插入图片描述
注意:

  1. 如图 9-9 所示,执行完赋值语句 C1-C2 之后,C1指向 C2 所指的同一个对象。C1 以前引用的对象就不再有用,因此,现在它就成为垃圾。垃圾会占用内存空间。Java 运行系统会检测垃圾并自动回收它所占的空间,这个过程称为垃圾回收(garbage collection)。
  2. 如果你认为不再需要某个对象时,可以显式地给该对象的引用变量赋null 值。如 果该对象没有被任何引用变量所引用,Java 虚拟机将自动回收它所占的空间。

引用数据和NULL

如果一个引用类型的数据域没有引用任何对象,那么这个数据域就有一个特殊的 Java 值 null,如图所示:
在这里插入图片描述
null 同 true 和 false— 样都是一个直接量。true 和 false 是 boolean 类型直接量, 而 null 是引用类型直接量。

  • 引用类型数据域的默认值是 null
  • 数值类型数据域的默认值是 0
  • boolean 类型数据域的默认值是 false
  • 而 char类型数据域的默认值是 ’\u00000。

特别注意:Java 没有给方法中(如main方法)的局部变量设置默认值,局部变量还是需要初始化

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ThreadLocal是Java中的一个类,它提供了一种线程局部变量的机制。在多线程环境下,每个线程都有自己独立的ThreadLocal变量副本,线程之间互不干扰。 使用ThreadLocal可以在多线程情况下实现线程安全的变量存储和访问。每个线程都可以通过ThreadLocal对象来访问自己的变量副本,而不会影响其他线程的变量。 在使用ThreadLocal时需要注意几点。首先,在使用线程池时,线程的结束时间是不可预测的,而线程池中的线程是复用的,并且可能会出现ThreadLocal对象未被清理的情况,导致值被覆盖或取到旧值。因此,在使用线程池时需要额外注意ThreadLocal的使用。 另外,ThreadLocal的set()方法用于设置当前线程的ThreadLocal变量的值。它首先获取当前线程,然后获取线程中的ThreadLocalMap对象。如果ThreadLocalMap对象不为空,则直接更新要保存的变量值,否则创建ThreadLocalMap对象并赋值。 总之,ThreadLocal是一种实现线程局部变量存储的机制,可以在多线程环境下实现线程安全的变量访问。在使用ThreadLocal时需要注意线程池中的复用问题,并使用set()方法来设置当前线程的ThreadLocal变量的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java中ThreadLocal详解(一篇就够了)](https://blog.csdn.net/qq_38721537/article/details/124565091)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java中ThreadLocal详解](https://blog.csdn.net/qq_53729147/article/details/127967751)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值