java常用类
常用类和工具类
1、Object 类
Object 类是所有类的起点,是所有类的始祖类,所有类都继承自Object类;
1、Object 的 equals 方法
一般使用 == 来比较基本类型字段,使用 equals 比较对象字段;
注意:对于数组类型的字段,可以使用静态的Arrays.equals 方法检测相应的数组元素是否相等;
2、Object 的 hashCode 方法
hashCode - 散列码 :是由对象导出的一个任何整型值(正数、负数) - 散列码是没有规律的;
Object 默认的hashCode方法会从对象的存储地址得出散列码;
如果 - x 和 y 是两个不同的对象,x.hashCode 与 y.hashCode 基本上不会相同(不排除会相同的情况- 极小概率);
-
由于hashCode 是定义在Object类中的,所以每个对象都有一个默认的散列码(hasCode码)
-
equals 相同的 ,hashCode 一定相同;hashCode 相同的,equals 不一定相同;
-
只有在同一个对象中,hashCode相同,equals 一定相同;
3、Object 的toString 方法
toString 方法 - 返回表示对象值得一个字符串
toString 方法非常常用的原因:只要对象与一个字符串通过+ 操作符连接起来,Java 编译器就会自动调用toString 方法来获得这个对象的字符串描述;
- 一般我们会在自定义的类中重写 toString 方法,自定义toString 方法;
4、其他
- getClass - 返回类对象
- getName - 返回这个类的名字
- getSuperclass - 返回这个类父类对象
- .....
2、String 类
1、String对象是不可变的
-
查看String类的时候,可以发现,所有修改String值得方法,实际上都是创建一个全新的String对象,然后copy原来的string值存入修改后的String字符串内容;
-
jdk1.5之后 使用+号拼接字符串,其实底层java编译器会隐式替换成stringbuilder进行;
(注意:实在没有循环的情况下,但是在有循环的情况,编译器可能没法做到智能替换,还是使用stringbuilder)
2、String是个final类
- 是不可以被继承的,并且它的成员方法都是默认的final方法
- 因为String的底层是一个使用final和private修饰的数组,所以是不可变的
3、StringBuilder
- StringBuilder和 String 类似,底层都是数组;但是StringBuilder 没有被final修饰,所以它不是一个常量,是可以修改的
- StringBuilder 初始化是一个长度为16的数组,如果字符串超过这个长度,就会创建一个长度乘以2+2的数组,如果还是不够就会创建一个直接等于需要容量的数组;
- jdk1.5之后才有stringbuilder的
4、StringBuffer
- StringBuffer 和StringBuilde 类似,都是可以修改的数组,但是StringBuffer 是一个线程安全的,而StringBuffer是一个线程不安全的
- 因为底层源码 StringBuffer 的方法全部都是被synchronized 修饰的
- 是先有stringbuffer 才有stringbuilder 的,sun公司的愚蠢设计点,因为stringbuffer 在实际的工作使用中是基本没有的;
5、String 常用方法
- indexOf(): 返回指定字符的索引;
- charAt():返回指定索引处的字符;
- replace():字符串替换
- trim():去除字符串的两端空白
- split():分割字符串,返回一个分割后的字符串数组
- getBytes():返回字符串的byte类型数组
- length():返回字符串长度
- toLowerCase():将字符串转成小写字母
- toUpperCase():将字符串转成大写字符
- substring():截取字符串
- equals():字符串比较
3、StringBuilder 和 StringBuffer类
4、Math 类
成员方法:
abs(int a):绝对值
ceil(double d):向上取整
floor(double d):向下取整
max(int a,int b):最大值
pow(double a,double b):a的b次幂
random():随机数[0.0,1.0]
round(float f):四舍五入
sqrt(double d):算术平方根
5、Random 类
1)构造方法
Random():以当前时间毫秒值作为种子,创建Random对象
Random(long seed):以指定种子创建Random对象
2)成员方法
nextInt():生成1个int类型范围的随机数
nextInt(int n):产生1个[0,n-1]范围内的随机数
6、Date 类
表示特定的瞬间,精确到毫秒值
1)构造方法
Date():以当前时间毫秒值创建Date对象
Date(long time):以指定的毫秒值创建Date对象
2)成员方法
long getTime():获取Date对象的毫秒值
setTime(long time):设置Data对象的毫秒值
7、DateFormat 类
它是一个抽象类,用来格式化或者解析日期
格式化:Date————》String
解析:String————》Date
getDateInstance(int style,Locale loc):获取日期格式器,该格式器具有给定的语言环境和给定的格式化风格
String format(Date date):格式化
Date parse(String time):解析
8、SimpDateFormat 类
它是DateFormat的子类
1)构造方法
SimpleDateFormat():以默认模式创建对象
SimpleDateFormat(String pattern):以指定模式创建对象
常用模式:
yyyy:年 MM:月 dd:日
HH:时 mm:分 ss:秒
2)常成员方法
String format(Date date):格式化
Date parse(String time):解析
9、Calendar 类
日历类,用于获取或者操作日历字段(年月日)
该类是一个抽象类,不可以实例化
成员方法:
static Calender getInstance():以默认时区和语言创建日历
int get(int field):获取指定字段的日历值
set(int field,int value):给指定的日历字段设置指定的值
set(int year,int month,int date):设置年月日
Date getTime():获取日历对象的日期
setTime(Date d):设置日历对象的日期
add(int field,int amount):对指定的日历字段添加指定的值
10、BigInteger 类
1)构造方法
BigInteger(String s):通过字符串创建BigInteger对象
2)成员方法
add(BigInteger bi):+
subtract(BigInteger bi):-
multiply(BigInteger bi)😗
divide(BigInteger bi)😕
11、BigDecimals 类
用于解决浮点型运算精度损失的问题
1)构造方法
BigDecimal(String s):通过字符创建BigDecimal对象
2)成员方法
add(BigDecimal bi):+
subtract(BigDecimal bi):-
multiply(BigDecimal bi)😗
divide(BigDecimal bi)😕
12、Scanner 类
1)构造方法
Scanner(InputStream is)
构造一个文本扫描器,它生成的值是从指定的值输入流扫描的
System.in 是一个标准的输入流,属于InputStream
2)成员方法
boolean hasNext():是否有下一个数,有true,没有false
String next():获取下个数
int nextInt():获取下个int数据
String nextLine():获取一行数据
13、Files 类
1、常用方法
- Files.exists():检测文件路径是否存在
- Files.createFile(): 创建文件
- Files.createDirectory():创建文件夹
- Files.delete():删除一个文件或目录
- Files.copy():复制文件
- Files.move():移动文件
- Files.size():查看文件个数
- Files.read():读取文件
- Files.write():写入文件
14、System类
没有构造方法
成员方法:
gc():运行垃圾回收处理机制(系统会在某个不确定的时间调用该方法)
会调用finalize(),进行垃圾回收
exit(int status):退出JVM,0表示非异常退出
currentTimeMills():获取当前时间毫秒值
arrayCopy(Object[] srcArr,int srcPos,Object[] desArr,int destPos,int len):数组复制
15、Enum类 - 枚举类
枚举类是定义好实例的类,创建一个枚举类对象,不能使用枚举类中定义的实例对象之外的对象;
所有的枚举类型都是 Enum的子类;
Enum 类的方法:
- toString - 返回枚举常量名
- 静态方法 value - 返回一个包含全部枚举值得数组
16、Array 类
常用方法
-
sort :排序
-
binarySearch:二分查找
-
equals :等值比较(比较数组中的元素值是否相等)
-
fill :充满,给数组赋值
-
copyOf :拷贝
-
toString :转换成字符串
17、ArrayList 类
1、ArrayList - 动态数组(数组列表 - 它是一个工具)
-
类似于数组,但在添加或删除元素时,它能够自动调整数组容量,而不需要编写任何代码
-
ArrayList<> 一般声明都要给入泛型约束;
- 没有泛型,里面就get方法的返回值只能返回 Object
-
数组列表原理:
- 数组列表如果空间全部用尽,继续add 元素的化,数组列表就会自动创建一个更大的数组,将所有的对象从较小的数组中拷贝到较大的数组中;
2、ArrayList 方法
-
.add 方法
- 使用add 方法可以将元素添加到数组列表中;
- 一种直接添加元素 (会在开头添加)- add("aaa")
- 一种在指定位置添加元素 - add(n,"aaa")
- 注意:如果 new ArrayList<>(100) // 这里的100 相当于给这个数组列表挖100个坑为,这些坑位里面全部都是没有值的;和List 不一样,List 100 个坑位,里面如果没有值就会被填充为0,是有值得
- 使用add 方法可以将元素添加到数组列表中;
-
.size()方法
- 返回数组列表当前元素的个数,等价于 数组的.length
-
.trimToSize() 方法
-
将数组列表的存储容量削减到当前大小
-
.set(下标,元素)
-
set只是用来替换数组中已经加入的元素
-
list.set(6,"aaa"); -
注意:
- 如果数组下标位置没有元素,是不能使用set 添加的,是错误的;
- set 是替换,不是添加,不能和add 混淆;
-
-
.get(下标,元素)
-
get 是获取下标位置的元素 - 等价于数组的 list[i]
-
list.get(6,"aaa");
-
-
.remove(下标)
-
删除数组列表中的指定索引的元素
- 删除了某个元素后,之后删除元素后的所有元素都会前移一位,并且数组列表的大小要减一
-
arrayList.remove("aaa");
-
-
.toArray(整型数)
-
将数组列表拷贝到一个数组中。()内参数是数组的大小
-
arrayList.toArray(5);
-
自动装箱 - 对象包装器、自动拆箱
1、包装器
包装器 - 所有的基本类型所对应的类;
包装器类:
包装器类是不可变的,一旦构造了包装器类,就不允许更改包装在其中的值;
包装器类还是 final,因此不能有子类继承;
-
Integer - int
-
Long - long
-
Float - float
-
Double - double
-
Short - short
-
Byte - byte
前六个的父类都是 Number类
-
Character - char
-
Boolean - boolean
2、自动装箱/ 自动拆箱
-
自动装箱
list.add(3) list.add(Integer.valueOf(3)) // 要给一个ArrayList<Integer> 中添加一个int的元素,它就会自动装箱,帮我们使用Integer 添加一个 int 数据 // 因为ArrayList<> 尖括号中是不允许使用基本类型的 -
自动拆箱
int n = list.get(i); // 自动拆箱 int n = list.get(i).intValue(); // 相当于我们从数组列表取出一个Integer 对象会指定转换成我们需要的int值 -
如果一个条件表达式混合使用Integer 和 Double 类型,Integer 值就会自动拆箱,然后提升为double ,然后在自动装箱为Double
Integer a = 1; Double b = 2.0; System.out.println(true ? a:b); // a = 1.0
3、包装类 和 基本类型的区别
-
包装类不可以是用 == 比较,只能使用.equals 比较
Integer a = 1000; Integer b = 1000; System.out.println(a.equals(b)); // true System.out.println(a == b); // false -
包装类可以为null ,而基本类型是不能为null 的
- 包装类为null 的时候,自动装箱就会抛出 空指针异常错误;

浙公网安备 33010602011771号