13、常用类
内部类
-
定义
- 定义在类内部,方法内部或局部代码块中的类
-
特点
- 编译之后可生成独立的字节码文件。
- 内部类可直接访问外部类的私有成员,而不破坏封装。
- 可为外部类提供必要的内部功能组件。
-
成员内部类
-
在类(外部类)的内部,且与外部类的成员是“同一级别”的
-
特点
- 成员的内部类可以使用任意的权限修饰符
- 成员内部类可以直接访问外部的属性和方法
- 成员内部类的属性和外部类的属性重名时,使用外部类名.访问外部类的属性
- 成员内部类不能包含静态成员,但是可以包含静态常量(相当与字面值,不需要内部类调用)
-
-
静态内部类
-
使用static修饰的成员内部类,称之为静态内部类
-
特点:
- 静态内部类可以使用任意访问修饰符
- 静态内部类不能直接访问外部类的实例属性和方法(非静态成员),但是可以直接访问静态的属性和方法
- 静态内部类可以包含静态成员
-
-
局部内部类
-
定义
- 声明在方法内部的类
- 局部类型,适用范围只能在当前方法中
- 但它的实例,可以转为父类型传递出去
-
特点
- 不可以使用任何访问权限修饰符
- 如果局部内部类所在方法是非静态方法,可以直接访问外部类的实例属性和方法
如果局部内部类所在方法是静态方法,只能访问静态属性和方法 - 局部内部类可以访问局部变量,但是局部变量必须是final,JDK1.8 final可以省略
(不可以直接访问局部变量(方法的参数等效于局部变量))
如果一定需要访问,则需要使用final对局部变量进行修饰 - 局部内部类也不能声明静态成员,可以使用静态常量
-
-
匿名内部类
-
直接创建已知的类的子类的对象,则该对象的类型就是匿名内部类
-
特点
- 创建匿名内部类可以使用接口,抽象类,普通的父类(重写),必须实现接口或抽象类中的抽象方法
- 匿名内部类不能手动添加构造方法,不能包含静态的成员
- 匿名内部类中一般不包含特有的方法,不能直接访问,可以通过内部对象方法
- 匿名内部类生成的class文件类名$编号.class
-
-
非静态内部类
- 非静态内部类依赖于外部类对象存在
成员内部类必须先实例化外部类对象然后再实例化成员内部类; - 在非静态内部类中,不能定义静态成员
- 非静态内部类依赖于外部类对象存在
-
注意事项
- 外部类的权限修饰符只能用 public 或者默认
Object类
-
超类、基类,所有类的直接或间接父类,位于继承树的最顶层。
-
任何类,如没有书写extends显示继承某个类,都默认直接继承Object类, 否则为间接继承。
-
Object类中所定义的方法,是所有对象都具备的方法。
-
Object类型可以存储任何对象。
- 作为参数,可接受任何对象。
- 作为返回值,可返回任何对象。
-
getClass()方法
- public final Class<?> getClass(){}
- 返回引用中存储的实际对象类型。
- 应用:通常用于判断两个引用中实际存储对象类型是否一致。
-
hashCode()方法
- public int hashCode(){}
- 返回该对象的十进制的哈希码值。
- 哈希算法根据对象的地址或字符串或数字计算出来的int类型的数值。
- 哈希码并不唯一,可保证相同对象返回相同哈希码,尽量保证不同对象返回 不同哈希码。
-
toString()方法
- public String toString(){}
- 返回该对象的字符串表示(表现形式)。
- 可以根据程序需求覆盖该方法,如:展示对象各个属性值。
-
equals()方法
-
public boolean equals(Object obj){}
-
默认实现为(this == obj),比较两个对象地址是否相同。
-
可进行覆盖,比较两个对象的内容是否相同。
-
equals()方法覆盖步骤
- 比较两个引用是否指向同一个对象。
- 判断obj是否为null。
- 判断两个引用指向的实际对象类型是否一致。
- 强制类型转换。
- 依次比较各个属性值是否相同。
-
-
finalize()方法
- 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象, 进入回收队列。
- 垃圾对象:没有有效引用指向此对象时,为垃圾对象。
- 垃圾回收: 由GC销毁垃圾对象,释放数据存储空间。
- 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。
- 手动回收机制:使用System.gc(); 通知JVM执行垃圾回收。
包装类
-
基本数据类型所对应的引用数据类型。
-
Object可统一所有数据,包装类的默认值是null。
-
8种包装类提供不同类型间的转换方式:
-
Number父类中提供的6个共性方法。
- Integer integer = Integer.valueOf(“110”);
int j = integer.intValue();
- Integer integer = Integer.valueOf(“110”);
-
parseXXX()静态方法(除了Character)。
- int i = Integer.parseInt(“100”);
-
valueOf()静态方法。
-
-
JDK 5.0之后,自动装箱、拆箱。基本数据类型和包装类自动转换。
-
整数缓冲区
- Java预先创建了256个常用的整数包装类型对象。
- 在实际应用当中,对已创建的对象进行复用。
String类
-
字符串字面值是常量,具有不可变性,创建之后不可改变。
-
常用创建方式:
- String str1 = “Hello”;
- String str2 = new String(“World”);
-
public char charAt(int index)
- 根据下标获取字符。
-
public boolean contains(String str)
- 判断当前字符串中是否包含str。
-
int compareTo(String anotherString)
- 按字典顺序比较两个字符串。
-
String concat(String str)
- 将指定字符串连接到此字符串的结尾。
-
boolean equals(Object anObject)
- 将此字符串与指定的对象比较。
-
byte[] getBytes()
- 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
-
int hashCode()
- 返回此字符串的哈希码。
-
String intern()
- 返回字符串对象的规范化表示形式。
-
int indexOf(String str)
- 返回指定子字符串在此字符串中第一次出现处的索引。
-
int lastIndexOf(int ch)
- 返回指定字符在此字符串中最后一次出现处的索引。
-
int length()
- 返回此字符串的长度。
-
String replace(char oldChar, char newChar)
- 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
-
String replaceAll(String regex, String replacement
- 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
-
String[] split(String regex)
- 根据给定正则表达式的匹配拆分此字符串。
-
boolean startsWith(String prefix)
- 测试此字符串是否以指定的前缀开始。
-
public boolean endsWith(String str)
- 判断字符串是否以str结尾。
-
String substring(int beginIndex)
- 返回一个新的字符串,它是此字符串的一个子字符串。
-
String substring(int beginIndex, int endIndex)
- 返回一个新字符串,它是此字符串的一个子字符串。
-
char[] toCharArray()
- 将此字符串转换为一个新的字符数组。
-
String trim()
- 返回字符串的副本,忽略前导空白和尾部空白。
-
public String toUpperCase()
- 将小写转成大写。
StringBuffer
和 StringBuilder 类
-
与String类区别
- StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象
-
StringBuffer与StringBuilder区别
- StringBuffer的方法是线程安全的(不能同步访问)
- StringBuilder 相较于 StringBuffer 有速度优势
-
public StringBuffer append(String s)
- 将指定的字符串追加到此字符序列。
-
public StringBuffer reverse()
- 将此字符序列用其反转形式取代。
-
public delete(int start, int end)
- 移除此序列的子字符串中的字符。
-
public insert(int offset, int i)
- 将 int 参数的字符串表示形式插入此序列中。
-
replace(int start, int end, String str)
- 使用给定 String 中的字符替换此序列的子字符串中的字符。
正则表达式
-
定义:
- 正则表达式就是一个验证字符串格式是否满足要求的字符串,使用一个字符 串匹配一组字符串,这个字符串就是正则表达式。
-
Pattern类
- 正则表达式编译类
-
Matcher类
- 匹配器
-
用途:
-
匹配
-
拆分
-
查找
-
替换
-
叠词处理
-
-
元字符
-
预定义字符
-
边界匹配
-
其他字符
BigDecimal
-
位置
- java.math包中
-
作用
- 精确计算浮点数
-
创建方式
- BigDecimal bd=new BigDecimal(“1.0”)
-
方法
-
加
- BigDecimal add(BigDecimal bd)
-
减
- BigDecimal subtract(BigDecimal bd)
-
乘
- BigDecimal multiply(BigDecimal bd)
-
除
-
BigDecimal divide(BigDecimal bd)
-
divide(BigDecimal bd,int scal,RoundingMode mode)
- 参数scale :指定精确到小数点后几位。
- 参数mode: 指定小数部分的取舍模式,通常采用四舍五入的模式
取值为BigDecimal.ROUND_HALF_UP。
-
-
Date
- Date表示特定的瞬间,精确到毫秒。
- Date类中的大部分方法都已经被Calendar类中的方法所取代。
Calendar
-
Calendar提供了获取或设置各种日历字段的方法。
-
protected Calendar() 构造方法为protected修饰,无法直接创建该对象。
-
方法
- Calendar calendar = Calendar.getInstance();
- System.out.println(calendar.get(Calendar.YEAR));
-
System.out.println(calendar.get(Calendar.MONTH) + 1);
-
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
-
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
-
System.out.println(calendar.get(Calendar.MINUTE));
-
System.out.println(calendar.get(Calendar.SECOND));
- //获取这个月最大的天数
-
System.out.println(calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
-
//这个最小天数
-
System.out.println(calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
-
//获取月的最大天数
-
System.out.println(calendar.getMaximum(Calendar.DAY_OF_MONTH));
-
//获取月的最小天数
-
System.out.println(calendar.getMinimum(Calendar.DAY_OF_MONTH));
- //相当于减了一天
-
calendar1.add(Calendar.DAY_OF_MONTH,-1);
- //转换
-
//date --- calendar
-
Date date = new Date();
-
Calendar instance = Calendar.getInstance();
-
instance.setTime(date);
-
//calendar --- date
-
Date date1 = instance.getTime();
SimpleDateFormat
-
SimpleDateFormat是以与语言环境有关的方式来格式化和解析日期的类。
-
进行格式化(日期 -> 文本)
- Date date = new Date();
-
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
-
String format = simpleDateFormat.format(date);
-
解析(文本 -> 日期)
- SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(“yyyy-MM-dd”);
-
String string = "2020-07-30";
-
Date date1 = simpleDateFormat1.parse(string);
-
常用的时间模式字母
Math
-
Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和 三角函数。
-
方法
- //绝对值
-
System.out.println(Math.abs(10));
-
System.out.println(Math.abs(-10));
-
//返回大于或等于这个数字的最小整数
-
System.out.println(Math.ceil(3.5));
-
//返回小于或等于这个数字的最大整数
-
System.out.println(Math.floor(3.5));
-
System.out.println(Math.pow(2, 10));
-
//返回四舍五入最接近的整数
-
System.out.println(Math.round(3.8));
-
//保留两位小数
-
System.out.println(Math.round(3.1415926*100)/100.0);
-
//返回0~1之间的小数 含头不含尾
-
System.out.println(Math.random());
-
//平方根
-
System.out.println(Math.sqrt(50));
-
//立方根
-
System.out.println(Math.cbrt(50));
Random
-
类的实例用于生成伪随机数流。
-
此类使用 48 位的种子,使用线性同余公式 (linear congruential form) 对其进行了修改所得。
-
注意事项:
- 若long种子确定,则在不同程序中,相同次数产生的随机数是相同的。
System
- System系统类,主要用于获取系统的属性数据和其他操作。
Runtime
-
每个 Java 应用程序都有一个Runtime类实例,使应用程序能够与其运行的 环境相连接。可以通过getRuntime方法获取当前运行时。
-
修改JVM运行内存
- 修改堆初始内存大小:-Xms300m
- 修改堆最大内存大小:-Xmx4000m
- 修改栈空间大小:-Xss2m jdk1.5之前256k jdk1.5之后1m