精华内容
下载资源
问答
  • Java引用类型有哪些

    万次阅读 2019-07-05 16:48:32
    其中,引用数据类型在存储堆中对需要引用的对象进行引用,引用是Java面向对象的一个特点,在Java入门中,我们会接触到四种Java的引用类型,接下来就说说这四种Java引用类型有哪些吧: 1、Java中哪几种引用?...

     

    动力节点Java培训最新上线Java实验班,等你来测试自己适不适合学习Java编程哦!

     

    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();

     

    SoftReference<Book>softReference=newSoftReference<>(newBook(),referenceQueue);

     

    Bookbook=softReference.get();

     

    Referencereference=referenceQueue.poll();

     

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

     

      弱引用-WeakReference

     

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

     

    ReferenceQueuereferenceQueue=newReferenceQueue();

     

    WeakReference<Book>weakReference=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与之关联还有什么存在的价值呢?

     

    PhantomReference<Book>phantomReference=newPhantomReference<>(newBook(),referenceQueue);

     

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

     

    Referencereference=referenceQueue.poll();

     

     

    展开全文
  • 【js中的基本类型和引用类型有哪些什么区别?】 每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析前端知识/技能,本篇...

    这里是修真院前端小课堂,本篇分析的主题是

    【js中的基本类型和引用类型有哪些,有什么区别?】

    每篇分享文从

    【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

    八个方面深度解析前端知识/技能,本篇分享的是:

    【js中的基本类型和引用类型有哪些,有什么区别?】

     

     

    大家好,我是IT修真院郑州分院第8期学员,一枚正直善良的web程序员。

    今天给大家分享一下,修真院官网js任务1中可能会使用到的知识点:

     

    1.背景介绍

     

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

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

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

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

     

    2.知识剖析

     

    1.Number

    Number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后面至少有一位数字)两种值。
    NaN:非数字类型。两大特点:1.涉及到的 任何关于NaN的操作,都会返回NaN。2. NaN不等于自身。

    isNaN() 函数用于检查其参数是否是非数字值

    2.String

    字符串是存储字符的变量,由双引号(" ")或单引号(' ')表示
    字符串有length属性。可以取得字符串的长度。

    字符串转换:转型函数String(),适用于任何数据类型(null,undefined 转换后为null和undefined);toString()方法(null,undefined没有toString()方法)。

    3.Boolean

    只有两个值,true和false;在运算中true=1,false=0。

    4.Undefined

    只有一个值,即undefined值。使用var声明了变量,但未给变量初始化值,那么这个变量的值就是undefined。

    5.Null

    也是只有一个值的数据类型,null值表示一个空对象指针,使用typeof操作符检测null值会返回"object"

    6.常见的引用类型

    Object类型:带有属性和方法的特殊数据类型。
    Array:是使用单独的变量名来存储一系列的值。

    Function:函数类型在JavaScript中也是对象。

    7.基本类型和引用类型的区别

    基本类型的变量是存放在栈区的(栈区指内存里的栈内存);
    引用类型的值是同时保存在栈内存和堆内存中的对象;
    基本类型的比较是值的比较;
    引用类型的比较是引用的比较;

     

    3.常见问题

     

    4.解决方案

    5.编码实战


    6.扩展思考

    1.Null和Undefined的区别?

    null和undefined基本同义,只有一些细微的差别。

    null表示“没有对象”,即该处不应该有值。

     

    (1) 作为函数的参数,表示该函数的参数不是对象。

    (2) 作为对象原型链的终点。

    undefined表示缺少值,此处应该有值,但是还没有定义。

     

    (1)变量被声明了,但没有赋值时,就等于undefined。

    (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

    (3)对象没有赋值的属性,该属性的值为undefined。

    (4)函数没有返回值时,默认返回undefined。

    2.NaN是什么?

    NaN表示一个元素可不是数值,isNaN()用于判断元素是否为数字的函数,是的话返回false,不是数字返回true。NaN和任何值比较都不相等。

    3.什么是栈内存,什么是堆内存,两者有什么区别?

    栈内存:由程序自动向操作系统申请分配以及回收,速度快,使用方便,但程序员无法控制。若分配失败,则提示栈溢出错误。注意,const局部变量也储存在栈区内,栈区向地址减小的方向增长。

    堆内存:程序员向操作系统申请一块内存,当系统收到程序的申请时,会遍历一个记录空闲内存地址的链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。分配的速度较慢,地址不连续,容易碎片化。此外,由程序员申请,同时也必须由程序员负责销毁,否则则导致内存泄露

    • 关于堆和栈区别的比喻:

    堆和栈的区别可以引用一位前辈的比喻来看出:使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

     


    更多讨论

    PPT:https://it-xzy.github.io/WEB-NEW/2018-4-28-C%E7%BB%84-js1.html

    腾讯视频:https://v.qq.com/x/page/d0640dcrofz.html

    展开全文
  • Java 中引用类型有哪些

    千次阅读 2019-10-19 22:45:47
    Java 中引用类型有哪些 Java中对象的引用分为四种级别,这四种级别由高到低依次为:强引用、软引用、弱引用和虚 引用。 强引用( StrongReference) 如果一个对象被被人拥有强引用,那么垃圾回收器绝会回收它。当...

    Java 中引用类型都有哪些

    Java中对象的引用分为四种级别,这四种级别由高到低依次为:强引用、软引用、弱引用和虚 引用。

    强引用( StrongReference)

    如果一个对象被被人拥有强引用,那么垃圾回收器绝会回收它。当内存空间不足, Java 虚拟机宁愿抛出 OutOfMemoryError 错误,使程序异常终止,也不会靠随意
    回收具有强引用的对象来解决内存不足问题。

    Java的对象是位于 heap 中的, heap 中对象有强可及对象、软可及对象、弱可及对象、虚可及对象和不可到
    达对象。应用的强弱顺序是强、软、弱、和虚。对于对象是属于哪种可及的对象,由他的最强的引用决定。如下代
    码:

    
     String abc=new String("abc"); //1
     SoftReference<String> softRef=new SoftReference<String>(abc); //2
     WeakReference<String> wea kRef = new WeakReference<String>(abc); //3
     abc=null; //4
     softRef.clear();//5
    

    第一行在
    heap 堆中创建内容为“ abc ”的对象,并建立 abc 到该对象的强引用,该对象是强可及的。
    第二行和第三行分别建立对
    heap 中对象的软引用和弱引用,此时 heap 中的 abc 对象已经有 3 个引用,显然此
    时 abc 对象仍是强可及的。
    第四行之后
    heap 中对象不再是强可及的,变成软可及的。第五行执行之后变成弱可及的。
    软引用( SoftReferenc)如果一个对象只具有软引用,那么如果内存空间足够,垃圾回收器就不会回收它,如果内存空间不足了,就回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的速缓存。
    软引用可以和一个引用队列(
    ReferenceQueue )联合使用,如果软引用所引用的对象被垃圾回收 Java 虚
    拟机就会把这个软引用加入到与之关联的引用队列中。

    软引用是主要用于内存敏感的高速缓存。jvm 报告内存不足之前会清除所有的软引用,这样以来 gc 就可能收集软可 及的对象,可能解决内存吃紧问题,避免内存溢出。什么时候会被收集取决于 gc 的算法和 gc 运行时可用内存的大小。当 gc 决定要收集软引用时执行以下过程 以上面的 softRef 为例:

    1. 首先将 softRef 的 referent abc )设置为 null ,不再引用 heap 中的 new String(“abc”) 对象。
    2. 将 heap 中的 new String(“abc”) 对象设置为可结束的 (finalizable)
    3. 当 heap 中的 new String(“abc”) 对象的 finalize() 方法被 运行而且该对象占用的内存被释放, softRef被添加到它的 ReferenceQueue.注意 对 ReferenceQueue 软引用和弱引用可以有可无,但是虚引用必须有。

    弱引用与软引用的区别在于 :只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过由于垃圾回收器是一个优先级很低的线程, 因此不一定会很快发现那些只具有弱引用的对象。

    弱引用

    可以和一个引用队列( ReferenceQueue )联合使用,如果弱引用所引用的对象被垃圾回收 Java 虚拟机就会把这个弱引用加入到与之关联的引用队列中。

    虚引用( PhantomReferenc)

    虚引用 顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收。虚引用主要用来跟踪对象被垃圾回收的活动。
    虚引用与软引用和弱引用的一个区别在于:
    虚引用必须和引用队列( ReferenceQueue )联合使用 。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。程序如果发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

    展开全文
  • 无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象是否引用链可达,判定对象是否存活都和“引用”离不开关系。如今,将引用分为强引用、软引用、弱引用和虚引用4种,强度依次减弱。 1、强...

    无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象是否引用链可达,判定对象是否存活都和“引用”离不开关系。如今,将引用分为强引用、软引用、弱引用和虚引用4种,强度依次减弱。

    1、强引用:发生GC的时候不会被回收。
    2、软引用:有用但不是必须的对象,在发生内存溢出之前会被回收。
    3、弱引用:有用但不是必须的对象,在下一次GC的时候会被回收。
    4、虚引用:无法通过虚引用获得对象,用PhantomReference实现虚引用,虚引用的用途是在GC时返回一个通知。

    展开全文
  • java中引用数据类型有哪些

    万次阅读 多人点赞 2016-07-18 09:45:37
    Java中俩种数据类型,其中主要8中基本数据类型引用数据类型,除了8中基本数据类型以外都是引用数据类型,8中基本数据类型分别是byte,short,int,long,char,boolean,float,double,具体如下:1、boolean:数据值...
  • 引用类型有:Object类型,Array类型,Date类型,RegExp类型(正则),function类型。还有基本包装类型,也是一种引用类型,ECMAScript还提供了 3个特殊的引用类型:Boolean、Number和String。 2.知识剖析 基本类型 ...
  • C#中引用类型和值类型分别有哪些

    万次阅读 2018-06-15 02:12:58
    C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。 数组的元素,不管是引用类型还是值类型,都存储在托管堆上。 引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。为了方便,本文简称...
  • 1、js的基本类型有哪些? 基本数据类型:按值访问,可...2.引用类型有哪些? 引用类型:当复制保存着对象的某个变量时,操作的是对象的引用,但在为对象添加属性时,操作的是实际的对象。引用类型值指那些可能为多...
  • JAVA中的引用四种引用类型

    千次阅读 2020-08-30 10:09:38
    关于值类型和引用类型的话题,C++、JAVA、python、go、C#等等高级语言都相关的概念,只要理解了其底层工作原理,可以说即使是不同的语言,在面试学习工作实践中都可以信手拈来(不要太纠集语言),当然此处我选择了...
  • Java中的四种引用类型哪些

    千次阅读 2020-07-01 23:10:51
    从一开始学习Java我们就知道Java的数据类型一般两种,一种是基本数据类型,另一种是引用...Java中主要包括了四种引用类型,分别是:强引用,软引用,弱引用以及虚引用。 一、强引用 强引用是一种最常见的引用形式,
  • JavaScript数据类型,包括原始类型和引用类型有哪些? 原始类型五个 Number类型 专门保存数字的类型,可用于进行数学计算等的数值 String类型 专门用来保存字符串的类型;” “,用来存储字符串类型的文本. ...
  • C# 哪些引用类型??

    千次阅读 2019-10-09 09:33:01
    引用类型:类class,对象object,数组type [],字符串 string,委托delegate,接口interface 值类型:整数int,浮点数float double,布尔bool,字符char,结构struct,枚举enum ...
  • Java开发者肯定都很熟悉java中的4种引用类型,它们从强到弱分别是:强引用、软引用、弱引用和虚引用,下面我们详细看看这些引用类型
  • golang中的值类型和引用类型

    千次阅读 2019-08-20 20:48:29
    值类型与引用类型 值类型 值类型:这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中。当使用等号=将一个变量的值赋给另一个变量时,如 j = i ,实际上是在内存中将 i 的值进行了拷贝。可以通过 &...
  • JS数据类型引用数据类型

    千次阅读 2019-06-28 16:46:51
    1、引用数据类型也就是对象数据...2、引用类型的值可以改变: let person = {name: 'lisa'} person.name = 'Jane' // 通过修改对象属性值更改对象 console.log(person) // 输出:{name: "Jane"} person.age =...
  • c#中提供的数据类型两类,值类型和引用类型。 概念上,值类型,直接存储其值;引用类型,存储对其值的引用。 内存空间上,值类型在栈中操作;引用类型在堆中分配存储单元。 其中对于栈和堆的理解参考知乎。 ...
  • Java四种引用类型

    万次阅读 多人点赞 2019-05-12 19:01:34
    文章目录引用类型简介对象可达性判断GC Roots对象可达性判断可达性状态类型可达性判断规则状态转换Reference类定义状态变化四种引用类型实现强引用FinalReference软引用SoftReference弱引用WeakReference虚引用...
  • java基本类型与引用类型

    万次阅读 多人点赞 2018-01-04 17:30:32
    java基本类型与引用类型 目录 java基本类型与引用类型 目录 一基本数据类型 二引用类型 三基本类型与引用类型的区别 默认值 内存分配 自动装箱自动拆箱 自动装箱拆箱带来的问题 程序的性能 空指针异常 ...
  • 值类型和引用类型

    千次阅读 热门讨论 2019-01-02 20:18:16
    注:引用类型当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间,当使用new 创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的小片空间中。...
  • 两者之间的关系特点:一、从概念方面来说基本数据类型:变量名指向具体的数值引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值二、从内存构建方面来说基本数据类型:变量在声明之后java就会立刻分配给...
  • 值类型和引用类型有什么区别?

    千次阅读 2018-03-11 17:22:15
    string,类等皆为引用类型。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。此时该值存储于栈上;int i=10;执行之前为默认一个值0。引用类型定义时在栈上开辟一个空间用来存放其在堆上的地址,当赋值或者...
  • 专注于Java领域优质技术号,欢迎关注作者:absfree本篇文章尝试从What、Why、How这三个角度来探索Java中的弱引用,帮助大家理解Java中弱引用的定义、基本使用场景和使用方法。由于个人水平有限,叙述中难免存在不...
  • 引用类型数组

    千次阅读 2019-03-11 19:48:26
    什么叫引用类型数组? 基本类型数组的元素中放的都是基本数据类型(int等)。 引用类型数组的元素中放的是从基本类型构造而来的类和其他复杂数据类型的地址。 两种类型数组的图解 基本类型数组:arr是引用,放在栈...
  • Golang的4种传递引用类型

    千次阅读 2019-10-11 10:36:42
    Go语言4中类型是传递引用的,这在赋值或者作为函数传参数时,都是浅拷贝,分别是: interface slice map chan 下面给出代码详细说明: package main import "fmt" type Foo interface { foo() setName...
  • java中的五种引用数据类型(对象类型

    万次阅读 多人点赞 2019-01-20 14:38:23
    Java 5种引用类型(对象类型):类 接口 数组 枚举 标注 引用类型:底层结构和基本类型差别较大 JVM的内存空间: (1). Heap 堆空间:分配对象 new Student() (2). Stack 栈空间:临时变量 Student stu (3)...
  • js基本类型与引用类型

    千次阅读 多人点赞 2018-06-15 11:21:22
    引用类型: Object首先了解一个概念:栈内存与堆内存---这是两种不同的内存分配方法一般代码逻辑,简单变量,结构体都是放在栈中;而对象,以及被装箱的数据放在堆中栈内存中存放地址指向堆内存中的对象基本类型就是...
  • Java 数据类型(基本数据类型引用数据类型)

    千次阅读 多人点赞 2013-12-11 23:40:11
    Java 数据类型(基本数据类型引用数据类型) 简单的介绍
  • 形参的基本类型和引用类型的调用

    千次阅读 2019-06-10 17:29:24
    引用类型:形式参数的改变直接影响实际参数。 数据类型:基本数据类型,接口,数组,类。 形式参数是基本类型: class Demo{ public int sum(int a,int b){ return a + b; } } 形式参数是引用类型...
  • 一、JAVA中的数据类型分为分为两大类: 1.基本数据类型(八种): 类型名称 占用字节 数据范围 默认值 字 节 byte 1 -128 ~ 127 0 短整型 short 2 -32768 ~ 32767 0 整 型 int 4 -2^31 ~ 2^31 - 1 0 ...
  • JS里面哪些类型是引用类型? Object类型都是引用类型.(function,array,date,regexp..) JS哪些类型是值传递? 基本类型都是值传递.值传递就是重新copy一个副本进行传递. 如何把值类型的变量以引用类型的方式进行传递?...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,983,541
精华内容 793,416
关键字:

引用有哪些类型