黑马java学习笔记9(阶段二 第二章2-1)

以下学习笔记记录于:2024.08.28-2024.09.03

阶段二 JavaSE进阶

第二章 常用API

2-1 常用API

42 API概述

在这里插入图片描述

在这里插入图片描述

43 API:Object类的toString、equals、clone方法

image-20240901202510054

image-20240901202552800

  • 常对Object类的toString()方法进行重写(可直接生成),以便返回对象的内容。(原Object类的toString()方法返回的是对象的地址,这通常没什么意义,我们一般想要得到对象中的内容)

  • 当某个对象调用这个 clone() 方法时,这个方法会复制一个一模一样的新对象返回。

(1)浅克隆

image-20240901204046194

image-20240901204709893

运行结果:

image-20240901204844309

(2)深克隆

image-20240901204011121

image-20240901205116735

运行结果:

image-20240901205204107

45 API-Objects类

image-20240901215334384

image-20240901205430072

image-20240901215300248

image-20240901215427110

46 API-包装类

在Java中认为,万物皆对象。但8种基本数据类型不是对象,则引入了包装类的概念。

image-20240902115543039

image-20240902115608025

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

运行结果:

image-20240902115405658

47 API-StringBuilder、StringBuffer

image-20240902163039092

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

运行结果:

image-20240902163221753

image-20240902163508382

image-20240902163649217

48 API-StringBuilder拼接案例

image-20240902164919340

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

运行结果:

image-20240902164829746

49 API-StringJoiner

image-20240902165200235

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

image-20240902173958580

image-20240903100817311

image-20240903100954327

51 API-Runtime

image-20240903103246387

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

image-20240903103831629

image-20240903104749502

image-20240903105242615

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

运行结果:

image-20240903111712209

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值