JavaSE——Day8,9两天笔记

1、泛型

1.1 概述

泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定
义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

1.2 使用

1.2.1 泛型类

定义格式:

public class ClassName<T>{
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}

1.2.2 泛型接口

(泛型常用)

定义格式:

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;
	}
}

1.2.3 泛型方法

定义格式:

private static <T> T 方法名(T a, T b) {}

1.2.4 泛型限制类型

在使用泛型时, 可以指定泛型的限定区域 ,

  • 例如: 必须是某某类的子类或 某某接口的实现类,格式:

  • <T extends 类或接口1 & 接口2>
    

1.2.5 泛型通配符 ?

​ 类型通配符是使用?代替方法具体的类型实参。

	1  <? extends Parent>指定了泛型类型的上届
	2  <? super Child>指定了泛型类型的下届
	3  <?>  指定了没有限制的泛型类型
public class Demo1 {
    public static void main(String[] args) {
        //只要new的对象是Apple类的父类以上就不会报错
        Plate<? super Apple> p1 = new Plate<Fruit>();//限定下界是apple
        Plate<? super Banana> p4 = new Plate<Fruit>();//限定下界是apple
        //只要new的对象是fruit类的子类就不会报错
        Plate<? extends Fruit> p2 = new Plate<Banana>();//限定上界是fruit
        Plate<? extends Fruit> p3 = new Plate<Apple>();//限定上界是fruit
    }
}
interface Fruit{}
class Apple implements Fruit{}
class Banana implements Fruit{}
class Plate<T>{}

1.2.6 泛型作用和注意事项

  • 提高代码复用率
  • 泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)

PS:

  • 在编译之后程序会采取去泛型化的措施。
  • 也就是说Java中的泛型,只在编译阶段有效。
  • 在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加
  • 类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段

2、java.util.Objects

2.1 概念

​ 这是一个工具类,此类包含static实用程序方法,用于操作对象或在操作前检查某些条件。

2.2 常用方法和代码解释

2.2.1 equals–比较两个数是否相等

static boolean equals(Object a, Object b) true如果参数彼此相等,则返回,false否则返回。

public class Demo2 {
    public static void main(String[] args) {
        Person p2 = new Person();
        Person p1=null;
        System.out.println(Objects.equals(p1,p2));
    }
}
class Person{}

PS: 为什么一定要使用Objects.equals(p1,p2)呢? 因为如果我们使用p1.equals(p2),会报空指针异常;后者的equals调用的是Object类中的方法如下,这段代码判断的是否在同一个地址。而p1是null,则会报空指针异常。

public boolean equals(Object obj) {
        return this == obj;
    }

在Objects类中的equals加了一个对null值的判断

public static boolean equals(Object a, Object b) {
        return a == b || a != null && a.equals(b);
    }

2.2.2 isNull–判断为空

static boolean isNull(Object obj) 返回true如果提供的引用null,否则返回false。

	Person p2 = new Person();
	Person p1=null;
	System.out.println(Objects.isNull(p1));

2.2.3 nonNull --判断不为空

static boolean nonNull(Object obj) 返回true如果提供的参考是非null 否则返回false。

	Person p2 = new Person();
	Person p1=null;
	System.out.println(Objects.nonNull(p1));

2.2.4 requireNonNull–检查对象是否为空

static T requireNonNull(T obj) 检查指定的对象引用不是null。

如图对象是null则抛出抛出空指针异常

		Person p2 = new Person();
         Person p1=null;
         System.out.println(Objects.requireNonNull(p1));

对于输入的内容如果是空的则中断程序。

public static <T> T requireNonNull(T obj) {
        if (obj == null) {
            throw new NullPointerException();
        } else {
            return obj;
        }
    }

2.2.5 toString–转换成字符串

static String toString(Object o) 返回调用的结果toString对于非 null参数和"null"一个null参数。

	Person p2 = new Person();
	Person p1=null;
	System.out.println(Objects.toString(p2));

3、java.lang.Math

3.1 概念

该类Math包含用于执行基本数值运算的方法,例如基本指数、对数、平方根和三角函数。

3.2 常用方法和代码详解

3.2.1 abs–取绝对值

static double abs(double a)

返回一个double值的绝对值。

3.2.2 cbrt–取立方根

static double cbrt(double a)
返回double值的立方根。

3.2.3 sqrt–取平方根

static double sqrt(double a)
返回值的正确舍入的正平方根 double。

3.2.4 ceil–向上取整

static double ceil(double a)
返回double大于或等于参数且等于数学整数的最小(最接近负无穷大) 值。

3.2.4 floor–向下取整

static double floor(double a)
返回double小于或等于参数且等于数学整数的最大(最接近正无穷大) 值。

3.2.5 max–取最大值

static double max(double a, double b)
返回两个double值中的较大者

3.2.5 min–取最小值

static double min(double a, double b)
返回两个double值中较小的一个。

3.2.6 pow–取a^b值

static double pow(double a, double b)
返回第一个参数的第二个参数的幂的值。

3.2.7 random–返回一个0.0-1.0的随机数

static double random()
返回一个double带正号的值,大于或等于0.0并小于1.0。

3.2.8 round–四舍五入

static int round(float a)
返回最接近int参数的值,关系四舍五入到正无穷大。

System.out.println(Math.abs(-100));//100
        System.out.println(Math.cbrt(-1));//-1.0
        System.out.println(Math.sqrt(4));//2.0
        System.out.println(Math.ceil(3.5));//4.0
        System.out.println(Math.floor(3.5));//3.0
        System.out.println(Math.max(3.5,4.0));//4.0
        System.out.println(Math.min(3.5,4.0));//3.5
        System.out.println(Math.pow(3,2));//9.0
        System.out.println(Math.random());//……
        System.out.println(Math.round(3.6));//4

4、java.util.Arrays

4.1 概念

​ 此类包含用于操作数组的各种方法(例如排序和搜索)。此类还包含一个静态工厂,允许将数组视为列表。

4.2 常用方法和代码详解

4.2.1 binarySearch–查找

static int binarySearch(byte[] a, byte key)
使用二进制搜索算法在指定的字节数组中搜索指定的值。

4.2.2 compare–比较

static int compare(boolean[] a, boolean[] b)
按boolean字典顺序比较两个数组。

4.2.3 copyOf–数组扩容

static byte[] copyOf(byte[] original, int newLength)
复制指定的数组,截断或用零填充(如有必要),使副本具有指定的长度。

4.2.4 sort–排序升序

static void sort(double[] a)
将指定的数组按数字升序排序。

4.2.5 toString–输出

static String toString(byte[] a)
返回指定数组内容的字符串表示形式。

public static void main(String[] args) {
        int[] a={9,8,7,1,2,3,4,5};
        System.out.println(Arrays.toString(a));//[9, 8, 7, 1, 2, 3, 4, 5]
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));//[1, 2, 3, 4, 5, 7, 8, 9]
        System.out.println(Arrays.binarySearch(a,8));//6
        int[] b={1,2,3,4,5,6,7,8,9,10};
        int c=Arrays.compare(a,b);
        System.out.println(c);//1
        System.out.println(a.length);//8
        a=Arrays.copyOf(a,15);
        System.out.println(a.length);//15
    }

5、java.util.Date

5.1 概念

​ 毫秒值的薄包装器

5.2 构造方法和方法详解

5.2.1 构造方法

​ Date(long date) Date使用给定的毫秒时间值构造一个对象。

​ Date( ) 创建一个当前时间,精确到毫秒。

5.2.2 setTime–设置毫秒

void setTime(long date)
Date使用给定的毫秒时间值设置现有对象。

5.2.3 getTime–获取毫秒

void getTime()
Date获取当前时间的毫秒值

6、java.math.BigDecimal

6.1 概念

​ 不可变的、任意精度的有符号十进制数。通过控制台运行0.1+0.2会发现运算的误差,在部分需要精准运算的场合这样是不可行的,于是引入了BigDecimal类

6.2 常用构造方法,方法和代码详解

6.2.1 常用构造方法

BigDecimal(String value)
将 a 的字符串表示形式BigDecimal 转换为 a BigDecimal。

6.2.2 add–加

BigDecimal add(BigDecimal augend)
返回一个 ,BigDecimal其值为(this + augend),比例为max(this.scale(), augend.scale())。

6.2.3 subtract–减

BigDecimal subtract(BigDecimal subtrahend)
返回一个 ,BigDecimal其值为(this - subtrahend),比例为max(this.scale(), subtrahend.scale())。

6.2.4 divide–除

BigDecimal divide(BigDecimal divisor)
返回一个 ,BigDecimal其值为(this / divisor),首选比例为(this.scale() - divisor.scale());如果无法表示确切的商(因为它具有非终止的十进制扩展),ArithmeticException则抛出一个。

6.2.5 multiply–乘

BigDecimal multiply(BigDecimal multiplicand)
返回一个 ,BigDecimal其值为(this × multiplicand),比例为(this.scale() + multiplicand.scale())。

public static void main(String[] args) {
        BigDecimal b1 = new BigDecimal("0.1");
        BigDecimal b2 = new BigDecimal("0.1");
        BigDecimal b3 =b1.add(b2);
        BigDecimal b4 =b1.subtract(b2);
        BigDecimal b5 =b1.divide(b2);
        BigDecimal b6 =b1.multiply(b2);
        System.out.println(b1);//0.1
        System.out.println(b2);//0.1
        System.out.println(b3);//0.2
        System.out.println(b4);//0.0
        System.out.println(b5);//1
        System.out.println(b6);//0.01
    }

6.2.6 其他

​ 这个类的方法类似与Math,具体查询API

7、java.text.DateFormat

7.1 概念

日期/时间格式化子类的抽象类,它以独立于语言的方式格式化和解析日期或时间。因为是抽象类需要由一个类实现它,一般使用SimpleDateFormat

7.2 常用的方法和代码详解

7.2.1 SimpleDateFormat(pattern)

SimpleDateFormat是一个具体的类,用于以语言环境敏感的方式格式化和解析日期
请添加图片描述

7.2.2 format–格式化为字符串

String format(Date date)
Date将 a格式化为日期时间字符串。

7.2.3 parse–文本转换为日期

Date parse(String source)
从给定字符串的开头解析文本以生成日期。

public static void main(String[] args) throws ParseException {
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String da=format.format(date);
        String text="2021-08-21";
        Date dada=format.parse(text);
        System.out.println(da);//2021-08-21
        System.out.println((date.getTime()-dada.getTime())/1000/60/60/24);//0
    }

8、java.lang.System

8.1 概念

包含一些有用的类字段和方法。它不能被实例化。System该类提供的设施包括标准输入、标准输出和错误输出流;访问外部定义的属性和环境变量;一种加载文件和库的方法;以及一种用于快速复制数组一部分的实用方法。

8.2 方法和代码详解

8.2.1 exit–终止JVM

static void exit(int status)
终止当前运行的 Java 虚拟机。

8.2.2 gc–运行垃圾收集器

static void gc()
运行垃圾收集器。

8、java.lang.System

8.1 概念

包含一些有用的类字段和方法。它不能被实例化。System该类提供的设施包括标准输入、标准输出和错误输出流;访问外部定义的属性和环境变量;一种加载文件和库的方法;以及一种用于快速复制数组一部分的实用方法。

8.2 方法和代码详解

8.2.1 exit–终止JVM

static void exit(int status)
终止当前运行的 Java 虚拟机。

8.2.2 gc–运行垃圾收集器

static void gc()
运行垃圾收集器。

9、String(markdown没保存 等有时间再补充笔记吧)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值