目录
一、牛客网案例题目。
二、Java常用包的总结。
<1>JAVA常用包(图片)。
java.lang%E5%8C%85%E3%80%82-toc" style="margin-left:120px;"><2>java.lang包。
java.util%E3%80%82-toc" style="margin-left:120px;"><3>java.util包。
(1)集合框架。
1、Collection接口。
2、List接口。
3、Set接口。
4、Queue接口。
5、Map接口。
6、Collections类与Arrays类。
7、集合框架图。
(2)日期和时间。
1、Date类。
2、Calendar类。
3、TimeZone类。
(3)随机数生成。
1、Random类。
(4)其他实用工具类。
1、Properties类。
2、StringTokenizer类。
3、UUID类。
4、Stack类。
java.sql%E3%80%82-toc" style="margin-left:120px;"><4>java.sql包。
(1)基本概念。
(2)主要功能。
1、数据库的连接。
2、执行SQL语句。
3、处理结果集。
4、管理连接。
5、异常处理。
(3)关键类与接口。
1、DriverManager。
2、Connection。
3、Statement、PreparedStatement、CallableStatement。
4、ResultSet。
5、SQLException。
(4)JDBC的工作流程。
1、加载数据库驱动程序。
2、建立数据库连接。
3、创建Statement对象。
4、执行SQL语句。
5、处理结果集。
6、关闭资源。
(5)JDBC的优势。
1、平台无关性。
2、简单易用。
3、安全性。
4、可扩展性。
java.io%E3%80%82-toc" style="margin-left:120px;"><5>java.io包。
(1)Java IO的基本概念。
(2)Java IO的分类。
1、基于字节操作的I/O接口。
2、基于字符操作的I/O接口。
3、基于磁盘操作的I/O接口。
4、缓冲流。
5、序列化流。
6、数据流。
(3)Java IO的常用类和方法。
1、File类。
2、InputStream和OutputStream类。
3、Reader和Writer类。
4、缓冲流类。
5、序列化流类。
(4)Java IO的异常处理。
(5)Java IO的编码与解码。
(6)Java IO的性能优化。
1、使用缓冲流。
2、选择合适的字符编码。
3、关闭流资源。
(7)try-with-resources语句。
1、基本介绍。
2、基本语法结构。
3、补充说明。
一、牛客网案例题目。
题目:提供java存取数据库能力的包是?
答案:A。没有java.db包!
优秀评论:
二、Java常用包的总结。
<1>JAVA常用包(图片)。
java.lang%E5%8C%85%E3%80%82" style="background-color:transparent;"><2>java.lang包。
(java.lang是Java编程语言的核心包,它提供了Java程序的基础类和接口)
- Object类(所有Java类的基类)
- String类(用于处理不可变的字符序列,提供了丰富的字符串操作方法)
- Class类(代表正在运行的Java类或接口的信息,是反射机制的核心)
- Thread类(代表线程,用于实现多线程编程)
- 包装类(如Integer、Double、Boolean等,为每种基本数据类型提供了对应的包装类,实现了对象和基本类型的互换,支持泛型、集合操作等面向对象特性)
- Math类(提供了一系列静态方法进行数学运算,如平方根、随机数生成、最大最小值等)
- Exception与Error类(作为异常处理体系的基础类,Exception表示程序运行时可能需要捕捉并处理的异常情况,Error则通常指示严重的错误,一般不被捕获)
java.util%E3%80%82" style="background-color:transparent;"><3>java.util包。
(java.util是Java标准库中一个非常核心的包,提供了许多实用的类和接口。主要用于处理集合数据结构、日期时间、随机数生成、工具操作等)
(1)集合框架。
1、Collection接口。
- 所有集合类的根接口,定义了集合的基本操作,如添加、删除、包含等。
- Collection接口没有直接实现,它的子接口List、Set和Queue实现了具体的集合类型。
2、List接口。
- 表示有序的集合,可以包含重复的元素。主要实现类有ArrayList和LinkedList。
- ArrayList基于动态数组实现,支持快速随机访问,但在插入和删除操作上较慢;
- LinkedList基于双向链表实现,支持快速插入和删除,但在随机访问上较慢。
3、Set接口。
- 表示不允许重复元素的集合。主要实现类有HashSet、LinkedHashSet和TreeSet。
- HashSet基于哈希表实现,元素没有顺序,提供高效的查找、添加和删除操作;LinkedHashSet继承自HashSet,保持插入顺序;
- TreeSet基于红黑树实现,元素按照自然顺序或指定比较器排序。
4、Queue接口。
- 表示先进先出的队列。
- 主要实现类有LinkedList和PriorityQueue。
- LinkedList实现了Queue接口,支持队列操作;
- PriorityQueue基于优先级堆实现,元素按照优先级顺序排序。
5、Map接口。
- 用于存储键值对的集合。
- 主要实现类有HashMap、LinkedHashMap和TreeMap。
- HashMap基于哈希表实现,允许null键和null值,键值对没有顺序;
- LinkedHashMap继承自HashMap,保持插入顺序;TreeMap基于红黑树实现,键按照自然顺序或指定比较器排序。
6、Collections类与Arrays类。
- Collections类提供了对集合进行操作的静态方法,如排序、查找、同步等;
- Arrays类提供了对数组进行操作的静态方法,如排序、搜索、转换等。
7、集合框架图。
(2)日期和时间。
1、Date类。
- 表示一个特定的时间点,包含年月日时分秒等信息。
- 但Date类设计不够灵活,已被新的日期时间API所取代。
2、Calendar类。
- 用于处理日期和时间,提供了对日期的各种操作,如加减日期、获取日期组件等。Calendar是一个抽象类,有多个实现类。如GregorianCalendar表示公历的日期和时间。
3、TimeZone类。
- 表示时区,用于处理不同地区的时间。
(3)随机数生成。
1、Random类。
- 提供伪随机数生成器,可以生成各种类型的随机数,包括整数、浮点数、布尔值等。
(4)其他实用工具类。
1、Properties类。
- 扩展自Hashtable,用于存储和操作键值对的集合,通常用于读取和写入配置文件。
2、StringTokenizer类。
- 用于分割字符串,但它是旧版的字符串分割工具,现代Java推荐使用String.split()方法。
3、UUID类。
- 提供生成唯一标识符的功能,常用于生成唯一的ID。
4、Stack类。
- java.util包还包括了Stack类(基于Vector实现的栈结构,但现代Java推荐使用Deque接口的实现类如ArrayDeque来替代实现栈功能)、BitSet类(用于处理位集合)、EventObject类(用于事件处理机制中的事件对象)等实用工具类。
java.sql%E3%80%82" style="background-color:transparent;"><4>java.sql包。
(java.sql是Java编程语言中专门用于数据库访问和处理的包。它提供了一套完整的API,允许Java程序与各种数据库进行交互,包括连接数据库、执行SQL语句、处理结果集以及管理数据库连接等)
(这些功能是通过JDBC技术实现的,JDBC是Java数据库连接的标准API,它使得Java程序能够以一种统一的方式访问不同类型的数据库)
(1)基本概念。
- java.sql包。Java标准库中的一个包,包含了用于数据库访问和处理的类和接口。
- JDBC(Java Database Connectivity)。Java数据库连接,是java.sql包实现的核心技术,它提供了一套用于执行SQL语句的Java API。
(2)主要功能。
1、数据库的连接。
- 通过DriverManager类,可以建立与数据库的连接。
- DriverManager:这是java.sql包中的一个核心类。它负责加载数据库驱动程序,并根据提供的数据库URL、用户名和密码等信息建立与数据库的连接。
- DriverManager类维护了一个已注册的JDBC驱动程序的列表,并管理这些驱动程序的连接请求。
2、执行SQL语句。
- Statement:这是一个接口,用于执行静态SQL语句并返回结果。
- 通过Connection对象可以创建Statement对象。Statement对象可以执行简单的SQL查询、更新和删除操作。
- PreparedStatement:这是Statement的一个子接口,它代表一条预编译的SQL语句。
- 与Statement相比,PreparedStatement允许将SQL语句中的参数进行参数化,从而提高了SQL语句的安全性和性能。PreparedStatement还可以用于执行带有IN参数的批量更新操作。
- CallableStatement:这是另一个Statement的子接口,它用于执行数据库中的存储过程。
- CallableStatement对象可以调用数据库中的存储过程,并处理存储过程的输出参数和结果集。
3、处理结果集。
- ResultSet:这是一个接口,它代表数据库查询操作的结果集。
- ResultSet对象可以逐行遍历查询结果,并访问每一列的数据。ResultSet还提供了许多方法来获取不同类型的数据,如getString()、getInt()等。
- ResultSetMetaData:这是一个接口,它提供了关于ResultSet对象中列的信息。
- 通过ResultSetMetaData对象,可以获取ResultSet中列的数量、列名、列的数据类型等信息。
4、管理连接。
- Connection:这是一个接口,它代表与数据库的连接。
- 通过Connection对象,可以创建Statement对象、管理事务(如提交和回滚)、设置连接属性等。Connection对象还提供了关闭连接的方法,以释放数据库资源。
5、异常处理。
- SQLException:这是java.sql包中的一个异常类,它表示在数据库操作中发生的错误或异常。
- SQLException类提供了许多方法来获取关于异常的详细信息,如错误代码、SQL状态、异常原因等。
(3)关键类与接口。
1、DriverManager。
- 管理数据库驱动程序的加载和建立数据库连接。
2、Connection。
- 代表与特定数据库的连接。
3、Statement、PreparedStatement、CallableStatement。
- 用于执行SQL语句。
4、ResultSet。
- 表示数据库查询的结果集。
5、SQLException。
- 表示在数据库操作中发生的异常。
(4)JDBC的工作流程。
1、加载数据库驱动程序。
- 在使用JDBC之前,需要先将数据库驱动程序加载到Java虚拟机中。
- 这通常是通过调用Class.forName()方法来实现的,该方法会加载指定类的字节码,并触发该类的静态代码块的执行,从而加载数据库驱动程序。
2、建立数据库连接。
- 通过DriverManager类的getConnection()方法,可以根据提供的数据库URL、用户名和密码等信息建立与数据库的连接。
3、创建Statement对象。
- 通过Connection对象的createStatement()方法,可以创建一个Statement对象,用于执行SQL语句。
4、执行SQL语句。
- 使用Statement对象的executeQuery()、executeUpdate()或execute()方法执行SQL语句。
- 其中,executeQuery()方法用于执行查询操作,并返回一个ResultSet对象;
- executeUpdate()方法用于执行更新、插入或删除操作,并返回一个表示受影响的行数的整数;
- execute()方法则可以执行任何SQL语句,并返回一个布尔值来表示是否返回了一个结果集。
5、处理结果集。
- 如果SQL语句是一个查询操作,那么执行后会返回一个ResultSet对象。
- 通过ResultSet对象可以逐行遍历查询结果,并访问每一列的数据。
6、关闭资源。
- 最后,需要关闭ResultSet、Statement和Connection对象以释放数据库资源。
- 这通常是通过调用它们的close()方法来实现的。
(5)JDBC的优势。
1、平台无关性。
- JDBC为Java程序提供了统一的数据库访问接口,使得Java程序可以跨平台运行,无需针对不同数据库编写不同的代码。
2、简单易用。
- JDBC提供了丰富的API,使得数据库操作变得简单直观。
3、安全性。
- 通过PreparedStatement等接口,可以避免SQL注入等安全问题。
4、可扩展性。
- JDBC支持自定义类型和复杂类型的数据映射,使得Java程序可以处理更加复杂的数据结构。
java.io%E3%80%82" style="background-color:transparent;"><5>java.io包。
(Java的核心库java.io提供了全面的IO(输入/输出)接口,涵盖了从文件读取和写入到网络通信的各种功能)
(1)Java IO的基本概念。
- I/O是输入和输出的简写,指的是数据在计算机内部和外部设备之间的流动。
- 简单来说,当你从键盘输入数据、从鼠标选择操作,或者在屏幕上看到图像,这些都是I/O操作。它就像是计算机与外部世界沟通的桥梁,没有I/O,计算机就不知道如何接收和发送信息。
- Java IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。
- 在Java中,流是一个抽象的概念。当程序需要读取数据的时候,就会开启一个通向数据源的流;当程序需要写入数据的时候,就会开启一个通向目的地的流。
(2)Java IO的分类。
1、基于字节操作的I/O接口。
- 包括InputStream和OutputStream。InputStream用于从数据源读取字节数据,OutputStream用于向数据目标写入字节数据。
2、基于字符操作的I/O接口。
- 包括Reader和Writer。Reader用于从数据源读取字符数据,Writer用于向数据目标写入字符数据。
3、基于磁盘操作的I/O接口。
- 主要是File类,用于操作文件和目录,如创建、删除、重命名文件等。
4、缓冲流。
(如BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter等)
- 用于提高读写效率;
5、序列化流。
(如ObjectInputStream、ObjectOutputStream等)
- 用于对象的序列化和反序列化
6、数据流。
(如DataInputStream、DataOutputStream等)
- 用于以与机器无关的方式读取和写入基本Java数据类型。
(3)Java IO的常用类和方法。
1、File类。
- 用于表示文件和目录路径名的抽象表示形式。
- 常用方法有exists()、createNewFile()、delete()、isDirectory()等等。
2、InputStream和OutputStream类。
- 这两个类是字节流的基类。
- InputStream的常用方法有read()、close()等;
- OutputStream的常用方法有write()、flush()、close()等。
3、Reader和Writer类。
- 这两个类是字符流的基类。
- Reader的常用方法有read()、close()等;
- Writer的常用方法有write()、flush()、close()等。
4、缓冲流类。
- 如BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter等,通过内部缓冲区提高了读写效率。
5、序列化流类。
- 如ObjectInputStream、ObjectOutputStream等,用于对象的序列化和反序列化操作。
(4)Java IO的异常处理。
- 在IO操作中,异常处理非常重要。常见的IO异常有IOException,它是所有IO异常的基类。
- 在进行IO操作时,通常需要使用try-catch语句来捕获和处理可能的异常。
(5)Java IO的编码与解码。
- 在字符流操作中,涉及到编码和解码的过程。
- 编码是将字符转换为字节的过程,解码是将字节转换为字符的过程。
- Java提供了InputStreamReader和OutputStreamWriter类来实现字符流和字节流之间的转换。这两个类分别用于将字节输入流转换为字符输入流和将字符输出流转换为字节输出流。在转换过程中,需要指定字符编码(如UTF-8、GBK等),以确保字符的正确转换。
(6)Java IO的性能优化。
1、使用缓冲流。
- 缓冲流通过内部缓冲区提高了读写效率,减少了实际I/O操作的次数。
2、选择合适的字符编码。
- 在字符流操作中,选择合适的字符编码可以减少编码和解码过程中的性能损耗。
3、关闭流资源。
- 在完成IO操作后,应及时关闭流资源以释放系统资源。可以使用try-with-resources语句来自动关闭流资源。
(7)try-with-resources语句。
1、基本介绍。
try-with-resources
语句是 Java 7 引入的一个特性,它简化了资源管理。- 特别是那些实现了
AutoCloseable
接口(或其子接口Closeable
)的资源。如文件、数据库连接等。这些资源在try
语句执行完毕后会自动关闭,无需显式地在finally
块中关闭!!!
2、基本语法结构。
(简写:try(...){...}catch(...){...} 注意括号!!)
java">try (声明并初始化一个或多个资源) { // 使用资源的代码 } catch (异常类型 变量名) { // 处理异常的代码 }
3、补充说明。
- 这里的资源是指在括号中声明的、实现了
AutoCloseable
接口的对象。- 当
try
块执行完毕后,无论是正常结束还是由于异常而结束,这些资源都会被自动关闭。关闭操作是通过调用资源的close()
方法来实现的。
- 虽然
try-with-resources
语句提供了自动关闭资源的功能,但它并不能处理所有类型的资源。只有那些实现了AutoCloseable
接口的资源才能被自动关闭。- 对于其他类型的资源,我们仍然需要在
finally
块中手动关闭它们。
- 此外,
try-with-resources
语句中的资源声明必须是局部的。它们必须在try
语句的括号中声明并初始化,而不能是已经存在的变量。"()"中声明初始化。- 这是为了确保资源在
try
块执行完毕后能够被正确地关闭。