今天康康问了我一个问题, 问我在Java中有没有像C里面stdio.h, C++里面iostream这样的标准类库, 当然是有的, Java里面的标准类都被封装在一个个包里面, 今天就来简要概括一下Java里面常用的包.
问: Java里面有没有不用improt导入就能使用的包?
还真有一个包, 不用导入就能使用里面的类和方法. 比如在main()函数里面只写一句System.out.println(“hello world!”);就不用导入任何包吧, System类就属于这个java.lang包. 那么这个包还有哪些东西呢? 那就从java.lang包开始了解吧!
java.lang包
java.lang是唯一一个不需要自己手动improt导入的包, 它由JVM默认寻找并导入. java.lang提供利用 Java 编程语言进行程序设计的基础类。最重要的类是 Object(它是类层次结构的根)和 Class(它的实例表示正在运行的应用程序中的类). java.lang是Java里面最常用的包, 它主要包含以下内容.
1. 基本数据类型的包装器类, 如Integer, Double
例如: 一个 Double 类型的对象包含了一个类型为 double 的字段, 这表示如果引用某个值, 则可以将该值存储在引用类型的变量中. 这些类还提供了大量用于转换基值的方法, 并支持一些标准方法, 比如 equals 和 hashCode.
也是今天有小伙伴问我包装器类和基本数据类型有什么关系, 就顺便在此总结一下:
- 首先我们都知道的是, 在Java中, new出来的对象都存储在堆里, 我们通过堆栈中的引用来使用这些对象, 但是这样的操作, 对于一些经常被使用, 占用内存很小的变量而言就很不方便, 所以为了提高效率, 将这些变量定义为基本数据类型, 直接存储在堆栈中.
但是为什么又要有包装器类型呢?
- 基本数据类型并不具有对象的性质, 而Java又是一种面向对象的语言, 处处皆对象, 比如集合类Collection, 容器ArrayList, HashMap里面装的都应该是Object类, 基本数据类型是放不进去的, 所以就要将基本数据类型进行包装, 使它们具有对象的性质, 并加入属性和方法, 丰富了基本数据类型的操作.
包装器类型和基本数据类型又有哪些区别呢?
- 1. 数据类型及存储的位置不同: 包装器类型是属于类类型, 通过new来实例化对象, 存储于堆里, 通过堆栈的引用来进行操作; 而基本数据类型存储与堆栈里.
- 2. 声明方式不同: 包装器类型需要new关键字来声明一个对象; 而即本数据类型直接赋值即可.
- 3. 初始值不同: 比如Integer类型的对象的初始值为null; 而int类型的变量的初始值为0.
2. Void类
Void类是一个非实例化的类(其构造方法为private类型(private Void(){})), 它持有一个代表Java关键字void的Class对象的引用. Void类是不允许被继承的, 它多用于在泛型中做占位符使用.
3. Math类
Math类中主要包含了常用的数学函数, 如rand()等.
4. String类, StringBuffer类等
主要提供字符串操作.
5. java.lang里面其他的一些类
- 类 ClassLoader、Process、Runtime、SecurityManager 和 System 提供了管理类的动态加载、外部进程创建、主机环境查询(比如时间)和安全策略实施等“系统操作”.
- 类 Throwable 包含了可能由 throw 语句抛出的对象. Throwable 的子类表示错误和异常.
java.io包
Java的核心库java.io提供了全面的IO接口. 包括: 文件读写、标准设备输出等. Java中IO是以流为基础进行输入输出的, 所有数据被串行化写入输出流, 或者从输入流读入.
java.util包
包含集合框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组、日期Date类、堆栈Stack类、向量Vector类等).集合类、时间处理模式、日期时间工具等各类常用工具包.
java.sql
提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API. 此 API 包括一个框架, 凭借此框架可以动态地安装不同驱动程序来访问不同数据源.
JDBC TM API 主要用于将 SQL 语句传递给数据库, 但它还可以用于以表格方式从任何数据源中读写数据. 通过接口的 javax.sql.RowSet 组可以使用的 reader/writer 实用程序, 可以被定制以使用和更新来自电子表格、纯文本文件或其他任何表格式数据源的数据.