目录
泛型
概述
泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定 义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
泛型类
//定义一个泛型类:
public class ClassName<T>{
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
泛型接口
public interface IntercaceName<T>{
T getData();
}
//实现接口时,可以选择指定泛型类型,也可以选择不指定, 如下:
//指定类型:
public class Interface1 implements IntercaceName<String> {
private String text;
@Override
public String getData() {
return text;
}
}
//不指定类型:
public class Interface1<T> implements IntercaceName<T> {
private T data;
@Override
public T getData() {
return data;
}
}
泛型方法
private static <T> T 方法名(T a, T b) {}
泛型限制类型
1. 在使用泛型时, 可以指定泛型的限定区域 ,
- 例如: 必须是某某类的子类或 某某接口的实现类,格式:
<T extends 类或接口1 & 接口2>
泛型中的通配符 ?
类型通配符是使用?代替方法具体的类型实参。
- <? extends Parent> 指定了泛型类型的上届
- <? super Child> 指定了泛型类型的下届
- <?> 指定了没有限制的泛型类型
作用
- 提高代码复用率
- 泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)
注意
在编译之后程序会采取去泛型化的措施。
也就是说Java中的泛型,只在编译阶段有效。
在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加 类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。
java.util.Objects
API文档:https://docs.oracle.com/javase/8/docs/api/java/util/Objects.html
W3C中文API文档:https://www.w3cschool.cn/java/java-objects-class.html
jdk1.7后出现.提供静态方法操作对象.
常用方法:
1.public static boolean equals(Object a,Object b):比较对象a和对象b是否相等.
*比较2个对象是否相等,底层依赖对象重写的equals的方法,如果没有重写,则使用Object的equals()
当出现null直接调用equals时会报错,但用Objects不会
objects实现源码:
2.public static <T> T requireNonNull(T obj):检查对象obj不为null,如果为null,则抛出空指针异常,否则返回obj本身.
*可以判断对象是否是空对象.限制参数不能为空.
3.public static boolean nonNull(Object obj):判断对象是否为null,不为返回true,否则返回false
4.public static boolean isNull(Object obj):和nonNull()相反.
Java.lang.Math类
Math类位于Java.lang包中,包含用于执行基本数学运算的方法!Math类的所有执行方法都是静态方法,可以直接使用类名.方法名调用,如:Math.round()
常用的方法
Math.round() 返回最接近参数的 int,它表示"四舍五入"
Math.rint() 返回最接近参数并等于某一整数的 double 值,如果有2个数同样接近,则返回偶数的那个
Math.floor() 返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数
Math.ceil() 返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数
Math.cbrt() 返回 double 值的立方根
Math.sqrt() 返回正确舍入的 double 值的正平方根
Math.pow() 返回第一个参数的第二个参数次幂的值
Math.max() 返回两个 double 值中较大的一个
Math.min() 返回两个 double 值中较小的一个
Math.abs() 返回 double,float,int,long 值的绝对值。
Math.random() 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
package 算数Math类;
/**
* @author yyx 2017年6月26日
*/
public class MathExample {
public static void main(String[] args) {
sqrt(10);
System.out.println("******************");
pow(2, 3);
System.out.println("******************");
minAndMax(5, 8);
System.out.println("******************");
rint(4.5);
System.out.println("******************");
round(5.64);
System.out.println("******************");
floorAndCeil(2.35);
System.out.println("******************");
cbrt(8);
}
/**
* 返回最接近参数的 int,它表示"四舍五入"
* @param n
*/
public static void round(double n){
System.out.println(Math.round(n));
}
/**
* Math.rint返回最接近参数并等于某一整数的 double 值,如果有2个数同样接近,则返回偶数的那个
* @param n
*/
public static void rint(double n){
System.out.println(Math.rint(n));
}
/**
* Math.floor返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数
* Math.ceil返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数
* @param n
*/
public static void floorAndCeil(double n) {
System.out.println(Math.floor(n));
System.out.println(Math.ceil(n));
}
/**
* 返回 double 值的立方根
*
* @param n
*/
public static void cbrt(double n) {
System.out.println(Math.cbrt(n));
}
/**
* 返回正确舍入的 double 值的正平方根
*
* @param n
*/
public static void sqrt(double n) {
System.out.println(Math.sqrt(n));
}
/**
* 返回第一个参数的第二个参数次幂的值
*
* @param m
* @param n
*/
public static void pow(double m, double n) {
System.out.println(Math.pow(m, n));
}
/**
* max返回两个 double 值中较大的一个 min返回两个 double 值中较小的一个
*
* @param m
* @param n
*/
public static void minAndMax(double m, double n) {
System.out.println(Math.min(m, n));
System.out.println(Math.max(m, n));
}
}
运行结果:
3.1622776601683795
******************
8.0
******************
5.0
8.0
******************
4.0
******************
6
******************
2.0
3.0
******************
2.0
java.util.Arrays
数组转字符串toString
int[] array