泛型的使用
概述
泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
泛型在类中的使用 例子
泛型在接口中 的使用
泛型在方法中的使用
private static T 方法名(T a, T b) {}
泛型限制类型
- 在使用泛型时, 可以指定泛型的限定区域 ,
- 例如: 必须是某某类的子类或 某某接口的实现类,格式:
<T extends 类或接口1 & 接口2>
泛型中的通配符 ?
类型通配符是使用?代替方法具体的类型实参。
1 <? extends Parent> 指定了泛型类型的上届
2 <? super Child> 指定了泛型类型的下届
3 <?> 指定了没有限制的泛型类型
泛型的作用
1、 提高代码复用率
2、 泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)
使用泛型需要注意的点
在编译之后程序会采取去泛型化的措施。
也就是说Java中的泛型,只在编译阶段有效。
在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段
类型擦除
Java 中的泛型基本上都是在编译器这个层次来实现的。在生成的 Java 字节代码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。这个过程就称为类型擦除。如在代码中定义的 List和 List等类型,在编译之后都会变成 List。JVM 看到的只是 List,而由泛型附加的类型信息对 JVM 来说是不可见的。类型擦除的基本过程也比较简单,首先是找到用来替换类型参数的具体类。这个具体类一般是 Object。如果指定了类型参数的上界的话,则使用这个上界。把代码中的类型参数都替换成具体的类。
java.utils.Objects
实例:
**
Java.lang.Math
**
一些常用的方法例如取最大值最小值,绝对值,四舍五入等
java.util.Arrays
array的方法很多,这里截图一点例子
Java.Math.BigDecimal
java.util.Date
在使用Date的时候导包的时候注意
java.text.DateFormat
日期格式转换的使用
还可以换成这种格式的
使用parse方法
java.util.Calendar
2020是闰年,下标1 是二月
Java.lang.System
system也是内置了很多方法,截取一部分
String
第二个text对象通过new的然后两个内存地址不同,则返回false
接下来这个例子,在内存中执行的过程如下:
在随着拼接的过程中,一些内存存的会被视作垃圾,因为已经没有引用指向了
通过 加法拼接能避免就尽量不要使用,因为拼接的次数多了,内存垃圾就会比较多了。这时候就需要使用StringBuffer
当他里边存满了16个字符那么就会自动扩容,每次拼接产生的垃圾都会及时回收。stringBuilder和StringBuffer的使用是一致的。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
关于StringBuffer和StringBuilder的区别看这一篇文章
https://blog.csdn.net/u011702479/article/details/82262823?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162700848716780269895364%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162700848716780269895364&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-82262823.first_rank_v2_pc_rank_v29&utm_term=stringbuffer%E5%92%8Cstringbuilder&spm=1018.2226.3001.4187
更多的使用方法在JAva API上 关注公众号回复 JavaAPI下载jdk1.8的中文版API