你知道Java有那些引用方式吗?

Java中提供了四种引用类型:强引用、软引用、弱引用和虚引用,以控制对象的生命周期和辅助垃圾回收。强引用是最常见的引用,只要存在就不会被回收。软引用在内存充足时保持对象,内存不足时会被回收,常用于缓存。弱引用比软引用更弱,无论内存状况如何,垃圾回收时都会回收。虚引用最弱,不直接影响对象生存,通常与引用队列配合使用,以便在对象被回收时得到通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java的引用


有那些引用方式?
   Java中共有四种引用方式,分别是①强引用 ②软引用 ③弱引用 ④虚引用
提供这些引用方式的目的是什么?
   ①可以使程序员可以通过代码控制或知晓对象的生命周期
   ②有利于程序的垃圾回收



一、强引用
  表现形式:new 例如Object o = new Object();
  引用强度:强引用是四种引用方式中强度最高的方式,只要强引用存在,垃圾回收器就不会对引用对象进行回收,即使内存不足,虚拟机也只会报出OOM(Out Of Memory 计算机内存耗尽 )异常,而不会去执行垃圾回收工作。
  强引用的回收:①当方法运行结束,引用消失,强引用对象将被回收
         ②将引用赋值为null;


二、软引用
  表现形式:SoftReference sr = new SoftReference(new String(“hello”));
  引用强度:软引用的引用强度次于强引用,用来设定有用但不必须的对象,当计算机中的内存充足时,引用对象将不会被回收,但当计算中内存不足时,引用对象将被垃圾回收器回收。
  软引用的使用:软引用能防止出现内存不足的情况,常用于实现网页的缓存,图片缓存等。当软引用对象未被回收时,使用软引用类所提供的get方法将返回该对象的强引用,若被回收,将返回null。


三、弱引用
  表现形式:WeakReference weakReference = new WeakReference(new User());
  引用强度:弱引用的引用强度次于软引用,弱引用用于设定不必须的对象,该对象无论内存是否充足,当垃圾回收进行时都将被回收,并且与之关联的引用(只与其关联)都将被回收。


四、虚引用
  表现形式:虚引用必须与引用队列关联使用,例如ReferenceQueue queue = new ReferenceQueue();
PhantomReference<byte[]> reference = new PhantomReference<byte[]>(new byte[1], queue);
  引用强度:虚引用的引用强度是四种引用中强度最弱的,这意味着虚引用的的对象在任何时候都有可能被GC回收,同时也可以看出虚引用并不影响对象的生命周期





                     一天不学习我心赤闹,奥利给,干啦。在这里插入图片描述

<think>嗯,用户想了解Java构造方法的作用和用法。首先,我需要回忆一下构造方法的基本概念。构造方法Java中是用来初始化对象的,每次创建新对象时都会调用它。名称必须和类名相同,而且没有返回值类型,连void都没有。比如,引用中的例子,Student类的构造方法就是publicStudent(){}这样的。然后,用户可能想知道构造方法的具体作用。根据引用里的内容,构造方法的主要作用是初始化对象的属性。比如,Student2类有两种构造方法,无参的给age默认值0,有参的可以设置特定值。这说明构造方法可以灵活地初始化对象的状态。接下来,构造方法的用法。用户可能需要知道如何定义和使用。比如,在创建对象时用new关键字调用构造方法,比如newStudent("张三",20)。这里要强调构造方法没有返回值,而且必须通过new来调用,不能像普通方法那样直接调用。 另外,要注意默认构造方法的情况。如果用户没有定义任何构造方法Java会自动提供一个无参的默认构造方法。但一旦用户定义了有参构造方法,就必须显式地写出无参构造,否则无法使用无参创建对象。比如引用3中的例子,如果注释掉无参构造,而又没有自己写的话,就会出错。 用户可能还会混淆构造方法和普通方法的区别。构造方法没有返回类型,而普通方法必须有。构造方法只能在对象创建时调用,普通方法可以通过对象实例随时调用。可能还需要提到构造方法的重载,即同一个类可以有多个参数不同的构造方法,比如Student2的无参和有参构造。这样可以根据不同的需求初始化对象。 还要注意构造方法中的this关键字的使用,用于区分成员变量和参数,比如this.name= name,这样能正确赋值。 用户可能在实际编程中遇到问题,比如忘记写无参构造方法导致编译错误,或者构造方法中的初始化逻辑错误。这时候需要检查构造方法的定义和调用是否正确。总结一下,构造方法的作用是初始化对象,用法包括定义与类同名的方法,无返回值,通过new调用,可以重载,使用this来引用成员变量。同时要注意默认构造方法的规则,以及构造方法与普通方法的区别。</think>### Java构造方法的作用及用法 #### 一、构造方法的核心作用 1. **对象初始化** 构造方法在创建对象时被自动调用,用于初始化对象的成员变量。例如,引用[2]中的`Student2`类通过有参构造方法为`age`赋值,而无参构造方法则赋予默认值0[^2]。 2. **强制属性赋值** 若类未提供默认构造方法,且用户自定义了有参构造方法,则必须通过参数初始化对象。例如,引用[3]中的`Student`类若未定义无参构造方法,直接调用`new Student()`会报错[^3]。 #### 二、构造方法的具体用法 1. **定义格式** 构造方法名必须与类名一致,且无返回值(包括`void`)。例如: ```java public class Person { public Person() {} // 无参构造方法 public Person(String name) { ... } // 有参构造方法 } ``` 2. **调用方式** 构造方法只能通过`new`操作符调用: ```java Student2 stu1 = new Student2(); // 调用无参构造方法 Student2 stu2 = new Student2(18); // 调用有参构造方法 ``` 3. **默认构造方法规则** - 若未显式定义任何构造方法Java会自动生成一个无参空构造方法[^1]。 - 若已定义有参构造方法,则需显式添加无参构造方法(如引用[3]中的注释示例)[^3]。 4. **构造方法重载** 支持通过不同参数列表实现多种初始化方式,例如: ```java public class Book { public Book() { ... } public Book(String title) { ... } public Book(String title, int page) { ... } } ``` #### 三、构造方法与普通方法的区别 | 特性 | 构造方法 | 普通方法 | |---------------|------------------------------|------------------------| | **名称** | 必须与类名相同 | 自定义 | | **返回值** | 无 | 必须有(包括`void`) | | **调用方式** | 仅通过`new`调用 | 对象实例调用 | | **用途** | 对象初始化 | 执行具体功能 | #### 四、实际应用示例 ```java public class Car { private String brand; private int price; // 无参构造方法(默认初始化) public Car() { brand = "Unknown"; price = 0; } // 有参构造方法(灵活赋值) public Car(String brand, int price) { this.brand = brand; this.price = price; } } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值