java常用类

常用类和工具类

1、Object 类

Object 类是所有类的起点,是所有类的始祖类,所有类都继承自Object类;

1639552378633

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,是有值得
  • .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 的时候,自动装箱就会抛出 空指针异常错误;
posted @ 2021-12-21 14:59  Mxiansheng泽  阅读(84)  评论(0)    收藏  举报