1.Math
2.System
public class Main {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
int[] arr1 = new int[8];
System.arraycopy(arr,0,arr1,1,5);
// 从1970.1.1开始到现在的毫秒形式
long l1= System.currentTimeMillis();//1710464757047
System.out.println(l1);
for (int i=0;i<arr.length;i++)
{
System.out.println(arr1[i]);
}
// 0:当前虚拟机是正常停止
// 1:当前虚拟机是异常停止
System.exit(0);
}
}
3.runtime
Runtime r1=Runtime.getRuntime();
// 停止虚拟机
// Runtime.getRuntime().exit(0);
// 获得CPU线程数
System.out.println(Runtime.getRuntime().availableProcessors());//16
// 总内存大小,单位字节
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024);//3934
// 剩余内存大小
System.out.println(Runtime.getRuntime().freeMemory()/1024/1024);//243
// 运行cmd
// shutdown关机 ,加上参数才运行,-s:1min之后关机;-a取消关机
Runtime.getRuntime().exec("shutdown -a");
4 object
所有类直接或间接继承object类
//toString:默认返回地址值
//打印一个对象,可以重写该方法返回属性值
public String toString() {
return "Animal{a = " + a + ", b = " + b + "}";
}
//equals只能判断引用类型,看地址
String s1="1";
String s2="1";
String s3="3";
StringBuilder sb=new StringBuilder("1");
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true
System.out.println(s1==s3);//false
System.out.println(s1.equals(s3));//false
// equals被String调用,要看sb是不是字符串,此时sb不是字符串,而是StringBuilder对象
System.out.println(s1.equals(sb));//false
// equals被StringBuilder调用,要看两个地址是否相等
System.out.println(sb.equals(s1));//false
5 Clone
调用clone方法时,分配的内存和源对象一样
ctrl+n
ctrl+f12
protected native Object clone() throws CloneNotSupportedException;
所以要去重写
Animal.java
//Cloneable没有抽象方法,那么其是标记性接口
//Cloneable表示实现后当前类对象可以克隆,没有实现就不能
public class Animal implements Cloneable{
public int a=1;
public static int b=2;
@Override
public String toString() {
return "KELONG";
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
Main.java
public class Main {
public static void main(String[] args) throws IOException, CloneNotSupportedException {
Animal an=new Animal();
Animal an1=(Animal) an.clone();
System.out.println(an);//KELONG
System.out.println(an1);//KELONG
}
}
浅克隆:默认,引用克隆指向同一地址,基本数据类型克隆直接拷贝过来
深克隆: 引用克隆指向不同地址,基本数据类型复用串池里面的,使用需要重写方法或使用第三方工具类
6 object工具类
public static void main(String[] args) throws IOException, CloneNotSupportedException {
Animal an=new Animal();
Animal an1=(Animal) an.clone();
// 先an非空判断,an非空就用an.equals方法,如果重写比较地址,没有比较属性
System.out.println(Objects.equals(an,an1));//false
System.out.println(Objects.isNull(an));//false
System.out.println(Objects.nonNull(an));//true
}
7 BigInteger
Random r = new Random();
// 获取随机大整数,范围0-2^4-1
BigInteger bgi = new BigInteger(4, r);
System.out.println(bgi);//9
// 获取指定大整数
BigInteger bgi1 = new BigInteger("10");
System.out.println(bgi1);//10
// 获取指定进制大整数
// 2表示2进制
BigInteger bgi2 = new BigInteger("10",2);
System.out.println(bgi2);//2
// 提前把-16-16创建为BigInteger对象,多次获取不创建新的
BigInteger bgi3 =BigInteger.valueOf(16);
BigInteger bgi4 =BigInteger.valueOf(16);
System.out.println(bgi3==bgi4);//true,表示同一个对象
8 BigDecima
9 爬虫
package DEMO1;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//找出里面所有的javaxx
public class Main {
public static void main(String[] args) throws IOException, CloneNotSupportedException {
String str="网页Java 是一种流行的编程语言,可以用于开发桌面应用程序、网页应用程序和移动应用程序。Oracle 提供了 Java12 的最新版本,让您可以享受更多的功能和安全性。无论您是 Java16 的新手还是专家,都可以在 java2.com 上找到相关的下载、帮助和常见问题。";
//method1();
// 获取正则表达式对象,\\d{0,2}表示Java出现0次-2次
Pattern p=Pattern.compile("Java\\d{0,2}");
// 文本匹配器。m要在str找到符合p规则的小串
Matcher m=p.matcher(str);
while(m.find())
{
String s1=m.group();
System.out.println(s1);
}
}}
// private static void method1() {
//
获取正则表达式对象,\\d{0,2}表示Java出现0次-2次
// Pattern p=Pattern.compile("Java\\d{0,2}");
文本匹配器。m要在str找到符合p规则的小串
// Matcher m=p.matcher(str);
从头开始寻找满足条件字串,有返回true,底层记录起始索引和结束索引+1,java是0123,结束索引是4
// boolean b=m.find();
group方法会根据find的索引截取数据
// String s1=m.group();
// System.out.println(s1);
第二次find会读取后面的内容
// b=m.find();
// String s2=m.group();
// System.out.println(s2);
// }
//}
String str="网页JAva是一种流行的编程语言,可以用于开发桌面应用程序、网页应用程序和移动应用程序。Oracle 提供了 JAva11 的最新版本,让您可以享受更多的功能和安全性。无论您是 JAVA17 的新手还是专家,都可以在 java2.com 上找到相关的下载、帮助和常见问题。";
//method1();
// 获取正则表达式对象,\\d{0,2}表示Java出现0次-2次
String s="Java\\d{0,2}";
// ((?i)java)表示忽略大小写,后面?表示前面的数据是java,=是后面要跟随的数据
// 只要java,不要版本号
String s5="((?i)java)(?=8|11|17)";//JAva JAVA
// 要java,要版本号
String s2="((?i)java)(8|11|17)";//JAva11 JAVA17
String s3="((?i)java)(?:8|11|17)";//JAva11 JAVA17
// 不要版本号为8,11,17 的
String s4="((?i)java)(?!8|11|17)";//JAva java
String str="网页JAva是abbbbbbbbbbbbb一种流行的编程语言,可以用于开发桌面应用程序、网页应用程序和移动应用程序。Oracle 提供了 JAva11 的最新版本,让您可以享受更多的功能和安全性。无论您是 JAVA17 的新手还是专家,都可以在 java2.com 上找到相关的下载、帮助和常见问题。";
// 非贪婪爬取
String s="ab+?";//ab
// 贪婪爬取
String s2="ab+";//abbbbbbbbbbbbb
Pattern p=Pattern.compile(s2);
10 捕获分组
// 判断字符串开始字符与结束字符是否一致
// (.)表示第一个字符任意,.表示中间字符任意,+表示可以多个,\\1表示把第一组数据拿出来用一次
String s1="(.).+\\1";
String s2="(.+).+\\1";
// *作用于\\2,表示0次或多次,外面括号的第一组,里面的是第二组,只看左括号分组
String s3="((.+)\\2*).+\\1";
System.out.println("a123a".matches(s1));//true
System.out.println("a123b".matches(s1));//false
System.out.println("abc123abc".matches(s2));//true
System.out.println("aaa123aaa".matches(s3));//true
String s1="啊啊啊啊啵啵啵啵啵啵笑笑笑笑笑笑笑笑笑";
// +表示1次或者多次
String s2=s1.replaceAll("(.)\\1+","$1");
System.out.println(s2);//啊啵笑
11 非捕获分组
分组之后不再用本组数据,括号只是括起来
// ?: ?! ?=都是非捕获分组,\\1错误 String s1="[1-9]\\d{16}(?:\\d|X|x)\\1";
// \\d 第一个\:编译器将字符串转变为“正则表达式” ,\d匹配数字,|表示或
//RegExp1(?=RegExp2) 匹配后面是RegExp2 的 RegExp1
//RegExp1(?!RegExp2) 匹配后面不是RegExp2 的 RegExp1
String s1="[1-9]\\d{16}(?:\\d|X|x)";
System.out.println("15042919840709121x".matches(s1));
12 Date
// 表示当前时间
Date d1=new Date();
// 从时间原点开始计算,0是long类型的
Date d2=new Date(0L);
System.out.println(d1);//Fri Mar 15 13:35:59 CST 2024
System.out.println(d2);//Thu Jan 01 08:00:00 CST 1970
// 修改时间,1000ms
d2.setTime(1000L);
System.out.println(d2);//Thu Jan 01 08:00:01 CST 1970
//获取当前时间ms值
long time= d1.getTime();
System.out.println(time);//1710480959584
13 SimpleDateFormat
// 作用1:格式化:转变格式
// 从时间原点开始计算,0是long类型的
Date d2=new Date(0L);
SimpleDateFormat sd=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EE");
System.out.println(sd.format(d2));
// 作用2:字符串表示的时间->Date对象
SimpleDateFormat sd1=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
// 要与字符串格式完全一致
String str="1111年22月33日 44:55:66";
Date date=sd1.parse(str);
System.out.println(date);
14 Calendar
// 1.获取日历对象
// Calendar是一个抽象类,不能直接new
Calendar ca=Calendar.getInstance();
Date d=new Date(0L);
// 修改日历的时间
ca.setTime(d);
// 月份:范围0-11,星期:国外星期天=国内星期一 星期第一天
// get(): 1 年 2 月 3一年中第几周
int year=ca.get(1);//ca.get(Calendar.YEAR)
int month=ca.get(2)+1;//ca.get(Calendar.MONTH)
int date=ca.get(5);//ca.get(Calendar.DAY_OF_MONTH)
int week=ca.get(Calendar.DAY_OF_WEEK);
System.out.println(year+","+month+","+date);//1970,1,1
ca.set(Calendar.YEAR,2023);
System.out.println(ca.get(1));//2023
15 JDK8 时间类:时区、时间、格式化
JDK7 多线程有数据安全问题
JDK8 时间对象不可变
// 获得所有时区名称
Set<String> ZoneIds= ZoneId.getAvailableZoneIds();
System.out.println(ZoneIds);//[Asia/Aden, America/Cuiaba, Etc/GMT+9, Etc/GMT+8...]
// 获取当前系统默认时区
ZoneId zid=ZoneId.systemDefault();
System.out.println(zid);//Asia/Shanghai
// 获取指定时区
ZoneId zid1=ZoneId.of("Asia/Shanghai");
System.out.println(zid1);//Asia/Shanghai
// 获取当前时间
Instant now=Instant.now();
System.out.println(now);//2024-03-15T06:15:20.784755300Z
// 根据ms获取对象
Instant instant1=Instant.ofEpochMilli(1L);
System.out.println(instant1);//1970-01-01T00:00:00.001Z
// 指定时区的时间
ZonedDateTime timez=Instant.now().atZone(zid1);
System.out.println(timez);//2024-03-15T14:18:42.601276100+08:00[Asia/Shanghai]
// 时间的判断,对象都是Instant
boolean result=now.isBefore(instant1);
System.out.println(result);//false
Instant instant2=instant1.minusMillis(1000l);
System.out.println(instant2);//1969-12-31T23:59:59.001Z
16 包装类
用一个对象,把基本数据类型包起来
char包装类:Charracter
int包装类:Integer
Integer i1=new Integer(1);
Integer i2=Integer.valueOf(2);
Integer i3=Integer.valueOf(2);
System.out.println(i2);//2
// -128-127使用最多,提前把这个范围内都创建了对象,如果用了不会创建新的
System.out.println(i2==i3);//true
// 自动装箱
Integer i4=3;
// 自动拆箱
int i5=i4;
// JDK5以后int和Integer可以看作一个东西,内部可以转化
// 把整数转为二进制
String s1=Integer.toBinaryString(100);
//把整数转为十六进制
String s2=Integer.toHexString(100);
//把整数转为八进制
String s3=Integer.toOctalString(100);
System.out.println(s1);//1100100
System.out.println(s2);//64
System.out.println(s3);//144
// 将字符串转换为整数
int i=Integer.parseInt("123");
System.out.println(i);//123
17 练习
17.1
输入1-100的整数,累积数值到200退出
public class Main {
public static void main(String[] args) throws IOException, CloneNotSupportedException, ParseException {
ArrayList<Integer> array=new ArrayList<>();
Scanner sc=new Scanner(System.in);
while(true)
{
System.out.println("请输入:");
String s1=sc.nextLine();
int num=Integer.parseInt(s1);
if(num<1||num>100)
{
System.out.println("数值不符!");
continue;
}
array.add(num);
int sum=getSum(array);
if(sum>200)
{
System.out.println("达到200!");
break;
}
}
}
private static int getSum(ArrayList<Integer> array) {
int num=0;
for(int i=0;i<array.size();i++)
{
num+= array.get(i);
}
return num;
}
}
17.2
public class Main {
public static void main(String[] args) throws IOException, CloneNotSupportedException, ParseException {
String str="150";
if(!str.matches("[0-9]\\d{0,9}"))
{
System.out.println("输入有误");
}
// 定义一个变量表示最终结果
int number=0;
for(int i=0;i<str.length();i++)
{
// '0'表示48
int c=str.charAt(i)-'0';
// 第一次输入1,第二次输入2,但要变为12
number=number*10+c;
}
System.out.println(number);//150
}
}
17.3
public class Main {
public static void main(String[] args) throws IOException, CloneNotSupportedException, ParseException {
System.out.println(toBinaryString(6));
}
private static String toBinaryString(int number) {
// 拼接余数
StringBuilder sb=new StringBuilder();
while (true)
{
if(number==0)
{
break;
}
int remain=number%2;
sb.insert(0,remain);
System.out.println(remain);
number=number/2;
}
return sb.toString();
}
}
17.4
生日到现在是几天
public class Main {
public static void main(String[] args) throws IOException, CloneNotSupportedException, ParseException {
// JDK7
// 计算生日ms值
String str="2010年01月08日";
SimpleDateFormat sd=new SimpleDateFormat("yyyy年MM月dd日");
Date date=sd.parse(str);
long time1=date.getTime();
// 计算现在日期
// 第一种方法
// long today=System.currentTimeMillis();
Date date1=new Date();
long time2=date1.getTime();//不要用这两行
long time=time2-time1;
System.out.println(time/1000/60/60/24);
// JDK8
// period侧重年月日,Duration分钟与ms,ChronoUnit全
LocalDate l1=LocalDate.of(2010,1,8);
LocalDate l2=LocalDate.now();
System.out.println(ChronoUnit.DAYS.between(l1,l2));//5180
}
}
17.5
package DEMO1;
import java.io.IOException;
import java.text.ParseException;
import java.time.LocalDate;
import java.util.Calendar;
public class Main {
public static void main(String[] args) throws IOException, CloneNotSupportedException, ParseException {
Calendar c=Calendar.getInstance();
c.set(2000,2,1);
c.add(Calendar.DAY_OF_MONTH,-1);//1是往后加,月份范围0-11
int day=c.get(Calendar.DAY_OF_MONTH);
System.out.println(day);//29
// JDK8
// 设定时间
LocalDate ld=LocalDate.of(2000,3,1);
LocalDate date=ld.plusDays(-1);
System.out.println(date);//2000-02-29
int month=date.getDayOfMonth();
System.out.println(month);//29
// 是不是闰年方法,true就是闰年
System.out.println(ld.isLeapYear());//true
}
}