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:提供输入输出功能,用于文件操作、网络数据流等。
4. 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.
System.out.println("π的值:" + Math.PI); // 输出:3.141592653589793
System.out.println("e的值:" + Math.E); // 输出:2.718281828459045
2. 基本算术运算
绝对值
Math.abs(x)
:返回 x 的绝对值。
示例:
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.
System.out.println(Math.max(10, 20)); // 输出:20
System.out.println(Math.min(-3, -5)); // 输出:-5
四舍五入
Math.round(x)
:返回最接近 x 的整数(long
或int
类型)。Math.ceil(x)
:返回大于或等于 x 的最小整数(double
类型)。Math.floor(x)
:返回小于或等于 x 的最大整数(double
类型)。
e.g.
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.
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.
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 之间的随机整数:
int randomNum = (int) (Math.random() * 10) + 1;
System.out.println(randomNum); // 输出1~10之间的随机整数
完整示例代码
以下是一个使用 Math
类各种方法的完整示例:
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)程序正常结束
public class Chillingheart {public static void main(String[] args) {// 执行某些操作...System.out.println("程序执行完毕,正常退出");System.exit(0); // 显式退出,状态码0表示成功}
}
(2)处理严重错误
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)计算代码执行时间
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(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) 数组拷贝
//拷贝数组
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()
获取其实例:
Runtime runtime = Runtime.getRuntime();
2. 核心功能与方法
(1)内存管理
- 获取内存信息:
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);
建议垃圾回收:
runtime.gc(); // 提示JVM执行垃圾回收(不一定立即执行)
Object
1. Object是 Java 中的顶级父类,所有的类直接或间接继承于Object类。
class MyClass {} // 隐式继承自Object
// 等价于
class MyClass extends Object {}
2. Object 类中的方法可以被所以子类访问,所以我们要学习Object类和其中的方法。
Object构造方法
方法名 | 说明 |
public Object () | 空参构造 |
public class Object {// 默认构造方法(隐式存在,无需显式定义)Object() {}
}
注意:顶级父类中只有无参构造方法!!!
Object成员方法
方法名 | 说明 |
public String toString ( ) | 返回对象的字符串表示形式 |
public boolean equals (Object obj) | 比较两个对象是否相等 |
public Object clone (int a) | 对象克隆(默认浅克隆) 如果需要深克隆需要重写方法或者使用第三方工具类 |
toString()
- 功能:返回对象的字符串表示。
- 默认格式:
类名@16进制哈希码
(如Point@123456
)。 - 重写建议:提供更有意义的信息。
e.g.
@Override
public String toString() {return "Point{x=" + x + ", y=" + y + "}";
}
equals (Object obj)
在 Java 中,Object
类的equals()
方法是用于比较两个对象是否相等的核心方法。
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方法,先判断参数是否为字符串// 如果是字符串,再比较内部的属性//但是如果参数不是字符串,直接返回falseSystem.out.println(sb.equals(s));// false//因为equals方法是被sb调用的,而sb是StringBuilder//所以这里的equals方法要看StringBuilder中的equals方法//那么在StringBuilder当中,没有重写equals方法//使用的是Object中的//在Object当中默认是使用==号比较两个对象的地址值//而这里的s和sb记录的地址值是不一样的,所以结果返回false
注意:
equals()
与==
的区别
==
:比较对象引用(内存地址)。equals()
:比较对象内容(需重写)。
对象克隆
把A对象的属性值完全拷贝给B对象,也叫对象拷贝、对象赋值。
基本数据类型:存储的是真实的值
引用数据类型:存储的是另一个空间的地址值
浅 克隆 | 不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来 |
深 克 隆 | 基本数据类型拷贝过来; 字符串复用; 引用数据类型会重新创建的 |
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的结果相反 |
String a = null;
String b = null;
System.out.println(Objects.equals(a, b)); // trueString c = "hello";
String d = "hello";
System.out.println(Objects.equals(c, d)); // true
String str = null;
Objects.requireNonNull(str); // 抛出NullPointerException
String str = "hello";
System.out.println(Objects.nonNull(str)); // true
今天就先到这啦!