一,Math
Math 是lang包中的一个用于执行基本数学运算的类
注:
Math 类是 final 的
Math 类中的成员都是 static 的
Math 类的构造函数是 private 的
字段(成员变量):
E:自然对数的底数
PI:圆周率
常用方法:
abs(double d):获取绝对值
max(double n1,double n2):获取较大值
min(double n1,double n2):获取较小值
pow(double n1,double n2):获取n1的n2次方
random():随机[0.0,1.0)
floor(double d):向下取整
ceil(double d):向上取整
round():四舍五入
rint():五舍六入
sqrt():求平方根
二,Arrays
Arrays 是util包中的一个包含操作数组的各种方法的类
注:
Arrays 类中的方法都是 static 的
Arrays 类的构造函数是 private 的
常用方法:
toString(Object[] arr):将数组转换成字符串
binarySearch(Object[] arr,Object value):使用二分搜索法,获取指定元素在数组中的位置
前提:1. 升序 2. 元素唯一
fill(Object[] arr,Object value):用指定的值替换数组中的所有元素
equals(Object[] arr1,Object[] arr2):比较两个数组中的元素是否完全相同
copyOf(Object[] arr,int newLength):根据指定长度创建一个新数组,将原始数组中的元素复制到新数组中,如果原始数组短,就将原始数组中的所有元素从第一个开始复制到新数组,如果新数组短,就根据新数组的长度,将原始数组中从第一个元素开始复制到新数组的最大长度
copyOfRange(Object[] arr,int a,int b):将arr数组中从下标a开始截取到下标b-1
sort(Object[] arr):对数组进行排序
使用 sort 方法对自定义类型的属性进行排序:
①调用sort(Object[] arr)的使用步骤:
使自定义类实现Comparable接口
重写compareTo()方法
升序:
this的属性 - 参数的属性
降序:
参数的属性 - this的属性
②调用sort(Object[] arr,Comparator c)的使用步骤:
创建Comparator接口的实现类
重写compare()方法
升序:
o1的属性 - o2的属性
降序:
o2的属性 - o1的属性
创建Comparator实现类的对象
使用匿名内部类实现:
Arrays.sort(emps,new Comparator<Emp>(){ @Override public int compare(Emp o1, Emp o2) { return o1.salary != o2.salary ? o2.salary - o1.salary : o1.age - o2.age; } });
三,Date
类
Date
表示特定的瞬间,精确到毫秒。 它在util包中。
构造函数:
1.Date():基于当前时间创建Date对象 2.Date(long time):根据指定的毫秒数创建Date对象
常用方法:
getTime():同System.currentTimeMillis()Date 类具有的功能:
可以将Date对象转换成时间值(被Calendar取代)
格式化和解析日期字符串(被DateFormat取代)
四,DateFormat
DateFormat 是一个可以对日期进行格式化和解析的抽象类
它的子类是SimpleDateFormat
格式化:(日期 -> 文本),将一个Date对象转换成指定格式的字符串
解析:(文本-> 日期),将一个符合指定格式的日期字符串转换成一个Date对象
格式化:
Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒"); String time = sdf.format(d); System.out.println(time);解析:
String time = "1979-10-19"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date d = sdf.parse(time); System.out.println(d);注:如果日期字符串的格式与指定格式不匹配会发生
ParseException
解析异常
五,Calendar
Calendar
类是一个抽象类,它为特定瞬间与一组诸如YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
等日历字段
之间的转换提供了一些方法。
Calendar
提供了一个类方法getInstance
,以获得此类型的一个通用的对象。
Calendar
的getInstance
方法返回一个Calendar
对象,其日历字段已由当前日期和时间初始化。常用方法:
get(int field):通过指定的日历字段获取该日历字段值
set(int field,int value):将value设置给指定的日历字段
set(int year, int month, int date, int hourOfDay, int minute,int second)
getTimeInMillis():同
System.currentTimeMillis()
getTime():取获当前日期的Date对象
六,String
String
类代表字符串。Java 程序中的所有字符串字面值(如"abc"
)都是此类的对象。字符串是常量;它们的值在创建之后不能更改。因为 String 对象是不可变的,所以可以共享。
注:
==
在连接基本数据类型时,比较的是数据值,在连接引用数据类型时,比较的是地址值
构造函数:
new String()
new String(String s)
new String(char[] chs)
new String(char[] chs,int offset,int count)
new String(byte[] bs)
new String(byte[] bs,int offset,int length)
常用方法:
*length()
*charAt(int index)
*indexOf(String s)
*indexOf(String s,int fromIndex)
*lastIndexOf(String s)
*lastIndexOf(String s,int fromIndex)
*equals(String s)
equalsIgnoreCase(String s)
contains(String s)
concat(String s)
*subString(int from)
*subString(int from,int to)
replace(String s1,String s2)
*startsWith(String s)
*endsWith(String s)
toLowerCase()
toUpperCase()
isEmpty()
trim()
*getBytes()
*toCharArray()
compareTo(String )
compareToIgnoreCase(String s)
正则表达式:用来对其他符合指定模式的字符串进行匹配、切割、替换的字符串
匹配:
字符串.matches(正则)
,判断字符串是否符合正则,返回布尔值// 判断是否是标准手机号 // 1开头 第二位是3456789 11位 纯数字 public static void f1(){ String tel = "16121001431"; String regex = "1[3-9][0-9]{9}"; System.out.println(tel.matches(regex)); } // 邮箱:前3-6位是大小写字母,6-12位数字,@,数字字母下划线2-7位,以.com结尾 public static void f2(){ String email = "zhu840897236@sina.com"; String regex = "[a-zA-Z]{3,6}\\d{6,12}@\\w{2,7}[.]com"; System.out.println(email.matches(regex)); }切割:
字符串.split(正则)
:以正则切割字符串中的内容,获取切割后的字符串数组// 获取:ip地址中的每一段 public static void f3(){ String ip = "192+++++++++168+++++1+++1004++++43243+++++543"; String regex = "[+]+"; String[] strs = ip.split(regex); System.out.println(Arrays.toString(strs)); } public static void f4(){ String s = "床前明月光,疑似地上霜。举头望明月,低头思故乡。"; String regex = "[,。]"; String[] ss = s.split(regex); System.out.println(Arrays.toString(ss)); }替换:
字符串.replaceAll(正则,新值)
:用新值替换字符串中符合正则的字符串public static void f5(){ // 菜 病 String s = "你真菜,你像有什么大病"; System.out.println(s.replaceAll("[菜病]","*")); } // 叠词替换 // 帮别人改掉口吃的毛病 public static void f6(){ String s = "我我我我我爱爱爱爱爱中中中中中中国";// -> 我爱中国 System.out.println(s.replaceAll("(.)\\1+","$1")); }
七,StringBuilder、StringBuffer
StringBuilder、StringBuffer称为字符串缓冲区,它们是可变的字符序列
StringBuilder、StringBuffer有相同的功能
StringBuilder和StringBuffer的区别:
StringBuilder不保证同步,StringBuffer保证同步
StringBuilder比StringBuffer要快
构造函数:
new StringBuilder()
new StringBuilder(String s)
常用方法:
append(Object o)
insert(int index,Object o)
delete(int start,int end)
deleteCharAt(int index)
reverse()
replace(int fromIndex,int toIndex,String str)
StringBuilder、StringBuffer和String的选用:
成员变量使用String
单线程中使用StringBuilder
多线程中使用StringBuffer
StringBuilder、StringBuffer与String的转换
StringBuilder、StringBuffer -> String
// 1.调用StringBuilder、StringBuffer的toString() StringBuilder sb = new StringBuilder("abc"); String s = sb.toString(); // 2.使用字符串的拼接 StringBuilder sb2 = new StringBuilder("abc"); String s2 = sb2+""; // 3.使用String的构造函数 StringBuilder sb3 = new StringBuilder("abc"); String str = new String(sb3);String -> StringBuilder、StringBuffer
使用StringBuilder、StringBuffer的构造函数
String ss = "qqq"; StringBuffer sbb = new StringBuffer(ss);
八,Object
类
Object
是类层次结构的根类。每个类都使用Object
作为超类。所有对象都实现这个类的方法。常用方法:
toString()
注:在打印对象对象时,会输出对象在内存中的地址是因为默认调用了
Object
中的toString()public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }public String toString(){ return "姓名:"+ name + ",年龄:"+age+",工资:"+salary; }equals()
@Override public boolean equals(Object obj) { /* if(obj == null){ return false; }*/ if(this == obj){ return true; } if(!(obj instanceof Emp)){ return false; } Emp e = (Emp)obj; if(this.age == e.age){ if(this.name == null){ if(e.name == null){ return true; }else{ return false; } }else{ return this.name.equals(e.name); } }else{ return false; } }@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Emp emp = (Emp) o; return age == emp.age && Objects.equals(name, emp.name); }
九,包装类
使用引用数据类型的变量可以对属性和方法进行调用,而基本数据类型的变量无法对属性和方法进行调用,因此针对每一个基本数据类型封装了它们对应的引用数据类型,这些引用数据类型就称为包装类。
基本数据类型 包装类 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean
构造函数:
Integer i1 = new Integer(3); Integer i2 = new Integer("3"); 注:如果字符串参数不是数值形式的,会发生NumberFormatException数字格式异常
静态常量:
Integer.MAX_VALUE Integer.MIN_VALUE
静态方法:
Integer.toBinaryString(10) Integer.toOctalString(10) Integer.toHexString(10) Integer.max(3,4) Integer.min(3,4) Integer.compare(4,5)
装箱和拆箱:
装箱:将一个基本类型的数据转换成对应的包装类
拆箱:将一个包装类的数据转换成对应的基本类型
// 装箱:基本->引用 int i = 3; Integer j = new Integer(i); // 拆箱:引用->基本 int k = j.intValue();从Java5开始,可以实现自动装拆箱
// 自动装箱 Integer m = 55; // 自动拆箱 int n = new Integer(9);从Java9开始,包装类的构造函数都给变成了过期函数
包装类和String的转换
包装类 -> String
//1.拼接空字符串 Integer i = 3; String s = ""+i; //2.使用String类的静态方法valueOf() String s2 = String.valueOf(3); //3.使用包装类的成员方法toString() Integer i = 3; String s3 = i.toString(); //4.使用包装类的静态方法toString() String s4 = Integer.toString(4);String -> 包装类
//1.使用包装类的构造函数 Integer i1 = new Integer("3"); //2.使用包装类的静态方法valueOf() int i2 = Integer.valueOf("66"); //3.使用包装类的静态方法parseInt() int i3 = Integer.parseInt("77");