Java开发者写好的工具类 ----- 官方API帮助文档(Application Programming Interface)
包装类(封装类)
数学相关
日期相关
字符串
集合相关
异常相关
输入输出相关I/O
线程相关
网络通信
反射注解
GUI Swing
1.类所在的包
2.类的关系(默认继承或实现)
3.是否可以创建对象 调用
4.类中提供的常用方法
========================================================
包装类(封装类)
byte---Byte short---Short int---Integer long---Long
float---Float double---Double char---Character boolean---Boolean
1.八个包装类都在同一个包下 java.lang包 不需要import导包就可以直接用
2八个包装类中有六个是与数字相关,都默认继承父类Number
3.八个包装类都实现了Serializable,Comparable
4.八个包装类都有带自己对应类型参数的构造方法
八个包装类中除了Character之外都有构造方法重载(String类型)
5.创建对象 对象调用属性/方法
new Integer("abc"); -----> NumberFormatException 数字格式化异常
有六个与数字相关的类都继承了Number类 .xxxValue();//将一个包装类型转化为对应的基本类型(拆包)
+++++++++++++++++++++++ +++++++++++++++++
//1.5之前
Integer i1 = 10; //引用数据类型 包装类
int value1 = new Integer(10);
//1.5之后
Integer i2 = 10;
int value2 = new Integer(10);
int value3 = Integer.parseInt("10");
int value4 = new Integer("10");
++++++++++++++++++++++++++++++++++++++++
6.经常在笔试中出现的问题
+++++++++++++++++++++++ +++++++++++++++++
Integer i1 = 10; //10被自动包装成Integer对象
Integer i2 = 10;
Integer i3 = new Integer(10);
Integer i4 = new Integer(10);
System.out.println(i1==i2); //true
System.out.println(i1==i3); //false
System.out.println(i3==i4); //false
System.out.println(i1.equals(i2)); //true
System.out.println(i1.equals(i3)); //true
System.out.println(i3.equals(i4)); //true
+++++++++++++++++++++++ +++++++++++++++++
Integer i1 = 1000; //1000被自动包装成Integer对象
Integer i2 = 1000;
Integer i3 = new Integer(1000);
Integer i3 = new Integer(1000);
System.out.println(i1==i2); //false
System.out.println(i1==i3); //false
System.out.println(i3==i4); //false
System.out.println(i1.equals(i2)); //true
System.out.println(i1.equals(i3)); //true
System.out.println(i3.equals(i4)); //true
+++++++++++++++++++++++ +++++++++++++++++
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
+++++++++++++++++++++++ +++++++++++++++++
1.==与equals()的区别
==可以比较基本数据类型和引用数据类型(变量中储存的内容)
如果比较基本数据类型,比较的是变量中储存的值
如果比较引用数据类型,比较的是变量中储存的地址引用
equals()是Object类中继承过来的方法 每一个引用都可以调用
默认继承的equals()方法比较与==一致,若想改变比较规则,可以重写equals()方法
由于Integer类重写了equals()方法 比较的是数值
2.考察Integer类加载的时候 自己有一个静态的空间
空间内立即加载 Integer类型的数组 储存了256个Integer对象 -128~127
如果我们使用的对象在这范围之内 则直接去静态区内找对应对象
若不在则在堆内存中通过new Integer()创建
========================================================
数学相关 Math
1.所属的包java.lang
2.Math的构造方法是私有的 我们不能直接调用创建对象
由于Math中的方法和属性都是static修饰 因此不需要创建对象
3.常用的方法
abs() //返回给定数字的绝对值
ceil() //<返回double>向上取整
floor() //<返回double>向下取整
rint() //<返回double>返回最近的整数,但若前后两个数字距离相同,则返回二者之中的偶数
round() //<返回int>四舍五入
max(a,b) //<int ,long,float,double>
min(a,b) //<int ,long,float,double>
pow(a,b) //<参数double 返回double> a的b次方
sqrt(a) //<double>获取给定参数的平方根
random() //随机产生一个 [0.0--1.0)
Math.random()在计算小数时的精确程度时可能会有损失,所以可以使用Random类
Random类
1.java.util包中的类 需要import类
2.没有继承关系 因此只默认继承Object类
3.通过new Random()创建对象
4.
++++++++++++++++++++++++++++++++++++++
Random r = new Random();
int value = r.nextInt(); //随机产生一个整数 long的范围内
int value1 = r.nextInt(10); //[0,10)的整数
//参数若为负数,则会产生IlliegalArgumentException异常
float f = r.nextFloat(); //[0.0,1.0)的float数
boolean b = r.nextBoolean(); //随机产生boolea值
++++++++++++++++++++++++++++++++++++++
UUID类
1.所属的包java.util 需要import导入
2.没有继承关系 默认继承Object类
3.没有无参数的构造方法 有两个long参数的构造方法 但不经常使用
UUID uuid = UUID.randomUUID(); //通常通过randomUUID()
System.out.println(uuid.toString()); //生成32位的随机元素 每一个位置是一个十六进制数
//以后可用于充当数据库表格主键 primary key
long l = uuid.timestamp(); //
BigInteger类 大整数
1.所属的包java.math 需要import导入
2.继承Number类
3.所提供的构造方法全部都是带参数的
所以通常使用带String参数的构造方法创建这个类的对象
BigInteger big1 = new BigInteger("123");
BigInteger big2 = new BigInteger("456");
4.类中的常用方法
做四则运算
big1.add(big2);
big1.subtract(big2);
big1.multiply(big2);
big1.divide(big2);
BigDecima类 超过了double取值范围
1.所属的包 java.math包 需import导入
2.继承Number类
3.所提供的构造方法全部都是带参数的
通常通过带String参数的构造方法创建这个类的对象
BigDecimal decimal1 = new BidDecimal("123.456");
BigDecimal decimal2 = new BigDecimal("456");
4.类中的常用方法
做四则运算
decimal1.add(decimal2);
decimal1.subtract(decimal2);
decimal1.multiply(decimal2);
decimal1.divide(decimal2);
decimal1 = decimal1.setScale(2,ROUND_DOWN); //123.45
//第一个参数是保留的小数点之后的位数,后一个参数是设置的保留模式
//小数点前后的位数都能进行处理的类--->格式化
DecimalFormat类 (四舍五入)
1.所属的包java.text 需import导入(这个包下的类基本上都是格式化作用)
2.
3.//通过带String参数的构造方法创建一个格式化对象 0必须存在 #可有可无
DecimalFormat df = new DecimalFormat("000.###");
String value = df.format(123.4567); //123.457
========================================================
日期相关
Date类
1.通常使用java.util包
2.通常使用无参数构造方法 或带long参数的构造方法
3.Date类中常用的方法
before(); after(); // 返回Boolean表示时间先后
setTime(); getTime();
int sign = date1.compareTo(date2); //-1调用的时间更早 参数时间更迟
// 1调用的时间更迟 参数时间更早
// 0 调用的时间和参数时间相同
4.可以处理一个Date日期的格式
DateFormat类
1.所属的包 java.text包
2.是一个抽象类 不可创建对象 需通过子类(SimpleDateFormat)使用
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String v = sdf.format(date1);
Calendar类 (1.1版本后出现 用于操作Date类的一部分
1.所属的包 java.util包
2.有protected修饰的构造方法 通常访问不到
Calendar calendar = Calendar.getInstance();//系统当前时间的calendar对象
calendar.after(date1);
3.常用方法
after(); before();
setTime(); getTime(); --- 返回Date类型
getTimeZone() --- TimeZone
Calendar里面包含一个date属性 可以操作date的摸一个局部信息
Calendar calendar = Calendar.getInstance();
System.out.println(calendar); //java.util.GregorianCalendar[name1=value1,name2=value2]
calendar.set(Calendar.YEAR,2020);
int year = calendar.get(Calendar.YEAR10);
int month = calendar.get(Calendar.MONTH); //january --- 0
int day = calendar.get(Calendar.DAY_OF_MONTH);
TimeZone类
1.java.util包
2.可以通过 Calendar的对象.getTimeZone() 或 TimeZone.getDefault() 获取
TimeZone tz = TimeZone.getDefault();
3.常用方法
tz.getID() //返回时区的ID号 Asia/Shanghai
tz.getDispalyName() // 对时区的描述 中国标准时间
========================================================
字符串相关
String类(final修饰 不可被继承重写
1.所属的包 java.lang包 不用导入
2.无任何继承关系 实现了三个接口
3.创建对象(String是一个非常特殊的引用数据类型 可以像基本类型一样 创建 赋值)
String s1 = "abc";
String s2 = new String("abc");
String s3 = new String(); // String s3 = "";
byte[] value = new byte[]{65,97,48};
String str = new String(value); // AaO (将数组中的数字转化为对应的char,在连接为String
String str1 = new String(value,1,2); //offset:1(起点的索引),count:2(个数) --- aO
4.String类的特性
5.String类中常用的方法
boolean = equals(Object obj) //重写过了,比较String的字面值
int = hashCode() //重写过了
//"abc" h=0
//h = 0*31+97 = 97
//h = 97*31+98
//h = h*31+99
int = compareTo(String str) //实现Comparable接口 按照字典索引的顺序比较
String = toString() // 继承自Object 重写过了 输出字符串中的字面值
char = charAt(int index) //
int = codePointAt(int index) //"abc" 0-->97
返回给定index对应位置的char所对应的code码
String = concat(String str) //在后面连接str 通过创建新的小数组
++++++++++++++++++++++++++++++++++++++
String str = "a";
long time1 = System.currentTimeMillis();
for(int i = 1;i<200000;i++){
str+="a"; //需要new许多许多新的数组 速度更慢"a""a""aa""a""aaa"......
}
long time2 = System.currentTimeMillis();
System.out.println(time2-time1);
++++++++++++++++++++++++++++++++++++++
String str = "a";
long time1 = System.currentTimeMillis();
for(int i = 1;i<200000;i++){
str = str.concat(" "); //只需要创建新的小数组 速度更快
}
long time2 = System.currentTimeMillis();
System.out.println(time2-time1);
++++++++++++++++++++++++++++++++++++++
6.笔试中经常会考察的String的特点
String的不可变特性
String与StringBuffer区别
StringBuffer与StringBuilder区别
String对象的储存
7.String的不可变特性
体现:体现在两个方面 长度 内容
原因:String类中包含一个private final char[] value; //存储String中的每一个字符
final的值是不可改变的 ---》地址不可改变 数组长度本身不可变
private ---》 数组中的内容也不能改变