java基础-java类库总结

开发的时候,ide引入了一堆jar包,之前没咋注意,因为动手就开发,后来想了想这都是些个啥啊。网上搜罗到的大家一起看看吧。
resources.jar:资源包(图片、properties文件)
rt.jar:运行时包
jsse.jar: Java 安全套接字扩展类库,用于实现加密的 Socket 连接
jce.jar:Java 加密扩展类库,含有很多非对称加密算法在里面,但也是可扩展的。
charsets.jar:Java 字符集,这个类库中包含 Java 所有支持字符集的字符
dnsns.jar:与 DNS 有关
localedata.jar:本地机器语言的数据,比如日期在使用中文时,显示的是“星期四”之类的
sunec:Java加密api的JCE提供程序
sunjce_provider.jar:为JCE 提供的加密安全套件
sunmscapi.jar:数字签名
sunpkcs11.jar: PKCS#11 证书工具
jfr.jar:飞行记录器JFR
jaccess.jar:辅助技术提供对实现Java Accessibility API的GUI工具包的访问(可见)
zipfs.jar:Zip File System Provider(文件压缩包)
access-bridge-64
cldrdata:Unicode通用语言环境数据存储库
jfxrt:javaFx相关的java包
nashorn:JVM的JavaScript解析引擎
其实看了看,绝大部分包确实是都没有用上过。rt.jar包干了绝大部分的事。
其他的包,加密的四个包还有压缩功能的包偶尔有用到。其他的FX我是一直没用过,dns看到过例子程序实际开发也确实没有使用。jfr查了查,叫飞行记录器,其实需要开启,然后运行过程采集一些数据,可以导入jmc中查看定位问题用的。

开发过程中,jar包引入后其实都不咋关注哪个类在哪个包里,反正引入了就可以用。所以说说官方的包空间命名
java.* Java核心包,值再rt.jar包中存在,最基础的类都在这个里面
javax.* x即extension,java扩展包,是对java.的扩展和优化,但因为使用次数多,已经成为核心的一部分,随着JDK一起发布
com.sun.
是sun的hotspot虚拟机中java.* 和javax.的实现类。因为包含在rt中,所以我们也可以调用。但是因为不是sun对外公开承诺的接口,所以根据根据实现的需要随时增减,因此在不同版本的hotspot中可能是不同的,而且在其他的jdk实现中是没有的,调用这些类,可能不会向后兼容,所以一般不推荐使用。
sun.
1、不是API公开接口的一部分,调用sun包的程序并不能确保工作在所有Java平台上,不同的操作系统中的实现可能不相同。2、不同的jdk版本sun包中的类也可能不定期的变化,因此sun.包中的类没有提供API文档及源码。,所以不建议使用
jdk.
jdk的工具包,一般开发用不上除非是要内置一些要调用jdk的功能,比如监控内部系统等。

java主要包介绍
java.lang——包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
java.net——包含执行与网络相关的操作的类和接口。
java.io——包含能提供多种输入/输出功能的类。
java.util——包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
java.text——包含了一些java格式化相关的类
java.sql——包含了java进行JDBC数据库编程的相关类/接口
java.awt——包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。

下面详细介绍两个非常常用也是经常考到的类集合
集合包-对象关系图如下
对象关系图
java的集合分为两类,collection和map。
collection即列表形式,主要分为list、set、queue。
list可以有重复元素
set不能有重复元素
queue是队列,更常用的是deque双端队列和blackingQueue阻塞队列。
map即键值对形式。
针对他们各种实现类,主要区别就是底层实现方式【hash、数组、链表、树】;是否有序;是否线程安全。
常用集合类:
ArrayList:数组实现,有序,非线程安全
LinkedList:链表实现,有序,非线程安全
HashSet:hash实现,无序,非线程安全
TreeSet:树实现,有序,非线程安全
Vector:数组实现,有序,线程安全
HashMap:hash实现,无序,非线程安全
TreeMap:树实现,有序,非线程安全
HashTable:hash实现,无序,线程安全
ConcurrentHashMap:hash实现,无序,线程安全

并发包
并发包含有类说明图
这个不是类图,只是类的说明图。
面试问及最多的就是锁、线程池和原子类。
线程池的问题在池化并发问题中已经说过。按照阿里给出建议尽量使用ThreadPoolExecutor来创建线程池。
原子类底层原理就是 volatile与unsafe的cas操作结合实现的。是绝对线程安全的。
锁在并发问题中也具体说明,底层就是AQS实现控制状态和等锁队列。

补充一个String相关的问题,这个也是经常被问到的。
字符串类图
String、StringBuffer、StringBuilder的区别?
String不可变序列,若是使用双引号生成的或者对象调用过intern方法值是放在字符串常量池中,java1.6之前字符串常量池是存在方法区的,之后是存放在堆中。
StringBuffer可变的字符串,所以一般用于构造可变的字符串使用,线程安全。
StringBuilder可变的字符串,所以一般用于构造可变的字符串使用,线程不安全。
效率对比:StringBuilder > StringBuffer > String

参考资料
JDK中各种Jar包说明
JDK中主要包的介绍
java包分类
java集合继承关系图
java集合继承关系图
Java并发包基石-AQS详解
javaJDK并发包类图
Java 并发之Concurrent 包综述
深入理解Java String类

posted @ 2021-03-05 17:58  Q-JayLee  阅读(303)  评论(0)    收藏  举报