以下学习笔记记录于:2024.08.28-2024.09.03
文章目录
阶段二 JavaSE进阶
第二章 常用API
2-1 常用API
42 API概述
43 API:Object类的toString、equals、clone方法
-
常对Object类的toString()方法进行重写(可直接生成),以便返回对象的内容。(原Object类的toString()方法返回的是对象的地址,这通常没什么意义,我们一般想要得到对象中的内容)
-
当某个对象调用这个 clone() 方法时,这个方法会复制一个一模一样的新对象返回。
(1)浅克隆
运行结果:
(2)深克隆
运行结果:
45 API-Objects类
46 API-包装类
在Java中认为,万物皆对象。但8种基本数据类型不是对象,则引入了包装类的概念。
Test.java:
package com.itheima.hello.ObjectDemo.d12_integer;
import java.util.ArrayList;
// 目标:掌握包装类的使用
public class Test {
public static void main(String[] args) {
// Integer a1 = new Integer(12); // 过时
Integer a2 = Integer.valueOf(12);
System.out.println(a2);
// 自动装箱:可以自动把基本类型的数据转换成对象
Integer a3 = 12;
// 自动拆箱:可以自动把包装类型的对象转换成对应的基本数据类型
int a4 = a3;
// 泛型和集合不支持基本数据类型,只能支持引用数据类型
// ArrayList<int> list = new ArrayList<>(); // 报错
ArrayList<Integer> list = new ArrayList<>();
list.add(12); // 自动装箱
list.add(13);
int rs = list.get(1); // 自动拆箱
System.out.println(rs);
System.out.println("---------------------");
// 1、把基本类型的数据转换成字符串
Integer a = 23;
String rs1 = Integer.toString(a); // "23"
System.out.println(rs1 + 1); // 231
String rs2 = a.toString(); // "23"
System.out.println(rs2 + 1); // 231
// 常用
String rs3 = a + ""; // "23"
System.out.println(rs3 + 1); // 231
// 2、把字符串类型的数值转换成对应的基本类型*(重要*)
// String ageStr1 = "29a"; // 报错,需要是对应类型的纯数值形式的字符串
// String ageStr2 = "29.5"; // 报错
String ageStr = "29";
// int ageI = Integer.parseInt(ageStr); // 29
int ageI = Integer.valueOf(ageStr); // 29
System.out.println(ageI + 1); // 30
String scoreStr = "99.5";
// double ageI = Double.parseDouble(score); // 29
double score = Double.valueOf(scoreStr); // 29
System.out.println(score + 0.5); // 30
}
}
运行结果:
47 API-StringBuilder、StringBuffer
Test1.java:
package com.itheima.hello.ObjectDemo.d13_stringBuilder;
// 目标:搞清楚StringBuilder的用法和作用
public class Test1 {
public static void main(String[] args) {
// StringBuilder s = new StringBuilder(); // s ""
StringBuilder s = new StringBuilder("itheima"); // s "itheima"
// 1、拼接内容
s.append(12);
s.append("黑马");
s.append(true);
// 支持链式编程
s.append(666).append("黑马2").append(666);
System.out.println(s);
// 2、反转操作
s.reverse();
System.out.println(s);
// 3、返回字符串的长度
System.out.println(s.length());
// 4、把StringBuilder对象又转换成String类型
String rs = s.toString();
System.out.println(rs);
}
}
运行结果:
48 API-StringBuilder拼接案例
Test2.java:
package com.itheima.hello.ObjectDemo.d13_stringBuilder;
// 目标:完成遍历数组内容,并拼接成指定格式的案例
public class Test2 {
public static void main(String[] args) {
System.out.println(getArrayData(new int[]{11, 22, 33}));
}
public static String getArrayData(int[] arr){
// 1、判断arr是否为null
if (arr == null){
return null;
}
// 2、arr数组对象存在。arr = [11, 22, 33]
StringBuilder s = new StringBuilder();
s.append("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1){
s.append(arr[i]);
}else {
s.append(arr[i]).append(", ");
}
}
s.append("]");
return s.toString();
}
}
运行结果:
49 API-StringJoiner
Test.java:
package com.itheima.hello.ObjectDemo.d14_stringjoiner;
import java.util.StringJoiner;
// 目标:掌握StringJoiner的使用
public class Test {
public static void main(String[] args) {
// StringJoiner s = new StringJoiner(", "); // 间隔符
StringJoiner s = new StringJoiner(", ", "[", "]"); // 间隔符+开始、结束符号
s.add("java1");
s.add("java2");
s.add("java3");
System.out.println(s); // [java1, java2, java3]
}
}
改写“48 API-StringBuilder拼接案例”:
package com.itheima.hello.ObjectDemo.d14_stringjoiner;
import java.util.StringJoiner;
public class Test2 {
public static void main(String[] args) {
System.out.println(getArrayData(new int[]{11, 22, 33})); // [11, 22, 33]
}
public static String getArrayData(int[] arr){
// 1、判断arr是否为null
if (arr == null){
return null;
}
// 2、arr数组对象存在。arr = [11, 22, 33]
// StringBuilder s = new StringBuilder();
// s.append("[");
// for (int i = 0; i < arr.length; i++) {
// if (i == arr.length - 1){
// s.append(arr[i]);
// }else {
// s.append(arr[i]).append(", ");
// }
// }
// s.append("]");
StringJoiner s = new StringJoiner(", ", "[", "]");
for (int i = 0; i < arr.length; i++) {
s.add(arr[i] + ""); // 此处的add方法只能拼接字符串
}
return s.toString(); // [11, 22, 33]
}
}
注:StringJoiner 的 add 方法只能添加字符串。
50 API-Math、System
51 API-Runtime
RuntimeTest.java:
package com.itheima.hello;
import java.io.IOException;
public class RuntimeTest {
public static void main(String[] args) throws IOException, InterruptedException {
// 1、public static RuntimeTest getRuntime() 返回与当前Java应用程序关联的运行时对象
Runtime r = Runtime.getRuntime();
// 2、public void exit(int status) 终止当前运行的虚拟机
// r.exit(0); // 不建议这么写
// 3、public int availableProcessors() 返回Java虚拟机可用的处理器数
System.out.println(r.availableProcessors());
// 4、public long totalMemory() 返回Java虚拟机中的内存总量
System.out.println(r.totalMemory()/1024.0/1024.0 + "MB"); // 1024 = 1K, 1024*1024 = 1M
// 5、public long freeMemory() 返回Java虚拟机中的可用内存
System.out.println(r.freeMemory()/1024.0/1024.0 + "MB");
// 6、public Process exec(String command) 启动某个程序,并返回代表该程序的对象
// r.exec("D:\\Computer_AppSoft\\Typora\\Typora.exe");
// r.exec("QQ"); // 若将该程序路径添加到了环境变量中,则可以直接写程序名字
Process p = r.exec("QQ");
Thread.sleep(5000); // 让程序在这里暂停5s后继续往下走
p.destroy(); // 销毁,关闭程序
}
}
52 API-BigDecimal
BigDecimal一定是要做精确运算的(浮点型运算),如果在进行除法时出现除不尽的情况则需要设定所要保留的小数点位数和舍入模式。
BigDecimalTest.java:
package com.itheima.hello;
import java.math.BigDecimal;
import java.math.RoundingMode;
// 目标:掌握BiqDecimal进行精确运算的方案
public class BigDecimalTest {
public static void main(String[] args) {
double a = 0.1;
double b = 0.2;
// 1、把浮点型数据封装成BigDecimal对象,再来参与运算。
// a、public BigDecimal(double val): 得到的BigDecimal对象是无法精确计算浮点型数据的。 注意:不推荐使用这个
// b、public BigDecimal(String val): 得到的BigDecimal对象是可以精确计算浮点型数据的。 可以使用。
// c、public static Bigpecimal value0f(double val): 通过这个静态方法得到的BigDecimal对象是可以精确运算的。 是最好的方案。
BigDecimal a1 = BigDecimal.valueOf(a);
BigDecimal b1 = BigDecimal.valueOf(b);
// 2、public BigDecimal add(BigDecimal augend): 加法
BigDecimal c1 = a1.add(b1);
System.out.println(c1);
// 3、public BigDecimal subtract(BigDecimal augend): 减法
BigDecimal c2 = a1.subtract(b1);
System.out.println(c2);
// 4、public BigDecimal multiply(BigDecimal augend): 乘法
BigDecimal c3 = a1.multiply(b1);
System.out.println(c3);
// 5、public BigDecimal divide(BigDecimal b): 除法
BigDecimal c4 = a1.divide(b1);
System.out.println(c4);
// 6、public Bigpecimal divide(另一个BigDecimal对象,精确几位,舍入模式): 除法,可以设置精确几位。
BigDecimal d1 = BigDecimal.valueOf(0.1);
BigDecimal d2 = BigDecimal.valueOf(0.3);
BigDecimal d3 = d1.divide(d2, 2, RoundingMode.HALF_UP); // 0.33, 四舍五入 RoundingMode.HALF_UP
System.out.println(d3);
// 7、public double doubleValue():把BigDecimal对象又转换成double类型的数据。
double db1 = d3.doubleValue();
double db2 = c1.doubleValue();
print(db1);
print(db2);
}
public static void print(double a) {
System.out.println(a);
}
}
运行结果: