【Java基础笔记】第二十三章 常用API

【Java基础笔记】第二十三章 常用API,第1张

【Java基础笔记】第二十三章 常用API

目录

前言第二十三章 常用API

23.1 Object类

23.1.1 Object类的作用23.1.2 Object类的toString方法23.1.3 Object类的equals方法 23.2 Objects类

23.2.1 Objects概述23.2.2 Objects的常见方法 23.3 StringBuilder类

23.3.1 StringBuilder概述23.3.2 StringBuilder构造器23.3.3 StringBuilder常用方法23.3.4 String类拼接字符串原理23.3.5 StringBuilder提高效率原理 【StringBuilder案例】打印整型数组内容23.4 Math类

23.4.1 Math类的常用方法 23.5 System类

23.5.1 System类的常用方法时间毫秒值 23.6 BigDecimal类

23.6.1 BigDecimal类使用步骤23.6.2 BigDecimal类常用方法23.6.3 ArithmeticException异常23.6.4 RoundingMode参数 23.7 Date类

前言

该文章为Java基础自学笔记其他内容:Java基础学习笔记目录学习用书:
《Java核心技术 卷Ⅰ 基础知识(第10版)》
《Java经典编程300例》 第二十三章 常用API 23.1 Object类 23.1.1 Object类的作用

一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类Object类的方法是一切子类都可以直接使用 23.1.2 Object类的toString方法 方法名说明public String toSting()默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址

问题引出

开发中直接输出对象,默认输出对象的地址其实是毫无意义的开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息 toString存在的意义

父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息 IDEA自动生成的toString()方法

	@Override
    public String toString() {
        return "Student{" +
                "name='" + name +
                ", sex=" + sex +
                ", age=" + age +
                '}';
    }
23.1.3 Object类的equals方法 方法名说明public boolean equals(Object o)默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false

问题思考

直接比较两个对象的地址是否相同,完全可以用 “==” 替代equals equals存在的意义

父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则 IDEA自动生成的equals()方法

	@Override
    public boolean equals(Object o) {
    	// 判断是不是同一个对象比较,如果是返回true
        if (this == o) return true;
        // 如果o是nullfalse,如果o不是学生类型返回false
        if (o == null || getClass() != o.getClass()) return false;
        // 说明o一定是学生类型而且不为null
        Student student= (student) o;
        return sex == student.sex &&
                age == student.age &&
                Objects.equals(name, student.name);
    }
23.2 Objects类 23.2.1 Objects概述

Objects类与Object类还是继承关系,Objects类是从JDK1.7开始之后才有的 23.2.2 Objects的常见方法 方法名说明public static boolean equals(Object a, Object b)比较两个对象,底层会先进行非空判断,从而可以避免空指针异常,再进行equals比较public static boolean isNull(Object obj)判断变量是否为null,null返回true

Objects.equals(Object a, Object b)源码 (Objects的equals方法比较的结果是一样的,但是更安全)

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

Objects.isNull(Object obj)源码

	public static boolean isNull(Object obj) {
        return obj == null;
    }
23.3 StringBuilder类 23.3.1 StringBuilder概述

StringBuilder是一个可变的字符串类,可以把它看成是一个对象容器作用: 提高字符串的 *** 作效率,如拼接、修改等 23.3.2 StringBuilder构造器 名称说明public StringBuilder()创建一个空白可变的字符串对象,不包含任何内容public StringBuilder(String str)创建一个指定字符串内容的可变字符串对象 23.3.3 StringBuilder常用方法 方法名称说明public StringBuilder append(任意类型)添加数据并返回StringBuilder对象本身,支持链式编程public StringBuilder reverse()将对象的内容反转public int length()返回对象内容长度public String toString()通过toString()就可以实现把StringBuilder转换为String 23.3.4 String类拼接字符串原理

23.3.5 StringBuilder提高效率原理

【StringBuilder案例】打印整型数组内容

需求:

设计一个方法用于输出任意整型数组的内容,要求输出如下格式:“该数组内容为:[11, 22, 33, 44, 55]” 分析:

定义一个方法,要求该方法能够接收数组,并输出数组内容定义一个静态初始化的数组,调用该方法,并传入该数组

	public static String toString(int[] arr) {
        if (arr != null) {
            StringBuilder sb = new StringBuilder("[");
            for (int i = 0; i < arr.length; i++) {
                sb.append(arr[i]).append(i == arr.length - 1 ? "" : ", ");
            }
            sb.append("]");
            return sb.toString();
        } else {
            return null;
        }
    }
	public static void main(String[] args) {
        int[] arr1 = {};
        int[] arr2 = {11, 22, 33, 44, 55};
        System.out.println(toString(arr1));
        System.out.println(toString(arr2));
    }
[]
[11, 22, 33, 44, 55]
23.4 Math类

包含执行基本数字运算的方法,Math类没有提供公开的构造器 23.4.1 Math类的常用方法 方法名说明public static int abs(int a)获取参数绝对值public static double ceil(double a)向上取整public static double floor(double a)向下取整public static int round(float a)四舍五入public static int max(int a, int b)获取两个int值中的较大值public static double pow(double a, double b)返回a的b次幂的值public static double random()返回值为double的随机值,范围[0.0,1.0)

	// 取绝对值:返回正数
	Math.abs(10); // 10
	Math.abs(-10.3); // 10.3
	// 向上取整
	Math.ceil(4.0000001); // 5.0
	Math.ceil(4.0); // 4.0
	// 向下取整
	Math.floor(4.9999999); // 4.0
	Math.floor(4.0); // 4.0
	// 求指数次方
	Math.pow(2, 3); // 2^3 = 8.0
	// 四舍五入
	Math.round(4.49999); // 4
	Math.round(4.500001); // 5
	// 随机数 0.0 - 1.0(包前不包后)
	Math.random();
	// 拓展:3 - 9 之间的随机数 (0 - 6) + 3
	(int)(Math.random() * 7) + 3;
	
23.5 System类

System的功能是通用的,直接用类名调用,所以System不能被实例化 23.5.1 System类的常用方法 方法名说明public static void exit(int status)终止当前运行的Java虚拟机,非零表示异常终止public static long currentTimeMillis()返回当前系统的时间毫秒值形式public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数)数组拷贝 时间毫秒值

计算机认为时间是有起点的,起始时间:1970年1月1日 00:00:00(算C语言的生日)时间毫秒值:指的是从1970年1月1日00:00:00走到此刻的总的毫秒数(1s=1000ms)

1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的 *** 作系统,他使用B编译语言在老旧的PDP-7机器上开发了Unix的一个版本。随后,汤普逊和同时丹尼斯里奇改进了B语言,开发出了C语言,重写了Unix

测算运行时间:

	long startTime = System.currentTimeMillis();
	...
	long endTime = System.currentTimeMillis();
	System.out.println((endTime - startTime)/1000.0 + "s");
23.6 BigDecimal类

用于解决浮点型运算精度失真的问题 23.6.1 BigDecimal类使用步骤

创建对象BigDecimal封装浮点型数据

	public static BigDecimal valueOf(double val):包装浮点数成为BigDecimal对象
23.6.2 BigDecimal类常用方法 方法名说明public BigDecimal add(BigDecimal b)加法public BigDecimal subtract(BigDecimal b)减法public BigDecimal multiply(BigDecimal b)乘法public BigDecimal divide(BigDecimal b)除法public BigDecimal divide(另一个BigDecimal对象,精确几位,舍入模式)除法 23.6.3 ArithmeticException异常

如果算数运算时出现无限小数时,使用BigDecimal类会报异常

	BigDecimal a = BigDecimal.valueOf(10.0);
	BigDecimal b = BigDecimal.valueOf(3.0);
	BigDecimal c = a.divide(b); // 报异常java.lang.ArithmeticException
	BigDecimal c1 = a.divide(b, 2, RoundingMode.HALF_UP); // 3.33(保留小数点后两位)
23.6.4 RoundingMode参数 参数说明RoundingMode.CEILING取右边最近的整数RoundingMode.DOWN去掉小数部分取整,也就是正数取左边,负数取右边,相当于向原点靠近的方向取整RoundingMode.FLOOR取左边最近的正数RoundingMode.HALF_DOWN五舍六入,负数先取绝对值再五舍六入再负数RoundingMode.HALF_UP四舍五入,负数原理同上RoundingMode.HALF_EVEN这个比较绕,整数位若是奇数则四舍五入,若是偶数则五舍六入 23.7 Date类

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5708031.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存