JAVA应用】引用类型有哪些?有什么区别?

2020-12-02 14:57发布

8条回答
summer
2楼 · 2020-12-02 18:08

引用类型有:Object类型,Array类型,Date类型,RegExp类型(正则),function类型。还有基本包装类型,也是一种引用类型,ECMAScript还提供了 3个特殊的引用类型:Boolean、Number和String。

小叮当
3楼 · 2020-12-02 19:59

Java的引用类型:

引用类型是一个对象类型,值是什么呢?它的值是指向存空间的引用,就是地址,所容指向的内存中保存着变量所表示的一个值或一组值。 

Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。

引用类型和原始类型的行为完全不同,并且它们具有不同的语义。

引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。

对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。同时为了面向对象操作的一致性。

这些基本类型都有相应的封装类型:Integer、Short、Long、Byte、Float、Double、Character等。

Java的4种引用类型:

他们分别是其引用(StrongReference),软引用(SoftReference),弱引用(WeakReference)以及PhantomReference(虚引用),他们被GC回收的可能性从大到小排列。


无需指教
4楼 · 2020-12-03 08:40

Java类型一般有两种,即基本数据类型与引用数据类型。其中,引用数据类型在存储堆中对需要引用的对象进行引用,引用是Java面向对象的一个特点,在Java入门中,我们会接触到四种Java的引用类型,接下来就说说这四种Java引用类型有哪些吧:

 

 

1、Java中有哪几种引用?它们的含义和区别是什么?

 

  从JDK1.2开始,Java中的引用类型分为四种,分别是:

 

①强引用(StrongReference)

 

②软引用(SoftRefernce)

 

③弱引用(WeakReference)

 

④虚引用(PhantomReference)

 

  强引用-StrongReference

 

  这种引用是平时开发中最常用的,例如Stringstrong=newString("StrongReference"),当一个实例对象具有强引用时,垃圾回收器不会回收该对象,当内存不足时,宁愿抛出OutOfMemeryError异常也不会通过回收强引用的对象,因为JVM认为强引用的对象是用户正在使用的对象,它无法分辨出到底该回收哪个,强行回收有可能导致系统严重错误。

 

  软引用-SoftReference

 

  如果一个对象只有软引用,那么只有当内存不足时,JVM才会去回收该对象,其他情况不会回收。软引用可以结合ReferenceQueue来使用,当由于系统内存不足,导致软引用的对象被回收了,JVM会把这个软引用加入到与之相关联的ReferenceQueue中。

 

ReferenceQueuereferenceQueue=newReferenceQueue();

 

SoftReferencesoftReference=newSoftReference<>(newBook(),referenceQueue);

 

Bookbook=softReference.get();

 

Referencereference=referenceQueue.poll();

 

  当系统内存不足时,触发gc,这个Book就会被回收,reference将不为null。

 

  弱引用-WeakReference

 

  只有弱引用的对象,当JVM触发gc时,就会回收该对象。与软引用不同的是,不管是否内存不足,弱引用都会被回收。弱引用可以结合ReferenceQueue来使用,当由于系统触发gc,导致软引用的对象被回收了,JVM会把这个弱引用加入到与之相关联的ReferenceQueue中,不过由于垃圾收集器线程的优先级很低,所以弱引用不一定会被很快回收。下面通过一个主动触发gc的例子来验证此结论。

 

ReferenceQueuereferenceQueue=newReferenceQueue();

 

WeakReferenceweakReference=newWeakReference(newBook(),referenceQueue);

 

Bookbook=softReference.get();

 

System.gc();

 

//Runtime.getRuntime().gc();

 

Referencereference=referenceQueue.poll();

 

  当然这不是每次都能复现,因为我们调用System.gc()只是告诉JVM该回收垃圾了,但是它什么时候做还是不一定的,但就我测试来看,只要多写几次System.gc(),复现的概率还是很高的。

 

  虚引用-PhantomReference

 

  如果一个对象只有虚引用在引用它,垃圾回收器是可以在任意时候对其进行回收的,虚引用主要用来跟踪对象被垃圾回收器回收的活动,当被回收时,JVM会把这个弱引用加入到与之相关联的ReferenceQueue中。与软引用和弱引用不同的是,虚引用必须有一个与之关联的ReferenceQueue,通过phantomReference.get()得到的值为null,试想一下,如果没有ReferenceQueue与之关联还有什么存在的价值呢?

 

PhantomReferencephantomReference=newPhantomReference<>(newBook(),referenceQueue);

 

Bookbook=phantomReference.get();//此值为null

 

Referencereference=referenceQueue.poll();

 

 


樱田妮妮NiNi
5楼 · 2020-12-03 10:03

Java类型一般有两种,即基本数据类型与引用数据类型。其中,引用数据类型在存储堆中对需要引用的对象进行引用,引用是Java面向对象的一个特点,在Java入门中,我们会接触到四种Java的引用类型,接下来就说说这四种Java引用类型有哪些吧:

 1、Java中有哪几种引用?它们的含义和区别是什么?

 从JDK1.2开始,Java中的引用类型分为四种,分别是:

 ①强引用(StrongReference)

 ②软引用(SoftRefernce)

 ③弱引用(WeakReference)

 ④虚引用(PhantomReference)

强引用-StrongReference

 这种引用是平时开发中最常用的,例如Stringstrong=newString("StrongReference"),当一个实例对象具有强引用时,垃圾回收器不会回收该对象,当内存不足时,宁愿抛出OutOfMemeryError异常也不会通过回收强引用的对象,因为JVM认为强引用的对象是用户正在使用的对象,它无法分辨出到底该回收哪个,强行回收有可能导致系统严重错误。

 软引用-SoftReference

 如果一个对象只有软引用,那么只有当内存不足时,JVM才会去回收该对象,其他情况不会回收。软引用可以结合ReferenceQueue来使用,当由于系统内存不足,导致软引用的对象被回收了,JVM会把这个软引用加入到与之相关联的ReferenceQueue中。

 当系统内存不足时,触发gc,这个Book就会被回收,reference将不为null。弱引用-WeakReference只有弱引用的对象,当JVM触发gc时,就会回收该对象。与软引用不同的是,不管是否内存不足,弱引用都会被回收。弱引用可以结合ReferenceQueue来使用,当由于系统触发gc,导致软引用的对象被回收了,JVM会把这个弱引用加入到与之相关联的ReferenceQueue中,不过由于垃圾收集器线程的优先级很低,所以弱引用不一定会被很快回收。下面通过一个主动触发gc的例子来验证此结论。

当然这不是每次都能复现,因为我们调用System.gc()只是告诉JVM该回收垃圾了,但是它什么时候做还是不一定的,但就我测试来看,只要多写几次System.gc(),复现的概率还是很高的。

 

三岁奶猫
6楼 · 2020-12-03 10:45

Java中的引用类型分为四种,分别是:

 

①强引用(StrongReference)

 

②软引用(SoftRefernce)

 

③弱引用(WeakReference)

 

④虚引用(PhantomReference)

 

  强引用-StrongReference

 

  这种引用是平时开发中最常用的,例如Stringstrong=newString("StrongReference"),当一个实例对象具有强引用时,垃圾回收器不会回收该对象,当内存不足时,宁愿抛出OutOfMemeryError异常也不会通过回收强引用的对象,因为JVM认为强引用的对象是用户正在使用的对象,它无法分辨出到底该回收哪个,强行回收有可能导致系统严重错误。

 

  软引用-SoftReference

 

  如果一个对象只有软引用,那么只有当内存不足时,JVM才会去回收该对象,其他情况不会回收。软引用可以结合ReferenceQueue来使用,当由于系统内存不足,导致软引用的对象被回收了,JVM会把这个软引用加入到与之相关联的ReferenceQueue中。

弱引用-WeakReference

 

  只有弱引用的对象,当JVM触发gc时,就会回收该对象。与软引用不同的是,不管是否内存不足,弱引用都会被回收。弱引用可以结合ReferenceQueue来使用,当由于系统触发gc,导致软引用的对象被回收了,JVM会把这个弱引用加入到与之相关联的ReferenceQueue中,不过由于垃圾收集器线程的优先级很低,所以弱引用不一定会被很快回收。下面通过一个主动触发gc的例子来验证此结论。

虚引用-PhantomReference

 

  如果一个对象只有虚引用在引用它,垃圾回收器是可以在任意时候对其进行回收的,虚引用主要用来跟踪对象被垃圾回收器回收的活动,当被回收时,JVM会把这个弱引用加入到与之相关联的ReferenceQueue中。与软引用和弱引用不同的是,虚引用必须有一个与之关联的ReferenceQueue,通过phantomReference.get()得到的值为null,试想一下,如果没有ReferenceQueue与之关联还有什么存在的价值呢?


yjh
7楼 · 2020-12-03 16:52

你好!引用类型有:Object类型,Array类型,Date类型,RegExp类型(正则),function类型。还有基本包装类型,也是一种引用类型,ECMAScript还提供了 3个特殊的引用类型:Boolean、Number和String。

爱学习的小巴
8楼 · 2020-12-03 19:21

本数据类型:按值访问,可操作保存在变量中的实际的值。基本类型值指的是简单的数据段。

基本数据类型有这五种:Undefined、Null、String、Number、Boolean。

引用类型:当复制保存着对象的某个变量时,操作的是对象的引用,但在为对象添加属性时,操作的是实际的对象。引用类型值指那些可能为多个值构成的对象。引用类型值指那些可能为多个值构成的对象。

引用类型有这几种:object、Array、RegExp、Date、Function、特殊的基本包装类型(String、Number、Boolean)以及单体内置对象(Global、Math)。


引用类型有这几种:object、Array、RegExp、Date、Function、特殊的基本包装类型(String、Number、Boolean)以及单体内置对象(Global、Math)。

相关问题推荐

  • 回答 20

    100-199 用于指定客户端应相应的某些动作。 200-299 用于表示请求成功。 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 400-499 用于指出客户端的错误。 400 语义有误,当前请求无法被服务器理解。 401 当前请求需要用户验证...

  • 回答 5
    已采纳

    1、相同点(1)都是表现层框架,都是基于MVC设计模型(2)底层都离不开 Servlet API(3)处理请求的机制都是一个核心控制器2、不同点(1)SpringMVC的入口是Servlet,而Struts2的入口是Filter(2)SpringMVC是基于方法设计的,而Struts2是基于类(3)SpringMV...

  • 回答 22
    已采纳

    类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结...

  • 回答 23
    已采纳

    (1)idea启动时会有两个快捷方式,安装完后默认生成在桌面的是32位的idea的快捷方式,如果我们使用这个快捷方式运行大项目,一般都会很卡。解决方法是找到idea的安装目录,然后进入bin文件夹,找到名称为idea64的应用程序,右键他生成桌面快捷方式。以后每次...

  • 回答 12
    已采纳

    获取Map集合中所有的key可以通过map集合的keySet()方法获取例如:    Map map = new HashMap();    map.put(xx,xx); //存放数据    //.... 省略    Set set = map.keySet();    //可以通过迭代器进行测试    Iterator iter = set.iter...

  • 回答 4
    已采纳

    Java中有八种数据类型,基础数据类型分别是:byte,short,int,long,float,double,char,boolean,引用数据类型分别是:数组,类和接口。方法传参的时候我们有两种,一种是形式参数(定义方法时写的参数),一种是实际参数(调用方法时给的具体值)。首先...

  • 回答 15
    已采纳

    现在的架构很多,各种各样的,如高并发架构、异地多活架构、容器化架构、微服务架构、高可用架构、弹性化架构等,还有和这些架构相关的管理型的技术方法,如 DevOps、应用监控、自动化运维、SOA 服务治理、去 IOE 等等,还有很多。分布式架构其实就是分布式系...

  • 回答 10

    1、监控GC的状态使用各种JVM工具,查看当前日志,分析JVM参数的设置,分析堆内存快照和GC日志,根据实际的各区域的内存划分和GC的执行时间,判断是否需要进行优化2、分析结果、判断是否需要优化如果各项参数设置合理,系统没有超时的日志出现,GC频率也不高,...

  • 回答 17

    最基本的就是做开发了,可以做程序的后台开发,框架搭建等,也可以做前台的,就是做前台的展示页面,到后面也可以做项目管理,带团队。

  • 回答 16

    学习函数,面向对象,数组,SQLite数据库系统,java多线程技术,JB BOM ,CSS基础,Oracle,mybatis基础等等

  • 回答 10

    使用方法就是定义变量的类型,如 int a = 0 其中int就是变量类型,a就是变量,0就是a的值依次还有String(字符类型),double(小数类型)等

  • 回答 1

    Java中的常量的分类①、整数常量,所有整数②、小数常量,所有小数③、布尔型常量,较为特有,只有两个数值,true false ④、字符常量,将一个数字字母或符号用单引号(‘’)标识⑤、字符串常量,将一个或者多个字符用双引号()标识⑥、null常量,只有一...

  • 回答 8

    需要一个发短信的设备,比如短信猫。去网上找一下,有很多。短信猫的卖家可以给你提供java编程接口,但一般都是要收费。如果你不想额外花钱买java接口,你可以去搜一个叫做SMSLib的开源库。然后利用这个开源库或者卖家给你的接口来开发你的java程序。...

  • 回答 3

    java里面基本数据类型就int浮点型字符型和布尔转换的规则是byte,short,char——》int——》long——》float——》double还有什么强制类型转换是指低类型的转向高类型的和c差不多了

  • 回答 3

    byte short int long float double boolean char

没有解决我的问题,去提问