Java6
(一)、内部类
在一个类的里面,再定义一个类
内部类表示的事物是外部类的一部分
内部类单独出现没有任何意义
特点:内部类可以直接访问外部类,包括私有
外部类访问内部类必须创建对象
(二)、内部类的分类
成员内部类:写在成员位置的,属于外部类的成员
可以被修饰:private,默认,public,protected,static
在jdk16后,在成员内部类里面可以定义静态变量
获取成员内部类对象:
外部类类名.this.变量名(获取外部类的变量值)
静态内部类:
创建格式:外部类名.内部类名 对象名=new 外部类名.内部类名();
调用非静态方法:先创建对象,用对象调用
调用静态方法:外部类名.内部类名.方法名();
局部内部类:
匿名内部类:隐藏了名字的内部类
可以写在成员位置,也可以写在局部位置
格式:
包含了实现/继承关系,方法重写,创建对象
匿名内部类指的是两个括号间的内容
整体是一个对象
(三)、Math
帮助我们进行数学运算的工具类
所有方法都是静态的
常用的方法:
abs有bug ,不能超过取值范围,不然结果会错误
pow第二个参数,一般传递大于1的正整数
(四)、System
工具类,提供一些与系统相关的方法
时间原点:
国内要加8小时
1秒=1000毫秒
常用的方法:
exit方法的形参
0:告诉虚拟机正常停止
非0:告诉虚拟机异常停止
currentTimeMillis返回的是从时间原点到现在过了的毫秒值
arraycopy方法:
1.如果数据源数组和目的地数组都是基本数据类型,那么两者类型必须保持一致
2.拷贝时,需要考虑数组长度
3.如果数据源数组和目的地数组都是引用数据类型,那么子类类型可以赋值给父类类型
(五)、Runtime
表示当前虚拟机运行环境
常用方法:
获取对象不能直接new,要用getRuntime方法
cmd命令:
shutdown :关机
-s :默认1分钟之后关机
-s -t :指定关机时间
-a :取消关机操作
-r :关机并重启
(六)、Object
顶级父类,object类中所有的方法都能被子类访问
只有一个空参构造
常见的方法:一共11个方法
toString默认情况下返回的是地址值,要自己重写返回属性值
equals比较的是地址值是否相等
字符串中的equals会先判断是不是字符串,不是直接false
object的克隆是浅克隆
cloneable接口中没有抽象方法,为标记性接口
cloneable表示一旦实现,当前对象就可以被克隆
浅克隆:基本数据类型克隆属性值
引用数据类型克隆地址值
深克隆:引用数据类型时,会创建新的引用类型进行拷贝,拷贝属性值。
字符串会复用
想快速使用深克隆,可以用第三方工具类Gson
(七)、Objects
成员方法:
equals的细节:
方法会判断s1是否为null,是则直接返回false
如果不是,会再次调用equals
没有重写就比较地址值,重写比较属性值
(八)、BigInteger
构造方法:
对象一旦创建,内部记录的值不能改变。
只要进行运算,都是创建一个新的BigInteger对象
如果BigInteger表示的数字没有超出long的范围,可以用静态方法获取
第二种方式里的字符串必须是整数
第三种方式,字符串中的数字必须和进制吻合
valueOf中 -16-16提前创建好了,多次获取不会创建新的
常见的方法:
存储上限:
(九)、BigDecima
通过传递double类型的小数可能会不精确
通过传递字符串表示的小数来创建对象,精确
valueOf静态方法创建对象
注意:如果没有超过double的取值,建议用静态方法
如果超过了double的取值,建议用构造方法
如果传递的是0-10的整数数字,那么不会重新new
成员方法:
up舍入模式:远离0舍入
down舍入模式:向0舍入
ceiling:向正无穷大舍入
floor:向负无穷大舍入
half_up:四舍五入
half_down:如果大于0.5,则up舍入
底层:遍历每一个字符,找到对应的ASCII码用byte数组存储
(十)、正则表达式
可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性
可以在一段文本中查找满足要求的内容
字符类:
预定义字符:
数量词:
matches 方法判断是否与正则表达式匹配,匹配返回true
要求两个范围的交集,使用&&,一个&仅表示一个&符号
\表示转义字符,两个\表示一个\
本地爬虫和网络爬虫
Pattern:表示正则表达式
Matcher:文本匹配器,按照正则表达式的规则去读取字符串,从头开始读取
在大串中寻找符合规则的子串
String str="Java自从问世以来";
//获得正则表达式的对象
Pattern p=Pattern.compile("Java\\d{0,2}");
//获取文本匹配器的对象
//m:文本匹配器的对象
//str:大串
//p:规则
//m要在str中寻找符合p规则的小串
Matcher m=p.matcher(str);
//寻找是否有满足的子串,有返回true,没有false。在底层会记录子串的起始索引和结束索引+1
boolean b=m.find();
//方法会根据find方法记录的索引进行字符串的截取,会把截取后的小串返回
String s1=m.group();
条件爬取:
package days2;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class pc1 {
public static void main(String[] args) {
String str="Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,"+
"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在不久Java17也会逐渐登上历史舞台";
//定义正则表达式,
// ?相当于Java,=表示Java后面跟随的数据
// 但是获取的时候还是前半部分
String regex="Java(?=8|11|17)";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(str);
while (m.find()){
System.out.println(m.group());
}
}
}
(十一)、Date
Date:时间
SimpleDateFormat:格式化时间
Calendar: 日历
世界标准时间:原子钟
中国时间+8小时
Date类:是一个JDK写好的标准javabean,用来描述时间,精确到毫秒
利用空参构造创建对象,表示系统当前时间
有参构造创建对象,表示指定时间
setTime(long)设置/修改毫秒值
getTime 获取时间毫秒值
(十二)、SimpleDateFormat
作用:
1.格式化:把时间变成我们喜欢的格式
2.解析:把字符串表示的时间变成Date对象
构造方法:
成员方法:
格式化时间常用模式:
(十三)、Calendar
是抽象类,不能直接创建对象。
可以单独修改年月日
常用方法:
通过getInstance获取子类对象
底层:根据不同时区,获取不同的日历对象
获取月份是0-11
星期:1是星期天
get传的是数组的索引。纪元,年,月,日。。共17个储存在一个数组中
底层中索引有代表的常量
(十四)、jdk8 新增时间类
ZoneId:时区
Instant:时间戳
isbefore:判断调用者的时间是否在参数时间的前面
isafter:判断调用者的时间是否在参数时间的后面
ZoneDateTime:带时区的时间
DateTimeFormatter:用于时间的格式化和解析
LocalDate:年,月,日
LocalTime:时,分,秒
LocalDateTime:年,月,日,时,分,秒
LocalDateTime可以转换
Duration:时间间隔(秒,纳秒)
Period:时间间隔(年,月,日)
ChronoUnit:时间间隔(所有单位)
.between()参数2减参数1
(十五)、包装类
基本数据类型对应的引用数据类型(用对象将基本数据类型包装起来)
char 对应的是 Character
int 对应的是 Integer
其他直接首字母大写
获取Integer对象
包装类-128到127已经提前创建好了
jdk5以后:
新增自动装箱,自动拆箱
直接使用Integer进行赋值,不需要new 或调用方法
成员方法:
文章评论