java常用api篇【完整版】
13-常用api
Math
- abs,绝对值
- ceil,向上取整
- floor,向下取整
- round,四舍五入
- max,获取两个int中的较大值
- min,获取两个int中的较小值
- random,返回值为double的随机数
- sqrt,开平方根
- cqrt,开立方根
System
- exit,终止当前运行的java虚拟机,System.exit(0),0表示正常停止,非0表示异常停止
- currentTimeMillis,返回当前系统的时间毫秒值形式,System.currentTimeMillis()返回long类型
- arraycopy,数组拷贝, System.arraycopy(arr1, 0, arr2, 0, 10)
- 参数一,数据源
- 参数二,数据源第几个索引开始拷贝
- 参数三,目的地
- 参数四,目的地开始索引
- 参数五,拷贝的个数
Runtime
- Runtime表示当前虚拟机的运行环境
- getRuntime(),当前运行环境对象
- exit(),停止虚拟机
- availableProcessors(),获取cpu线程数
- maxMemory,JVM能从系统中获取的总内存大小
- totalMemory,JVM已经从系统中获取的总内存大小
- freeMemory,JVM剩余内存大小
- exec,运行cmd命令
- shutdowm,关机
- -s,默认在一分钟之后关机
- -s -t,指定时间关机
- -a,取消关机操作
- -r,关机并重启
Object
成员方法
- toString(),打印对象的地址值,一般会重写
- equals(),比较两个对象是否相等,底层先做非空判断再比较
- isNull(),判断对象是否为null
- nonNull(),与isNull返回值相反
- clone(),对象克隆,浅克隆
- 深克隆的第三方工具Gson,new Gson().toJson().FromJson()
BigInteger(最大值:42亿的21亿次方)
- public BigInteger(int num, Random rnd),获取随机大整数,范围:[ 0~2的num次方 - 1 ]
- 获取一个指定的大整数,例如:public BigInteger(“999999999999”),参数是字符串,字符串必须是整数
- 静态方法valueOf,内部优化,如果多次获取不会重新创建,但是参数最大是long类型的最大值是
BigDecimal
- 用来表示很大的小数
- 通过传递字符串表示小数来出创建对象,精确的,public BigDecimal(“999999999999.99999”)
正则表达式
- “String”
.
matchs(“regex”),判断是都与正则表达式匹配,匹配返回true
爬虫
- Pattern,获取正则表达式的对象
- pattern p = Parttenplie(“Java\\{0,2}”)
- Matcher,获取文本匹配器的对象
- Matcher m = p.matcher(str)
- Boolean b = m.find()
- String s1 = m.group(),根据find方法记录的索引进行字符串的截取
- 例
package io.xiaoduo.api;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.MalformedURLException;
import java.URL;
import java.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Spider {public static void main(String[] args) throws IOException {URL url = new URL(".html");URLConnection coon = url.openConnection();BufferedReader br = new BufferedReader(new InputStreamReader(coon.getInputStream()));String line;String regex = "[1-9]\\d{17}";Pattern pattern = Patternpile(regex);while ((line = br.readLine()) != null) {System.out.println(line);Matcher matcher = pattern.matcher(line);while (matcher.find()) {System.out.println(matcher.group());}}}
}
带规则爬取
- replaceAll(String regex, String newStr),按照正则表达式的规则进行替换
- split(String regex),按照正则表达式的规则切割字符串
捕获分组和非捕获分组
- 分组:以左括号为基准,为第一组,以此类推
- 捕获分组
- 后续还要继续使用本组的数据
- 正则内部使用:\\组号
- 正则外部使用:$组号
- 非捕获分组:分组之后不需要再使用本组数据,仅仅是把数据括起来,不占组号,( ? : )( ? = )( ? ! )都是非捕获分组
JDK7时间-Date
- 如何创建日期对象
- Date date = new Date()
- Date date = new Date(指定毫秒值)
- 如何修改时间对象中的毫秒值
- setTime(毫秒值)
- 如何获取时间对象中的毫秒值
- getTime(毫秒值)
JDK7时间-SimpleDateFormat
-
格式化:把时间变成我们喜欢的格式
-
解析:把字符串表示的时间变成date对象
-
Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = sdf.format(d); sout(dateStr); // "2023-06-26 16:54:00"
-
String str = "2023-11-11 11:11:11"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = sdf,parse(str); sout(date); // Set Nov 11 11:11:11 CST 2023
JDK7时间-Calendar
-
Calender代表了系统当前时间的日历对象,可以单独修改,获取时间中的年,月,日
-
细节:Calendar是一个抽象类,不能直接创建对象
-
底层原理:会根据系统的不同时区,获取不同的日历对象,默认表示当前时间
-
Calendar c = Calendar.getInstance(); sout(c);
JDK8日历-Calendar
- LocalDate:年、月、日
- LocalTime:时、分、秒
- LocalDateTime:年、月、日、时、分、秒
JDK8工具类
- chronoUnit,计算时间间隔(所有单位)
包装类
什么是包装类
- 用一个对象,把基本数据类型包起来,在堆内存中开辟了一个空间
每一个基本数据类型对应的包装类
byte | Byte |
---|---|
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
获取Interger对象的方式
- Integer i1 = new Integer(1);
- Integer i2 = new Integer(“1”);
- Integer i3 = Integer . valueOf(1);
两种方式获取对象的区别
- Integer . valueOf创建-128-127之间的数据,地址值相同
- new Integer是重新开辟空间
- 原理:在实际开发中,-128-127之间的数据,用的比较多,如果每次都是new出来的对象,太浪费内存,所以提前把这个范围的每一个数据都创建好对象,如果用到了不会创建新的,而是返回已经创建好的对象
如何计算
- 在JDK5的时候提出了一个机制,自动装箱和自动拆箱
- 自动装箱:把基本数据类型会自动的变成其对应的包装类
- 自动拆箱:把包装类自动变成其对应的基本数据类型
- Integer i = 10;
- int i = new Integer(10);
Integer成员方法
方法名 | 说明 |
---|---|
public static String toBinaryString(int i) | 得到二进制 |
public static String toOctalString(int i) | 得到八进制 |
public static String toHexString(int i) | 得到十六进制 |
public static int parseInt(String s) | 将字符串类型的整数转成int类型的整数 |
- 细节1:在类型转换的时候,括号中的参数只能是数字不能是其他,否则会报错
- 细节2:8种包装类当中,除了Character都有对应的parseXxx的方法,进行类型转换,例如:boolean b = Boolean.parseBoolean(“true”);
- 键盘录入补充:使用Scanner对象的nextLine()方法能接受一整行数据,不受空格限制,只有回车才停止
练习
package io.xiaoduo.api;import java.util.ArrayList;
import java.util.Scanner;public class Exercise1 {public static void main(String[] args) {ArrayList<Integer> intArr = new ArrayList<>();Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入");String val = sc.nextLine();Integer num = Integer.parseInt(val);intArr.add(num);int total = getTotal(intArr);if (total >= 200) break;}for (int i = 0; i < intArr.size(); i++) {System.out.println(intArr.get(i));}}private static int getTotal(ArrayList<Integer> intArr) {int t = 0;for (int i = 0; i < intArr.size(); i++) {t += intArr.get(i);}return t;}
}
package io.xiaoduo.api;public class Exercise2 {public static void main(String[] args) {String str = "12345678";System.out.println(str);System.out.println(parseInt(str));}private static int parseInt(String str) {if (str.length() < 1 || str.length() > 10) {System.out.println("转换的字符长度在1-10之间");return 0;}if (str.substring(0, 1).equals("0")) {System.out.println("0不能开头");return 0;}int num = 0;for (int i = 0; i < str.length(); i++) {int item = str.charAt(i) - '0';num = num * 10 + item;}return num;}
}
发布评论