引用类型

学习java第一天总结

点点圈 提交于 2020-03-11 23:46:16
一,java注重大小写,一个源文件中只能(并非必须要有)有一个publick类,这个public类的类名字一定要和文件名是一样的。其中类名首字母要求均大写,而成员变量,局部变量,和静态类内变量都要求单词首字母小写后面单词的首字母要大写,而类方法要求为小写。 二,类型方面, 有六个数字类型(整型:byte(8),short(16),int(32),long(64),浮点型:float(32),double(64))都是有符号的,char为一个16位的字符,使用unicode,boolead类型只有两种结果,默认为false,这样就总共有8种内置基本类型,这些基本类型定义于java.lang中。 另外java还提供引用类型。初始化float时必须加后缀f,初始化double必须加后缀d或D。数组和对象都是引用类型,所有引用类型默认值为null,数组是存放在堆上的。 还有一个void类型 三,关于变量,只有局部变量,类内成员变量,类内静态变量。其中局部变量是没有默认值的,使用时必须要初始化,未初始化无法编译,同时如果只声明,不使用并不会报错。另外两种变量有默认值,都可以在声明或类构造方法中初始化,其中类内静态变量还可以在静态语句块中初始化。对比c++,少了全局变量,静态函数内变量,文件内局部变量。同时java也没有全局函数的概念,一切均在类中。 类内静态变量可以使用classname

ThreadLocal及Java引用类型

99封情书 提交于 2020-03-09 19:33:33
一、引用类型 1、强引用(Strong Reference) 一般用到最多的是强引用 2、软引用(Soft Reference) 如果一个对象没有强引用,只有软引用,当JVM发现内存不够时,垃圾回收器便会回收这些对象 3、弱引用(Weak Reference) 如果一个对象只有弱引用时,每次垃圾回收都会被回收 4、幻影引用(Phantom Reference) 如果一个对象仅持有幻影引用,那么它就和没有引用指向它一样,在任何时候该对象都可能被垃圾回收器回收。 幻影引用与软引用和弱引用的区别在于幻影引用必须和引用队列ReferenceQueue一起使用,幻影引用可以用来跟踪对象被回收的活动,因为当垃圾回收器准备回收一个对象的时候,如果发现它还有幻影引用,就会在回收之前,把这个幻影引用加入到与之关联的引用队列中去。 这样,程序通过判断引用队列中是否已经加入了幻影引用,来了解被引用对象是否将要被垃圾回收器回收,如果发现某个幻影引用已经被加入到引用队列,那么就可以在引用对象被回收之前采取必要的行动。 二、ThreadLocal 1、简介 ThreadLocal使用了弱引用,在一定程度上可以防止内存泄露。 2、ThreadLocal.ThreadLocalMap 此map使用的key是经过WeakReference包装的ThreadLocal对象

JDK1.2之后的四种引用类型

扶醉桌前 提交于 2020-03-09 11:03:24
JDK1.2之后的四种引用类型 背景 内容完全参考《深入理解Java虚拟机-周志明》 区别于之前的引用和非引用,需要描述这样一类对象:当内存空间足够时,则能保留在内存中;如果内存空间在进行垃圾回收之后还是非常紧张,则抛弃这些对象。很多系统的缓存功能符合这样的应用场景。 定义 强引用(Strong Reference) :在程序代码之中普遍存在的,类似于“Object obj=new Object()”这类引用,只要强引用还存在,垃圾回收期永远不会回收掉被引用的对象。 软引用(Soft Reference) :用来描述一些还有用但非必需的对象。在即将发生内存溢出之前,会对这些对象列入垃圾回收范围进行二次垃圾回收。如果这次回收还没有足够的内存,才会抛出内存溢出异常。 弱引用(Weak Reference) :强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集发生之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。 虚引用(Phantom Reference) :最弱的引用关系。一个对象是否有虚引用的存在,完全不会对其生命时间构成影响,也无法通过虚引用来取得一个对象的实例。使用虚引用的唯一目的就是,能在这个对象被收集器回收时收到一个系统通知。 来源: CSDN 作者: 一厘米光亮 链接: https://blog.csdn.net

C# 特性复习-泛型

六月ゝ 毕业季﹏ 提交于 2020-03-09 08:04:06
泛型,.NET的这个特性相信大家都已经很熟悉了,提起泛型,不能不首先提到C++中的模板,C++中模板的引入大大提高了代码的重用性,因此也得到了许多程序员的喜爱。因此,在同为强类型语言平台的.NET 2.0和Java 1.5中,它们也都不约而同的引入了泛型的对语言和平台的支持。不过虽然三种语言最终都提供了将类型参数化的功能,然而这个功能在三个平台或语言中的实现却大大不同。相对来说,C++的模板功能是三者中最为强大的,不过由于.Net和Java对类型安全和稳定性要求更高,它们对泛型的支持要稍微简单,不过即使如此,二者对泛型特性的实现也引起了两个阵营中程序员们的争论,不过最终普遍认为Java的伪泛型(擦拭法)要比.NET的JIT级别的真正的泛型性能要差(java仍然有装箱,拆箱操作)。当然这些是后话,下面我们来看看.NET的泛型到底如何使用吧! 基本介绍 .NET 2.0以后以后支持在很多类型上使用泛型,包括类、结构、接口、委托和方法成员,在这些类型上使用泛型和在类上使用是一样的。它甚至支持同一个接口但不同泛型类型的实现,这有点类似重载在类级别的实现。最后.NET允许你同时定义多个泛型类型。 在泛型方法中的泛型类型基本跟在类中使用情况一样,不过泛型方法有一个方便程序员的地方就是它的类型推断功能,这意味着程序员可以即能和使用普通方法一样使用这些方法,同时又能享受泛型带来的方便。e.g.

JVM概念总结:数据类型、堆与栈

谁都会走 提交于 2020-03-08 14:40:46
  Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;   引用类型的变量保存引用值,引用值代表了某个对象的引用而不是对象的本身,对象的本身存放在这个引用值所标示的地址的位置。   基本的数据类型包括:byte,short,int,long,float,double,boolean,returnAddress   引用类型包括:类类型,接口类型和数组。   堆与栈:堆与栈是程序运行的关键。   栈是运行时的单位,而堆是存储的单位。   栈解决程序的运行问题,即程序如何运行,或者说如何处理数据;堆解决的是数据存储问题,即数据怎么放,放在哪 在Java中一个线程就会对应有一个线程栈与之对应,这点很容易理解,因为不同的线程执行的逻辑不同,因此需要一个独特的线程栈。而堆是所有的线程所共享的。栈因为是运行的单位,因此里面存储的信息都是跟当前线程相关的。包括局部变量、程序的运行状态,方法的返回值等等,而堆只负责存储对象的信息。 为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗? 第一,从软件设计的角度看,栈代表了处理逻辑,而堆代表了数据。这样分开,使得处理逻辑更为清晰。分而治之的思想。这种隔离、模块化的思想在软件设计的方方面面都有体现。 第二,堆与栈的分离,使得堆中的内容可以被多个栈共享(也可以理解为多个线程访问同一个对象)

c#中通过值和引用传递参数(downmoon)

自古美人都是妖i 提交于 2020-03-08 06:18:53
c#中通过值和引用传递参数(downmoon) 在 C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员(方法、属性、索引器、运算符和构造函数)更改参数的值,并保持该更改。若要通过引用传递参数,请使用 ref 或 out 关键字。为简单起见,本主题的示例中只使用了 ref 关键字。有关 ref 和 out 之间的差异的信息,请参见、 使用 ref 和 out 传递数组 。 本主题包括下列章节: 传递值类型参数 传递引用类型参数 它还包括以下示例: 示例 演示 是否使用 ref 或 out 1 通过值传递值类型 否 2 通过引用传递值类型 是 3 交换值类型(两个整数) 是 4 通过值传递引用类型 否 5 通过引用传递引用类型 是 6 交换引用类型(两个字符串) 是 传递值类型参数 值类型 变量直接包含其数据,这与 引用类型 变量不同,后者包含对其数据的引用。因此,向方法传递值类型变量意味着向方法传递变量的一个副本。方法内发生的对参数的更改对该变量中存储的原始数据无任何影响。如果希望所调用的方法更改参数值,必须使用 ref 或 out 关键字通过引用传递该参数。为了简单起见,以下示例使用 ref 。 示例 1:通过值传递值类型 下面的示例演示通过值传递值类型参数。通过值将变量 myInt 传递给方法 SquareIt

C#中通过值和引用传递参数

China☆狼群 提交于 2020-03-08 06:17:41
在 C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员(方法、属性、索引器、运算符和构造函数)更改参数的值,并保持该更改。若要通过引用传递参数,请使用 ref 或 out 关键字。为简单起见,本主题的示例中只使用了 ref 关键字。有关 ref 和 out 之间的差异的信息,请参见、 使用 ref 和 out 传递数组 。 本主题包括下列章节: · 传递值类型参数 · 传递引用类型参数 它还包括以下示例: 示例 演示 是否使用 ref 或 out 1 通过值传递值类型 否 2 通过引用传递值类型 是 3 交换值类型(两个整数) 是 4 通过值传递引用类型 否 5 通过引用传递引用类型 是 6 交换引用类型(两个字符串) 是 传递值类型参数 值类型 变量直接包含其数据,这与 引用类型 变量不同,后者包含对其数据的引用。因此,向方法传递值类型变量意味着向方法传递变量的一个副本。方法内发生的对参数的更改对该变量中存储的原始数据无任何影响。如果希望所调用的方法更改参数值,必须使用 ref 或 out 关键字通过引用传递该参数。为了简单起见,以下示例使用 ref 。 示例 1 :通过值传递值类型 下面的示例演示通过值传递值类型参数。通过值将变量 myInt 传递给方法 SquareIt 。方法内发生的任何更改对变量的原始值无任何影响。 //

泛型的三种形式

≡放荡痞女 提交于 2020-03-06 16:07:23
以下内容都是理论加实验得来的,如有错误,烦请评论区纠正谢谢 。 说到泛型大家基本都知道< T >这个符号,类似的< E > < K >等等就不去谈了,其实用起来都一样的,那么这个< T >是用来干嘛的,其实啊这是泛型三种形式的声明标识。 三种形式分别是 :泛型类,泛型接口,泛型方法,目前就这三种别扯别的了。 泛型类 在类名的后面加上< T >这就是泛型类了,这是最简单的泛型类 < T > 和 T 区别 < T >是泛型三种形式的声明标志,T 代表的是引用类型,具体T代表的是哪个引用类型由两种途径决定, 第一种是在泛型(类实例化/接口被实现)时给< T >中的 T 替换成具体的引用类型,这样实例化对象的(属性类型/方法中的参数类型)就和之前替换的类型一致,如果(赋值/传参)的引用类型不一致就会报错。还有一种后面讲 泛型类中的方法和泛型方法的区别 他们的区别在于有没有< T >,泛型类中的方法前面已经有了,在第二,三张图中getdata方法就是,再来看看泛型方法 这里的getdata才是泛型方法 现在看T获取的引用类型的第二中表示 就是赋值,或者传参,a属性赋值一个Integer类型的值,方法中的o参数我们传入String类型的值,再用getClass方法获取他们的类模板,看运行结果 还有一个泛型接口就不说了,和类差不多,自己去悟,这些内容没有点出泛型存在意义

JavaScript引用类型

折月煮酒 提交于 2020-03-06 13:45:34
引用类型虽然看起来和类很相似,但是它们却是不同的概念,引用类型的值,也就是对象是引用类型的一个实例。在Js中引用类型主要有Object,Array,Date,正则,Function等。 数组Array   在Js中数组可以存储任意的数据,而且它的大小是可以动态调整的。创建数组可以使用构造函数的方式也可以使用字面量的形式,另外可以使用concat从一个数组中复制一个副本出来。 方法:    length 数组的长度    toString 将数组转换为一个字符串,并且返回这个字符串,相当于是调用了下join(',')    join 把数组中的所有元素放入一个字符串中,元素通过指定的分隔符进行分割的。如果省略参数,则会使用逗号作为分隔符。    push 向数组末尾添加一个或者多个元素,并返回新的长度。    pop 删除数组中的最后一项,把数组的长度减1,并且返回它被删除元素的值,如果数组变为空,则该方法不改变数组,返回undefine值。    shift 删除数组的第一项,返回值同pop    unshift 是向数组的开头添加一个或者更多元素,并返回新的长度。    reverse 倒序    concat 该方法用于连接2个或者多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。如果连接多个数组,使用逗号隔开。    sort 该方法是对数组的元素进行排序

浅拷贝和深拷贝

谁说胖子不能爱 提交于 2020-03-06 13:42:11
在学习原型模式时,发现对浅克隆和克隆的理解不深刻,在此记录下学习心得 概念理解: x.clone()!=x, 浅拷贝和深拷贝对属性的拷贝,如下表 基本类型属性 引用类型属性 引用类型备注 浅拷贝 拷贝值 拷贝引用,指向原引用的地址 如果修改引用的属性,都会影响另外一个对像 深拷贝 拷贝值 拷贝引用和引用的内容,并创建新的实例,指向新的地址 可以理解,创建一个新的对象,把原对象的内容复制到新对象中 代码解析 有一个Husband类 public class Husband {public int age; public Husband(int age){this.age = age; } public Husband(Husband p){ //拷贝构造方法this.age = p.age; } 还有一个Wife类 public class Wife { Husband husband; public Wife(Husband Husband){ this.husband = Husband; } public Wife(Wife wife){ //拷贝构造方法 this(wife.husband); } 测试是在Wife类进行, 执行拷贝Wife,和Husband Husband h = new Husband(24) Wife f1 = new Wife(h); Wife f2