API的学习总结(上)

在 Java 中,API指的是 Java 提供的一系列类、接口、方法和工具,用于开发 Java 应用程序。Java API 是 Java 平台的核心组成部分,它提供了丰富的功能,包括基础数据类型、集合框架、输入输出、网络编程、多线程、数据库连接等。

核心API包

1. java.lang:提供 Java 语言的基础类,如 Object、String、Integer、Thread 等。所有其他包都隐式导入了这个包。

2. java.util:包含集合框架(如 List、Set、Map)、日期时间处理、随机数生成、事件模型等工具类。

3. java.io:提供输入输出功能,用于文件操作、网络数据流等。

  1. java.net:支持网络编程,包含 URL、Socket、ServerSocket 等类。

5. java.sql:提供数据库访问功能,用于连接和操作数据库。

6. java.text:包含格式化和解析数据的类,如 DateFormat、NumberFormat 等。

7. java.time(Java 8+):现代日期和时间 API,替代了旧的 java.util.Date 和 Calendar 类。

8. java.math:提供高精度计算(BigInteger、BigDecimal)和数学运算工具。


Math

在 Java 中,java.lang.Math类提供了执行基本数学运算的方法,如指数、对数、平方根和三角函数等。这个类包含了许多静态方法和常量,可以直接通过类名调用,无需创建对象。

(私有化构造方法,所以的方法都是静态的)

Math类的常用方法:

1. 常用数学常量

  • Math.PI :圆周率 π(约 3.14159)。
  • Math.E :自然对数的底数 e(约 2.71828)。

e.g.

java 复制代码
System.out.println("π的值:" + Math.PI); // 输出:3.141592653589793
System.out.println("e的值:" + Math.E); // 输出:2.718281828459045

2. 基本算术运算

绝对值
  • **Math.abs(x):**返回 x 的绝对值。

示例

java

java 复制代码
System.out.println(Math.abs(-5)); // 输出:5
System.out.println(Math.abs(3.14)); // 输出:3.14
最大值和最小值
  • **Math.max(x, y):**返回 x 和 y 中的较大值。
  • **Math.min(x, y):**返回 x 和 y 中的较小值。

e.g.

java 复制代码
System.out.println(Math.max(10, 20)); // 输出:20
System.out.println(Math.min(-3, -5)); // 输出:-5
四舍五入
  • Math.round(x): 返回最接近 x 的整数(longint类型)。
  • Math.ceil(x): 返回大于或等于 x 的最小整数(double类型)。
  • Math.floor(x): 返回小于或等于 x 的最大整数(double类型)。

e.g.

java 复制代码
System.out.println(Math.round(3.5)); // 输出:4
System.out.println(Math.ceil(3.2)); // 输出:4.0
System.out.println(Math.floor(3.8)); // 输出:3.0

3. 幂运算与对数运算

  • Math.pow(x, y): 返回 x 的 y 次幂(double类型)。
  • Math.sqrt(x) :返回 x 的平方根(double类型)。
  • Math.cbrt(x) 返回 x 的立方根(double类型)。
  • **Math.log(x):**返回 x 的自然对数(底数为 e)。
  • **Math.log10(x):**返回 x 的常用对数(底数为 10)。

e.g.

java 复制代码
System.out.println(Math.pow(2, 3)); // 输出:8.0
System.out.println(Math.sqrt(16)); // 输出:4.0
System.out.println(Math.log(Math.E)); // 输出:1.0

4. 三角函数与角度转换

  • Math.sin(rad):返回弧度 rad 的正弦值。
  • Math.cos(rad):返回弧度 rad 的余弦值。
  • Math.tan(rad):返回弧度 rad 的正切值。
  • Math.toRadians(deg):将角度转换为弧度。
  • Math.toDegrees(rad):将弧度转换为角度。
  • e.g.
java 复制代码
double rad = Math.toRadians(90); // 90度转弧度
System.out.println(Math.sin(rad)); // 输出:1.0(近似值)

5. 随机数生成

  • Math.random():返回一个大于等于 0 且小于 1 的随机double值。范围[0.0,1.0]

e.g.:生成 1 到 10 之间的随机整数:

java 复制代码
int randomNum = (int) (Math.random() * 10) + 1;
System.out.println(randomNum); // 输出1~10之间的随机整数

完整示例代码

以下是一个使用 Math 类各种方法的完整示例:

java 复制代码
public class MathExample {
    public static void main(String[] args) {
        // 常量
        System.out.println("π = " + Math.PI);
        System.out.println("e = " + Math.E);

        // 基本运算
        System.out.println("|-7| = " + Math.abs(-7));
        System.out.println("max(5, 9) = " + Math.max(5, 9));
        System.out.println("min(3.2, 4.5) = " + Math.min(3.2, 4.5));

        // 四舍五入
        System.out.println("round(3.7) = " + Math.round(3.7));
        System.out.println("ceil(3.2) = " + Math.ceil(3.2));
        System.out.println("floor(3.8) = " + Math.floor(3.8));

        // 幂运算与对数
        System.out.println("2^3 = " + Math.pow(2, 3));
        System.out.println("√25 = " + Math.sqrt(25));
        System.out.println("log(e) = " + Math.log(Math.E));

        // 三角函数
        double angle = 45;
        double radian = Math.toRadians(angle);
        System.out.println("sin(45°) = " + Math.sin(radian));
        System.out.println("cos(45°) = " + Math.cos(radian));

        // 随机数
        System.out.println("随机数(0~1): " + Math.random());
        System.out.println("随机整数(1~100): " + ((int) (Math.random() * 100) + 1));
    }
}

System

System也是一个工具类,提供了一些与系统相关的方法。

|----------------------------------------------------------|-----------------|
| 方法名 | 说明 |
| public static void exit(int status) | 终止当前运行的Java的虚拟机 |
| public static long currentTimeMills() | 返回当前系统的时间毫秒值形式 |
| public static void arratcopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) | 数组拷贝 |

public static void exit(int status)

  • 参数status是一个整数状态码,用于表示程序的退出状态。
    • 0:表示程序正常退出(通常用于成功执行的情况)。
    • 非零值(如 1、-1):表示程序异常退出(通常用于发生错误的情况)。

常见应用场景

(1)程序正常结束
java 复制代码
public class Chillingheart {
    public static void main(String[] args) {
        // 执行某些操作...
        System.out.println("程序执行完毕,正常退出");
        System.exit(0); // 显式退出,状态码0表示成功
    }
}
(2)处理严重错误
java 复制代码
public class Chillingheart {
    public static void main(String[] args) {
        try {
            // 尝试打开一个不存在的文件
            java.io.FileInputStream file = new java.io.FileInputStream("nonexistent.txt");
        } catch (java.io.FileNotFoundException e) {
            System.err.println("错误:文件未找到!");
            System.exit(1); // 状态码1表示文件操作失败
        }
    }
}

public static long currentTimeMills() 返回当前系统的时间毫秒值形式

常见应用场景

(1)计算代码执行时间
java 复制代码
long startTime = System.currentTimeMillis();

// 执行需要计时的代码
for (int i = 0; i < 1000000; i++) {
    // 模拟耗时操作
}

long endTime = System.currentTimeMillis();
long elapsedTime = endTime - startTime;
System.out.println("代码执行时间:" + elapsedTime + " 毫秒");

public static void arratcopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) 数组拷贝

java 复制代码
//拷贝数组
int [] arr1 = {1,2,3,4,5,6,7,8,9,10};

int [] arr2 = new int [10];
//把arr1数组中的数据拷贝到arr2中
//arratcopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数)
System.arraycopy(arr1,0,arr2,0,10);

//验证
for(int i=0;i<arr2.length;i++){

   System.out.print(arr2[i]+" ");

}

Runtime

Runtime表示当前虚拟机的运行环境

java.lang.Runtime 类提供了与当前 Java 虚拟机(JVM)运行时环境交互的功能。每个 Java 应用程序都有一个与之关联的Runtime实例,通过它可以访问和控制 JVM 的某些特性,如内存管理、进程执行、系统资源等。

|-------------------------------------|--------------------------|
| 方法名 | 说明 |
| public static Runtime getRuntime() | 当前系统的运行环境对象 |
| public void exit(int status) | 停止虚拟机 |
| public int availableProcessors() | 获取cpu的线程数 |
| public long maxMemory() | JVM能从系统重获取总内存大小(单位byte) |
| public long totalMemory() | JVM已经从系统重获取总内存大小(单位byte) |
| public long freeMemory() | JVM剩余内存大小(单位byte) |
| public Process exec(String command) | 运行cmd指令 |

获取 Runtime 实例

Runtime类采用单例模式,只能通过静态方法getRuntime()获取其实例:

java 复制代码
Runtime runtime = Runtime.getRuntime();

2. 核心功能与方法

(1)内存管理
  • 获取内存信息

    java 复制代码
    long totalMemory = runtime.totalMemory(); // JVM当前总内存(字节)
    long freeMemory = runtime.freeMemory();   // JVM当前空闲内存(字节)
    long maxMemory = runtime.maxMemory();     // JVM最大可用内存(字节)
    
    System.out.printf("总内存: %.2f MB%n", totalMemory / 1024.0 / 1024);
    System.out.printf("空闲内存: %.2f MB%n", freeMemory / 1024.0 / 1024);
    System.out.printf("最大内存: %.2f MB%n", maxMemory / 1024.0 / 1024);

    建议垃圾回收

java 复制代码
runtime.gc(); // 提示JVM执行垃圾回收(不一定立即执行)

Object

  1. Object是 Java 中的顶级父类,所有的类直接或间接继承于Object类。
java 复制代码
class MyClass {} // 隐式继承自Object
// 等价于
class MyClass extends Object {}
  1. Object 类中的方法可以被所以子类访问,所以我们要学习Object类和其中的方法。

Object构造方法

|------------------|------|
| 方法名 | 说明 |
| public Object () | 空参构造 |

java 复制代码
public class Object {
    // 默认构造方法(隐式存在,无需显式定义)
    Object() {}
}

注意:顶级父类中只有无参构造方法!!!

Object成员方法

|------------------------------------|-------------------------------------|
| 方法名 | 说明 |
| public String toString ( ) | 返回对象的字符串表示形式 |
| public boolean equals (Object obj) | 比较两个对象是否相等 |
| public Object clone (int a) | 对象克隆(默认浅克隆) 如果需要深克隆需要重写方法或者使用第三方工具类 |

toString()

  • 功能:返回对象的字符串表示。
  • 默认格式类名@16进制哈希码(如Point@123456)。
  • 重写建议:提供更有意义的信息。

e.g.

java 复制代码
@Override
public String toString() {
    return "Point{x=" + x + ", y=" + y + "}";
}

equals (Object obj)

在 Java 中,Object类的equals()方法是用于比较两个对象是否相等的核心方法。

java 复制代码
String a = new String("hello");
String b = new String("hello");
System.out.println(a == b);      // false(引用不同)
System.out.println(a.equals(b)); // true(String类重写了equals())


String s = "abc";
StringBuilder sb = new StringBuilder("abc");

System.out.println(s.equals(sb));// false
        //因为equals方法是被s调用的,而s是字符串
        //所以equals要看string类中的
        //字符串中的equals方法,先判断参数是否为字符串
        // 如果是字符串,再比较内部的属性
        //但是如果参数不是字符串,直接返回false

 System.out.println(sb.equals(s));// false
        //因为equals方法是被sb调用的,而sb是StringBuilder
        //所以这里的equals方法要看StringBuilder中的equals方法
        //那么在StringBuilder当中,没有重写equals方法
        //使用的是Object中的
        //在Object当中默认是使用==号比较两个对象的地址值
        //而这里的s和sb记录的地址值是不一样的,所以结果返回false

注意:

equals()与==的区别

  • ==:比较对象引用(内存地址)。
  • equals():比较对象内容(需重写)。

对象克隆

把A对象的属性值完全拷贝给B对象,也叫对象拷贝、对象赋值。

基本数据类型:存储的是真实的值

引用数据类型:存储的是另一个空间的地址值

|-------|----------------------------------|
| 浅 克隆 | 不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来 |
| 深 克 隆 | 基本数据类型拷贝过来; 字符串复用; 引用数据类型会重新创建的 |

java 复制代码
 int[] data = this.data;
        //创建新的数组
        int[] newData =new int[data.length];
        //拷贝数组中的数据
        for (int i = 0; i < data.length; i++) {
            newData[i] = data[i];
        }
        //调用父类中的方法克隆对象
            User u=(User)super.clone();
        //因为父类中的克隆方法是浅克隆,替换克隆出来对象中的数组地址值
        u.data =newData;
        return u;

Objects

成员方法

|--------------------------------------------------|----------------------------|
| 方法名 | 说明 |
| public static boolean equals (Object a,Object b) | 先做非空判断,比较两个对象 |
| public static boolean isNull(Object obj) | 判断对象是否为null,为null返回true,反之 |
| public static boolean nonNull (Object obj) | 判断对象是否为null,跟isNull的结果相反 |

java 复制代码
String a = null;
String b = null;
System.out.println(Objects.equals(a, b)); // true

String c = "hello";
String d = "hello";
System.out.println(Objects.equals(c, d)); // true
java 复制代码
String str = null;
Objects.requireNonNull(str); // 抛出NullPointerException
java 复制代码
String str = "hello";
System.out.println(Objects.nonNull(str)); // true

今天就先到这啦!

相关推荐
说码解字26 分钟前
ExoPlayer 如何实现音画同步
开发语言·学习·音视频
海尔辛1 小时前
学习黑客BitLocker与TPM详解
stm32·单片机·学习
邓永豪1 小时前
笔记本电脑升级实战手册[3]:扩展内存与硬盘
学习·电脑·硬件·diy·3c硬件
小虎卫远程打卡app2 小时前
视频编解码学习十一之视频原始数据
学习·视频编解码
crazyme_63 小时前
前端自学入门:HTML 基础详解与学习路线指引
前端·学习·html
龙湾开发3 小时前
轻量级高性能推理引擎MNN 学习笔记 02.MNN主要API
人工智能·笔记·学习·机器学习·mnn
Camellia03113 小时前
嵌入式学习--江协51单片机day5
嵌入式硬件·学习·51单片机
HappyAcmen4 小时前
线代第二章矩阵第八节逆矩阵、解矩阵方程
笔记·学习·线性代数·矩阵
杨德兴4 小时前
3.3 阶数的作用
人工智能·学习