JavaJDK中的常用包、常用类

简单介绍

Java类库(包)

Java 的应用程序接口 (API) 以包的形式来组织,每个包提供了大量的相关类、接口和异常处理类,这些包的集合就是 Java 的类库。

  • 包名以 Java 开始的包是 Java 核心包 (Java Core Package) ;
  • 包名以 Javax 开始的包是 Java 扩展包 (Java Extension Package) ,例如 javax.swing 包;
常用核心包介绍
  1. java.lang Java 编程语言的基本类库
  2. java.applet 创建 applet 需要的所有类
  3. java.awt 创建用户界面以及绘制和管理图形、图像的类
  4. java.io 通过数据流、对象序列以及文件系统实现的系统输入、输出
  5. java.net 用于实现网络通讯应用的所有类
  6. java.util 集合类、时间处理模式、日期时间工具等各类常用工具包
  7. java.sql 访问和处理来自于 Java 标准数据源数据的类
  8. java.test 以一种独立于自然语言的方式处理文本、日期、数字和消息的类和接口
  9. java.security 设计网络安全方案需要的一些类
  10. java.beans 开发 Java Beans 需要的所有类
  11. java.math简明的整数算术以及十进制算术的基本函数
  12. java.rmi 与远程方法调用相关的所有类
常用的Java扩展包
  1. javax.accessibility 定义了用户界面组件之间相互访问的一种机制
  2. javax.naming.* 为命名服务提供了一系列类和接口
  3. javax.swing.* 提供了一系列轻量级的用户界面组件,是目前 Java 用户界面常用的包

Java类

Java类也大部分都是继承超类object的子类 有着不同的用法。jdk中提供了字符串、时间、数字、文件、网络、异常等相关处理的类。

字符串处理类

String、StringBuilder、StringBuffer

String

String声明为final的,不可被继承,代表不可变的字符序列;底层使用final char[]存储;实现了Serializable接口:表示字符串是支持序列化的。
使用注意:String的每次改变都会生成一个新的对象,需要用String对象去接收。
常用方法:见String类的API文档

StringBuilder

可变的字符序列。底层使用char[]存储。线程不安全,效率高。
常用方法:见StringBuilder类的API文档

StringBuffer

可变的字符序列;线程安全的 sychronized,效率低;底层使用char[]存储。
常用方法:见StringBuffer类的API文档

StringBuffer 与 StringBuilder 的扩容问题

如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。默认情况下,扩容为原来容量的2倍+ 2,同时将原有数组中的元素复制到新的数组中。
指导意义:开发中建议大家使用: StringBuffer(int capacity) 或StringBuilder(int capacity)

包装类

Java中的基本数据类型没有方法和属性,而包装类就是为了让这些拥有方法和属性,实现对象化交互。
包装类与对应基本数据类型关系如下图:
在这里插入图片描述

包装类和基本数据类型之间的转换

装箱:基本数据类型转换为包装类;
拆箱:包装类转换为基本数据类型。
 
每一个包装类转换的方法和下述中的基本一致:

  • 通过包装类Integer.toString()将整型转换为字符串;
  • 通过Integer.parseInt()将字符串转换为int类型;
  • 通过valueOf()方法把字符串转换为包装类然后通过自动拆箱。

数学计算类

和数学计算相关的除了基本数据类型除外,还有Math、BigDecimal、BigInteger等类。

Math

java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回值类型一般为double型
常用方法:见Math类的API文档

BigInteger

java.math包的BigInteger可以表示不可变的任意精度的整数。 BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。
常用方法:见BigInteger类的API文档

BigDecimal

用于商业计算中,要求数字精度比较高,用java.math.BigDecimal类, 它支持不可变的、任意精度的有符号十进制定点数。
常用方法:见BigDecimal类的API文档

时间相关的类

jdk中提供了很多时间操作的类,可以获取时间、对时间进行增减、格式化等操作。时间操作类分为jdk8之前和jdk8及之后的版本的时间类。

jdk8之前时间操作类
Date

java.util.Date类表示特定的瞬间,精确到毫秒(查看API文档
java.sql.Date对应着数据库中的日期类型的变量(查看API文档

SimpleDateFormat

java.text.SimpleDateFormat类 :一个不与语言环境有关的方式来格式化和解析日期的具体类。可以实现Date和String类型的相互转化(查看API文档

Calendar

java.util.Calendar(日历)类:Calendar是一个抽象基类,主用用于完成日期字段之间相互操作(例如时间加减操作、获取指定年、月、日的信息)的功能。(查看API文档

  • 获取月份时: 一月是0,二月是1,以此类推, 12月是11
  • 获取星期时: 周日是1,周二是2 , 。 。。。周六是7
jdk8时间操作类
LocalDate

LocalDate代表IOS格式(yyyy-MM-dd) 的日期,可以存储生日、纪念日等日期。(查看API文档

LocalTime

LocalTime表示一个时间, 而不是日期。(查看API文档

LocalDateTime

LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。(查看API文档

DateTimeFormatter

用于格式化或解析日期、时间
LocalDate、LocalTime、LocalDateTime 三个类中都有format(DateTimeFormatter dateTimeFormatter)方法来格式化时间。

查看DateTimeFormatter的API文档

比较器

ava实现对象排序的方式有两种:自然排序: java.lang.Comparable 和 定制排序: java.util.Comparator

Comparable

查看ComparableAPI文档

  1. java.lang.Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。默认从小到大
  2. 实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。
  3. 如果当前对象this大于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj, 则返回负整数,如果当前对象this等于形参对象obj, 则返回零。
  4. 实现Comparable接口的对象列表(和数组)可以通过 Collections.sort 或Arrays.sort进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
  5. 对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals一致。 建议(虽然不是必需的) 最好使自然排序与 equals 一致。

Comparable 的典型实现: (默认都是从小到大排列的)
6. String:按照字符串中字符的Unicode值进行比较
7. Character:按照字符的Unicode值来进行比较
8. 数值类型对应的包装类以及BigInteger、 BigDecimal:按照它们对应的数值大小进行比较
9. Boolean: true 对应的包装类实例大于 false 对应的包装类实例
10. Date、 Time等:后面的日期时间比前面的日期时间大

public class Person implements Comparable<Person>{
	
	private String name;
	
	private int age;
	
        //构造方法
        //set、get代码...
	
	public int compareTo(Person p) {
		// TODO Auto-generated method stub
		if (this.age == p.age) {
			return this.name.compareTo(p.name);
		} else {
			return this.age - p.age;
		}
	}
	
	
}
Comparator

当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用 Comparator 的对象来排序, 强行对多个对象进行整体排序的比较。查看API文档

重写compare(Object o1,Object o2)方法,比较o1和o2的大小:

  1. 如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示o1小于o2。
  2. 可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。
  3. 还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。

对集合中的对象排序代码案例如下:

	// 排序
    Collections.sort(formInfoList, new Comparator<FormInfo>() {
      @Override
      public int compare(FormInfo o1, FormInfo o2) {
        //按类型排序
        int flag = o1.getType().compareTo(o2.getType());   //这是升降,前面为升序    o2.getName().compareTo(o1.getName()) ---》这是降序    (下面同理)
        //按标题排序
        if (flag == 0) {
          flag = o1.getFormName().compareTo(o2.getFormName());
        }
        //按部门排序
        if (flag == 0) {
          flag = o1.getDepartment().compareTo(o2.getDepartment());
        }
        //按员工编码排序
        if (flag == 0) {
          flag = o1.getEmployee().compareToIgnoreCase(o2.getEmployee());
        }
/*        //按工资排序
        if(flag==0) {
          flag=(int)(o1.getSal()-o2.getSal());
        }*/
        return flag;
      }
    });



// 先以价格(升序)、后再速度(升序)
list.sort(Comparator.comparingInt(Computer::getPrice).thenComparingInt(Computer::getSpeed));

// 先以速度(降序)、后再价格(升序)【reversed方法:返回一个比较器,它强制执行此比较器的反向排序。】
list.sort(Comparator.comparingInt(Computer::getSpeed).reversed().thenComparingInt(Computer::getPrice));

总结
  1. Comparable是一个内部比较接口,通常对象需要内部排序时直接实现

  2. Comparator是一个外部比较接口,通常在对象中没有实现排序接口而有需要进行排序时实现

  3. Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小

  4. Comparator接口属于临时性的比较。

System

系统级的很多属性(例如:系统名称、jvm版本、)和控制方法都放置在该类的内部。该类位于java.lang包。查看API文档
构造器是私有的,无法实例化该类。其内部的成员变量和成员方法都是static的
成员变量
System类内部包含in、 out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。

Random

Random类是一个专门用来生成一个伪随机数的类,这个类提供了两个构造函数,一个使用默认的种子,另一个需要程序员显示传入一个long型整数的种子。与Math类中的random方法生成的伪随机数不同的是,Math的random方法生成的伪随机数取值范围是[0,1.0),Random类不仅可以生成浮点数的伪随机数,还可以生成整数类型的伪随机数,还可以指定伪随机数的范围非常好用。查看API文档

常用方法

public int nextInt(int n)

该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值