API是Java帮我们写好的各种类,这些API里面有很多方法,我们可以通过API帮助文档查阅
1.Math
1.帮助我们进行数学计算的工具
2.里面的方法都是静态的
方法名 | 说明 |
public static int abs(int a) | 获取参数绝对值 |
public static double ceil(double a) | 向上取整 |
public static double floor(double a) | 向下取整 |
public static int round(float a) | 四舍五入 |
public static int max(int a, int b) | 获取两个int值中的较大值 |
public static double pow(double a, double b) | 返回a的b次幂的值 |
public static double random() | 返回值为double的随机值,范围[0.0, 1 |
2.System
1. System:也是一个工具类,提供了一些与系统相关的方法
2.时间原点:1970年1月1日 0:0:0,我国在东八区,有8小时时差。
3.1秒= 1000 毫秒
4.常见方法如下:
5. exit:停止虚拟机
6. currentTimeMillis:获取当前时间的毫秒值
7. arraycopy:拷贝数组
方法名 | 说明 |
public static void exit(int status) | 终止当前运行的 Java 虚拟机 |
public static long currentTimeMillis() | 返回当前系统的时间毫秒值形式 |
public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) | 数组拷贝 |
3.Runtime
1.Runtime对象的创建 Runtime r=Runtime.getRuntime();
方法名 | 说明 |
public static Runtime getRuntime() | 当前系统的运行环境对象 |
public void exit(int status) | 停止虚拟机 |
public int availableProcessors() | 获得CPU的线程数 |
public long maxMemorv() | JVM能从系统中获取总内存大小(单位byte) |
public long totalMemory() | JVM已经从系统中获取总内存大小(单位byte) |
public long freeMemory() | JVM剩余内存大小(单位byte) |
public Process exec(String command) | 运行cmd命令 |
4.Object
1.Object是Java中的顶级父类。所有的类都直接或间接的继承于Object类。
2.Object类中的方法可以被所有子类访问,所以我们要学习Object类和其中的方法。
方法名 | 说明 |
public String tostring() | 返回对象的字符串表示形式 |
public boolean equals(Object obj) | 比较两个对象是否相等 |
protected Object clone(int a) | 对象克隆 |
toString:默认情况下,因为bject类中的tostring万法返回的是地址值,如果我们打印一个对象,想要看到属性值的话,那么就重写toString方法就可以了。日在重写的方法中,把对象的属性值进行拼接。
equals:默认比较的是地址值,如果重写equals就可以比较属性值。
equals:调用equals方法的调用者要看自己类中的有没有equals方法,没有就只能继承父类Object的euuals方法。
package com.itheima.ae4objectdemo;
public class ObjectDemo{
public static void main(String[] args){
String s="abc";
StringBuilder sb = new StringBuilder("abc");
System.out.println(s.equals(sb));// false
//因为equals方法是被s调用的,而s是字符串
//所以equals要看String类中的
//字符串中的equals方法,先判断参数是否为字符串
//如果是字符串,再比较内部的属性
//但是如果参数不是字符串,直接返回farse
System.out.println(sb.equals(s));// false
//因为equals方法是被sb调用的,而sb是StringBuilder
//所以这里的equals方法要看StringBuilder中的equals方法
//那么在StringBuilder当中,没有重写equals方法
//使用的是Object中的
//在Object当中默认是使用==号比较两个对象的地址值
//而这里的s和sb记录的地址值是不一样的,所以结果返回false
}
}
.克隆对象
细节:
1方法在底层会帮我们创建一个对象,并把原对象中的数据拷贝过去。
2书写细节:
重写Object中的clone方法
让javabean类实现Cloneable接口创建原对象并调用clone就可以了。
5.Objects
方法名 | 说明 |
public static boolean equals(Object a, object b) | 先做非空判断,比较两个对象 |
public static boolean isNull(Object obj) | 判断对象是否为null,为nul1返回true,反之 |
public static boolean nonNull(Object obj) | 判断对象是否为null, 跟isNul1的结果相反 |
1.Objects是一个对象工具类,提供了一些操作对象的方法
2. equals(对象1,对象2):先做非空判断,比较两个对象
3.isNull(对象):判断对象是否为空
4. nonNull(对象):判断对象是否不是空
6.BigInteger构造方法
方法名 | 说明 |
public BigInteger(int num, Random rnd) | 获取随机大整数,范围:[e ~ 2的num次方-1] |
public BigInteger(String val) | 获取指定的大整数 |
public BigInteger(String val, int radix) | 获取指定进制的大整数 |
public static BigInteger valueof(long val) | 静态方法获取BigInteger的对象,内部有优化 |
BigInteger构造方法小结
1.如果BigInteger表示的数字没有超出long的范围,可以用静态方法获取。2.如果BigInteger表示的超出long的范围,可以用构造方法获取。3. 对象一旦创建,BigInteger内部记录的值不能发生改变。4.只要进行计算都会产生一个新的BigInteger对象
Biginteger的常见方法
方法名 | 说明 |
public BigInteger add(BigInteger val) | 加法 |
public BigInteger subtract(BigInteger val) | 减法 Ma |
public BigInteger multiply(BigInteger val) | 乘法 |
public BigInteger divide(BigInteger val) | 除法,获取商 |
public BigInteger[] divideAndRemainder(BigInteger val) | 除法, 获取商和余数 |
public boolean equals(Object x) | 比较是否相同 |
public I BigInteger pow(int exponent) | 次幂 |
public BigInteger max/min(BigInteger val) | 返回较大值/较小值 |
public int intValue(BigInteger val) | 转为int类型整数, 超出范围数据有误 |
总结
1. BigInteger表示一个大整数。
2.如何获取BigInteger的对象?
BigInteger b1 = Biginteger.valueOf(0.1);BigInteger b1 = new BigInteger("整数”);
3.常见操作
加:add 减:subtract
乘:multiply 除:divide、 divideAndRemainder
比较:equals、max、min
次幂:pow
转成整数:intValue、 longValue
7.BigDecima的作用
1.用于小数的精确计算
2.用来表示很大的小数
BigDecima创建对象的两种方法
通过传递字符串表示的小树来创建对象:BigDecimal bd3=new=BigDecimal(val:"0.01")
通过静态放方法获取对象:BigDecimal bd4=new BigDecimal.valueof(10);
细节:
1.如果要表示的数字不大,没有超出double的取值范围,建议使用静态方法
2.如果要表示的数字比较大,超出了double的取值范围,建议使用构造方法
3.如果我们传递的是8~18之间的整数,包含e,包含10,那么方法会返回已经创建好的对象,不会重新new
方法名 | 说明 |
public static BigDecimal valueof(double val) | 获取对象 |
public BigDecimal add(BigDecimal val) | 加法 |
public BigDecimal subtract(BigDecimal val) | 减法 |
public BigDecimal multiply(BigDecimal val) | 乘法 |
public BigDecimal divide(BigDecimal val) | 除法 |
public BigDecimal divide(BigDecimal val,精确几位,舍入模式) | 除法 |
1. BigDecimal的作用是什么?
表示较大的小数和解决小数运算精度失真问题。
2. BigDecimal的对象如何获取?
BigDecimal bd1 = new BigDecimal(”较大的小数”);BigDecimal bd2 = BigDecimal.valueOf(0.1);
3.常见操作
加:add
减:subtract
乘:multiply
除:divide(四舍五入:RoundingMode.HALF_UP)
8.正则表达式
正则表达式的作用
作用一:
校验字符串是否满足规则
[abc] | 只能是a, b,或c |
[^abc] | 除了a, b, c之外的任何字符 |
[a-ZA-Z] | a到zA到Z,包括(范围) |
[a-d[m-p]] | a到d,或m到p |
[a-z&&[def]] | d,e,或f(交集) |
[a-z&&[^bc]] | a到z,除了b和c(等同于[ad-2]) |
[a-z&&[^m-pl] | a到z,除了m到p(等同于[a-[g-z]) |
. | 任何字符 |
\d | 一个数字:[0-9] |
\D | 非数字:[^0-9] |
\s | 一个空白字符:[\t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | [a-ZA-Z 0-91英文、数字、下划线 |
\W | [^\w]一个非单词字符 |
X? | x,一次或0次 |
x* | X,零次或多次 |
X+ | x,一次或多次 |
X{n} | X,正好n次 |
X{n,} | X,至少n次 |
X{n,m} | X,至少n但不超过m次 |
符号 | 含义 | 举例 |
[] | 里面的内容出现一次 | 0-9] [a-zA-Z0-9] |
() | 分组 | a(bc)+ |
^ | 取反 | [^abc] |
&& | 交集,不能写单个的& | [a-z&&m-p] |
| | 写在方括号外面表示并集 | [a-zA-Z0-9] x|X |
. | 任意字符 | \n回车符号不匹配 |
\ | 转义字符 | \\d |
\\d | 0-9 | \\d+ |
\\D | 非0-9 | \\D+ |
\\s | 空白字符 | \t\n\x0B\f\r |
\\S | 非空白字符 | [^\s] |
\\w | 单词字符 | [a-zA-Z_0-9] |
\\W | 非单词字符 | [^\w] |
? | 0次或1次 | \\d? |
* | 0次或多次 | \\d* |
+ | 1次或多次 | \\d+ |
{} | 具体次数 | a{7} |
(?i) | 忽略后面字符的大小写 | (?i)abc |
a((?i)b)c | 只忽略b的大小写 | a((?i)b)c |
作用二:
在一段文本中查找满足要求的内容
本地爬虫: 爬取本地信息中符合要求的信息
package lianxi;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class text1 {
public static void main(String[] args) {
String str = "Java自从95年问世以来,经历了很多版木,月前企业中用的最多的是Java8和Java11, "+
"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久了ava17也会逐渐登上历史舞台";
Pattern p =Pattern.compile("Java\\d{0,2}");
Matcher ss = p.matcher(str);
while (ss.find()){
String s=ss.group();
System.out.println(s);
}
}
}
方法名 | 说明 |
public String[] matches(String regex) | 判断字符串是否满足正则表达式的规则 |
public String replaceAll(String regex, string newstr) | 按照正则表达式的规则进行替换 |
public String[] split(String regex) | 按照正则表达式的规则切割字符串 |
代码演示
package lianxi;
public class text2 {
public static void main(String[] args) {
/* 有一段字符串:小诗诗dqwefqwfqwfwg12312小丹丹dqwefqwfqwfwq12312小恶恋
要求1:把字符串中三个姓名之间的字母替换为vs
要求2:把字符串中的三个姓名切割出来 */
String s="小诗诗dqwefqwfqwfwq12312小丹丹dqwefqwfqwfwq12312小惠惠";
// 细节:
// 方法在底层跟之前一样也会创建文本解析器的对象
// 然后从头开始去读取字符串中的内容,只要有满足的,那么就用第二个参数去替换。
String resutl = s.replaceAll("[\\w&&[^_]]+","vs");
System.out.println(resutl);
//字符切割
String[] arr = s.split( "[\\w&&[^_]]+");
for (int i= 0; i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
捕获分组
后续还需要使用本组的数据。
正则内部使用:\\组号
正则外部使用:$组号
非捕获分组:分组后不需要再用本组数据,仅仅是把数据括起来
符号 | 含义 | 举例 |
(?:正则) | 获取所有 | Java(?:8|11|17) |
(?=正则) | 获取前面部分 | Java(?=8|11|17) |
(?!正则) | 获取不是指定内容的前面部分 | Java(?!8|11|17) |
package lianxi;
public class text3 {
public static void main(String[] args) {
// 需求1:判断一个字符串的开始字符和結束字符是否一致?只考虑一个字符
// 举例:a123a b456b 17891 &abc& a123b(false)
// 组号:表示把第X组的内容再出来用一次
String regex1="(.)\\w+\\1";
System.out.println("a123a".matches(regex1));
System.out.println("b456b".matches(regex1));
System.out.println("17891".matches(regex1));
System.out.println("&abc&".matches(regex1));
System.out.println("a123b".matches(regex1));
System.out.println("---------1");
// 需求2:判断一个字符串的开始部分和结束部分是否一致?可以有多个字行
// 举例: abc123abc b456b 123789123 &!@abc&!@ abc123abd(false)
String regex2 ="(.+).+\\1";
System.out.println("abc123abc".matches(regex2));
System.out.println("b456b".matches(regex2));
System.out.println("123789123".matches(regex2));
System.out.println("&!@abc&I@".matches(regex2));
System.out.println("abc123abd".matches(regex2));
// System.out.println("------ ------------------");
// 需求3:判断一个字符串的开始部分和结束部分儿否一致?开始部分内部每个字符也需要一致
// 举例: aaa123aaa bbb456bbb 111789111 &&abc&&
// (.):把首字母看做一组
// \\2把首字母拿出来再次使用
// *:作用于\2,表示后面重复的内容出现0次或多次
String regex3="((.)\\2*)\\w+\\1";
System.out.println("aaa123aaa".matches(regex3));
System.out.println("bbb456bbb".matches(regex3));
System.out.println("111789111".matches(regex3));
System.out.println("&&abc&&".matches(regex3));
System.out.println("aaa123aab".matches(regex3));
}
}
分组去重复
package lianxi;
public class text4 {
public static void main(String[] args) {
/*需求:
将字符串:我要学学编编编编程程程程程程
替换为:我要学编程*/
String str = "我要学学编编编编程程程程程程";
// 需求:把重复的内容 替换为 单个的
// 学学 学
// 编编编编 编
// 程程程程程程 程
// (.)表示把重复内容的第一个字符看做一组
// \\1表示第一字符再次出现
// + 至少一次
// $1表示把正则表达式中第一组的内容,再拿出来用
String ss=str.replaceAll("(.)\\1+","$1");
System.out.println(ss);
}
}
1.正则表达式中分组有两种:
捕获分组、非捕获分组
2.捕获分组(默认):
可以获取每组中的内容反复使用。3.组号的特点:
从1开始,连续不间断
以左括号为基准,最左边的是第一组
4.非捕获分组:
分组之后不需要再用本组数据,仅仅把数据括起来,不占组号。
(?:)(?=)(?!)都是非捕获分组
9.Date类
1、如何创建日期对象?
Date date = new Date();
Date date = new Date(指定毫秒值);
2、如何修改时间对象中的毫秒值
setTime(毫秒值);
3、如何获取时间对象中的毫秒值
getTime();
SimpleDateFormat 类
1. SimpleDateFormat的两个作用
格式化
解析
2.如何指定格式
yyyy年MM月dd日 HH:mm:ss
构造方法 | 说明 |
public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认格式 |
public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat,使用指定的格式 |
常用方法 | 说明 |
public final String format(Date date) | 格式化(日期对象->字符串) |
public Date parse(String source) | 解析(字符串 ->日期对象) |
格式化日期
package lianxi;
import java.text.SimpleDateFormat;
import java.util.Date;
public class text6 {
public static void main(String[] args) {
SimpleDateFormat d=new SimpleDateFormat("yyyy年mm月dd日 HH时mm分ss秒 EE");
Date dd=new Date();
String format = d.format(dd);
System.out.println(format);
}
}
解析字符串日期
package lianxi;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class text6 {
public static void main(String[] args) throws ParseException {
String str="2023-11-11 11:11:11";
SimpleDateFormat simp=new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
Date parse = simp.parse(str);
System.out.println(parse);
Calender类
Calendar代表了系统当前时间的日历对象,可以单独修改、获取时间中的年,月,日细节:Calendar是一个抽象类,不能直接创建对象。
获取Calendar日历类对象的方法
方法名 说明
public static Calendar getInstance() 获取当前时间的日历对象
方法名 | 说明 |
public final Date getTime() | 获取日期对象 |
public final setTime(Date date) | 给日历设置日期对象 |
public long getTimeInMillis() | 拿到时间毫秒值 |
public void setTimeInMillis(long millis) | 给日历设置时间毫秒值 |
public int get(int field) | 取日历中的某个字段信息 |
public void set(int field, int value) | 修改日历的某个字段信息 |
public void add(int field, int amount) | 为某个字段增加/减少指定的值 |
小结:
1.Calendar表示什么?
表示一个时间的日历对象
2.如何获取对象
通过getlnstance方法获取对象
3.常见方法:
setXxx:修改
getXxx:获取
add:在原有的基础上进行增加或者减少4.细节点:
日历类中月份的范围:0~11
日历类中星期的特点:星期日是一周中的第一天
JDK八的更新后的时间类
Zoneld时区
方法名 | 说明 |
static Set<String> getAvailablezoneIds() | 获取Java中支持的所有时区 |
static ZoneId systemDefault() | 获取系统默认时区 |
static ZoneId of(String zoneId) | 获取一个指定时区 |
Instant时间截
方法名 | 说明 |
static Instant now() | 获取当前时间的Instant对象(标准时间) |
static Instant ofXxxx(long epochMilli) | 根据(秒/毫秒/纳秒)获取Instant对象 |
ZonedDateTime atZone(ZoneId zone) | 指定时区 |
boolean isxxx(Instant otherInstant) | 判断系列的方法 |
Instant minusxxx(long millisTosubtract) | 减少时间系列的方法 |
Instant plusxxx(long millisToSubtract) | 增加时间系列的方法 |
ZoneDateTime带时区的时间
方法名 | 说明 |
static ZonedDateTime now() | 获取当前时间的ZonedDateTime对象 |
static ZonedDateTime ofxxxx(。。) | 获取指定时间的ZonedDateTime对象 |
ZonedDateTime withxxx(时间) | 修改时间系列的方法 |
ZonedDateTime minusxxx(时间) | 减少时间系列的方法 |
ZonedDateTime plusxxx(时间) | 增加时间系列的方法 |
DateTimeFormatter用于时间的格式化和解析
方法名 | 说明 |
static DateTimeFormatter ofPattern(格式) | 获取格式对象 |
String format(时间对象) | 按照指定方式格式化 |
package lianxi;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class text8 {
public static void main(String[] args) {
ZonedDateTime z= Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
DateTimeFormatter sd=DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss EE a");
String ww = z.format(sd);
System.out.println(ww);
}
}
Calendar日历类
LocalDate:年、月、日
LocalTime:时、分、秒
LocalDateTime:年、月、日 时、分、秒
方法名 | 说明 |
static Xxx now() | 获取当前时间的对象 |
static Xxx of(。。。) | 获取指定时间的对象 |
get开头的方法 | 获取日历中的年、月、日、时、分、秒等信息 |
isBefore, isAfter | 比较两个LocalDate |
with开头的 | 修改时间系列的方法 |
minus开头的 | 减少时间系列的方法 |
plus开头的 | 增加时间系列的方法 |
LocalDateTime可以转换为LocalDate或LocalTime
方法名 | 说明 |
public LocalDate toLocalDate() | LocalDateTime转换成一个LocalDate对象 |
public LocalTime toLocalTime() | LocalDateTime转换成一个LocalTime对象 |
工具类
Duration、Period、ChronoUnit
Duration:用于计算两个“时间”间隔(秒,纳秒)
Period:用于计算两个“日期”间隔(年、月、日)
ChronoUnit: 用于计算两个“日期”间隔
10.包装类
1.什么是包装类?
基本数据类型对应的对象
2.JDK5以后对包装类新增了什么特性?
自动装箱、自动拆箱
3.我们以后如何获取包装类对象?
不需要new,不需要调用方法,直接赋值即可
Integer i = 10;
Integer i1 = 10;Integer i2 = 10;
Integer i3 = i1 + i2;
方法名 | 说明 |
public static String toBinaryString(int i) | 得到二进制 |
public static String toOctalString(int i) | 得到八进制 |
public static String toHexString(int i) | 得到十六进制 |
public static int parselnt(String s) | 将字符串类型的整数转成int类型的整数 |
package lianxi;
public class text9 {
public static void main(String[] args) {
String s = Integer.toBinaryString(100);
System.out.println(s);
String s1 = Integer.toOctalString(100);
String s2 = Integer.toHexString(100);
System.out.println(s1);
System.out.println(s2);
// 将字符串类型的整数转成int类型的整数
// 强类型语言:每种数据在java中都有各自的数掘类型
// 在计算的时候,如果不是同一种数据类型,是无法直接计算的。
int i = Integer.parseInt("123");
System.out.println(i);
System.out.println(i + 1);//124
// 细节1:
// 在类型转换的时候,括号中的参数只能是数字不能是其他,否则代码会报错
// 细节2:
// 8种包装类当中,除了Character都有对应的parsexxx的方法,进行类型转换
String str = "true";
boolean b=Boolean.parseBoolean(str);
System.out.println(b);
}
}