Java从入门到精通2
2023-12-20 14:12:01 0 举报
AI智能生成
Java
作者其他创作
大纲/内容
十七章数据库操作
第一步:注册驱动
创建数据库
语法:create database 数据库名称 [character set 字符集 collate 字符集校对规则];
我们用三种方式创建数据库:
①.创建数据库:
create database db1;
②.以指定的编码表创建数据库:
create database db2 character set gbk;
③.以指定的编码表创建数据库并有校对规则:
create database db3 character set utf8 collate utf8_bin;
我们用三种方式创建数据库:
①.创建数据库:
create database db1;
②.以指定的编码表创建数据库:
create database db2 character set gbk;
③.以指定的编码表创建数据库并有校对规则:
create database db3 character set utf8 collate utf8_bin;
第一步注册驱动
DriverManager.registerDriver(new Driver());
DriverManager.registerDriver(new Driver());
第二步:获取连接
第二步:获取连接
connection=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/school_java","root","1234");
connection=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/school_java","root","1234");
第三步: 获取statement对象
第三步:获取statement对象
PreparedStatement preparedStatement=
connection.prepareStatement("select * from couse;");
PreparedStatement preparedStatement=
connection.prepareStatement("select * from couse;");
第四步: 执行SQL语句返回结果集
第四步: 执行SQL语句返回结果集
ResultSet resultSet=preparedStatement.executeQuery();
ResultSet resultSet=preparedStatement.executeQuery();
第五步: 遍历结果集
第五步:遍历结果集
while(resultSet.next()) {
System.out.print(resultSet.getInt("id")+" ");
System.out.println(resultSet.getString("name"));
while(resultSet.next()) {
System.out.print(resultSet.getInt("id")+" ");
System.out.println(resultSet.getString("name"));
第六步: 关闭连接释放资源
第六步:关闭连接释放资源
resultSet.close();
preparedStatement.close();
resultSet.close();
preparedStatement.close();
要对数据库表中的数据库进行操作,首先应该建立与数据库的连接。通过JDBC API 中提供的各种各类,可对数据表中的数据进行查找、添加、修改、删除等操作。代码如下:
十八章Swing程序设计
Swing 主要用来开发 GUI 程序,GUI 是应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮等图形界面元素。Java语言为 Swing 程序的开发提供了丰富的类库,这些类分别被存储在 java.awt 和 javax.swing 包中
Swing常用窗体
JFrame 窗体
JFrame 类的常用构造方法包括以下两种形式:
- public JFrame(): 创建一个初始不可见、没有标题的窗体。
- public JFrame(String title): 创建一个不可见、具体标题的窗体。在创建窗体后,先调用 getContentPane() 方法将窗体转换为容器,再调用 add() 方法或者 remove() 方法向容器中添加组件或者删除容器中的组件
在创建窗体后,要对窗体进行设置,如设置窗体的位置、大小、是否可见等。具体如下:
- setBounds(int x , int y , int width , int length): 设置窗体左上角在屏幕中坐标为(x , y),窗体的宽度为 width,窗体的高度为height。
- setLocation(int x , int y): 设置窗体左上角在屏幕中的坐标为(x , y)。
- setSize(int width , int height): 设置窗体的宽度为 width,高度为 height。
- setVisible(boolean b): 设置窗体是否可见。b 为 true 时,表示可加;b 为 false 时,表示不可见。
- setDefaultCloseOperation(int operation): 设置窗体的关闭方式,默认值为 DISPOSE_NO_CLOSE。
JDialog 对话框
JDialog 对话框继承了 java.awt.Dialog 类,其功能是从一个窗体中弹出另一个窗体,如使用 IE 浏览器时弹出的确定对话框。JDialog 对话框与JFrame 窗体类似,被使用时也需 getContentPane() 方法把 JDialog 对话框转换为容器,再对 JDialog 对话框进行设置。
JOptionPane 小型对话框
Java API 中的,Javax.swing,JOptionPane 类时一个非常简便的小型对话框类,该类用于创建对话框的方法都是静态方法,无须创建对象即可弹出。在日常开发中经常使用该类弹出提示、确认用户需要、调试程序等。
1、自定义对话框
2、确认框
3、输入框
4、通知框
常用布局管理
null 绝对布局
绝对布局也叫 null 布局,其特点是硬性指定组件在容器中的位置大小,组件的位置通过绝对坐标的方式来指定。使用绝对布局首先使用 Container.seLayout(null)方法取消容器的布局管理器,然后再使用 Component.setBounds(int x,int y,int width,int height)方法设置每个组件在容器中的位置和大小。
FlowLayout 流布局管理器
流布局(FlowLayout)管理器是 Swing 中最基本的布局管理器。使用流布局管理器摆放组件时,组件被从左到右摆放。当组件占据了当前的所有空间时,溢出的组件会被移动到当前的下一行。默认情况下,行组件的排列方式会被指定为居中对齐,但是通过设置可以更改每一行组件的排序方式。
BorderLayout 边界布局管理器
使用 Swing 创建窗体后,容器默认的布局管理器是边界布局(BorderLayout )管理器 ,边界布局把容量划分为东、南、西、北、中5个区域,但组件被添加到设置为边界布局管理器的容器时,需要使用 BorderLayout 类中成员变量指定被添加的组件在边界布局管理器中的区域。
GridLayout 网格布局管理器
网格布局(GridLayout)管理器能够把容器划分为网格,组件可以按行、列进行排序。在网格布局管理器中,网格的个数由行数和列数决定,且每个网格的小大都相同。改变窗体大小时,组件的大小也会随之改变。
常用面板
JPanel 面板
JPanel 面板 继承 java.awt.Container 类。JPanel 面板必须放在窗体容器中使用,无法摆脱窗体显示
JScrollPane 滚动面板
JScrollPane面板,是带滚动条的面板,被用于在较小的窗体中显示较大篇幅的内容,要注意的是,不能使用布局管理器,只能容纳一个组件,如果添加多个组件,那么需要先将多个组件添加到JPanel面板,再将JPanel面板添加到滚动面板
文字标签组件与图标
JLabel 标签
JLabrl标签的父类是JComponent类,标签不能被添加监听器,但是标签显示的文本,图标等内容可以指定对齐方式,通过JLabrl类的构造方法可以创建多种标签,常用的构造方法如下:
图标的使用
在swing程序设计中,图标经常被添加到标签,按钮等组件
它有多个常用方法如下:
它有多个常用方法如下:
按钮组件
JButto按钮
Swing按钮由JButto对象表示,JButto常用的构造方法如下:
创建JButto对象后如果要JButto对象进行设置,那么可以使用JButto提供的方法,提供的方法如下表所示:
JRadioButton单选按钮
单选按钮
创建JRadioButton对象需要使用JRadioButton类的构造方法,,常用构造方法如下
按钮组
Swing按钮组由ButtonGroup对象表示,多个单选按钮被添加到按钮组后能够实现“选项有多个,但只能选中一个的效果”
对象被创建后可以使用add方法把多个单选按钮添加到对象中
对象被创建后可以使用add方法把多个单选按钮添加到对象中
JCheckBox复选框
复选框组件由JCheckBox对象表示,以单选按钮不同的是,窗体中的复选框可以被选中多个,这是因为每一个复选框都提供了被选中和不被选中两种状态。常用构造方法如下
列表组件
JComboBox下拉列表框
初次使用下拉列表框时,会感觉swing中的下拉列表框以WINDOWS操作系统中的下拉列表框有一些相似,实质上两者并不完全相同,因为swing中的下拉列表框不仅可以供用户从中选择,列表项也提供编辑列表项的功能
JComboBox类的常用构造方法如下:
JComboBox类的常用构造方法如下:
JList列表框
列表框组件被添加到窗体中后,就会被指定长和宽。如果列表框的大小不足以容纳列表项的个数,那么需要设置列表框具有滚动效果,即把列表框添加到滚动面板
列表框组件由j list对象表示常用构造方法如下
列表框组件由j list对象表示常用构造方法如下
文本组件
JTextField文本框
文本框组件由JTextField对象表示,JTextField常用构造方法如下:
JPasswordFoeld密码框
密码框组件由JPasswordField对象表示,其作用是把用户输入的字符串,以某种符号进行加密
常用构造方法如下:
常用构造方法如下:
JTrxtArea文本域
文本域组件由JTrxtArea对象表示,其作用是接受用户的多行文本输入,常用构造方法如下:
public JTextArea():
public JTextArea(String text):
public JTextArea(int rows,int columns):
public JTextArea(Document doc):
public JTextArea(Document doc ,String Text,int rows,int columns):
public JTextArea():
public JTextArea(String text):
public JTextArea(int rows,int columns):
public JTextArea(Document doc):
public JTextArea(Document doc ,String Text,int rows,int columns):
JTrxtArea类提供了一个setLineWrap(boolean wrap)方法,这个方法被用于设置文本域中的文本内容,是否可以自动换行。如果参数为true,那么会自动换行,否则不会自动换行
此外,还提供了一个append(String str)方法,这个方法被用于向文本域中添加文本内容
此外,还提供了一个append(String str)方法,这个方法被用于向文本域中添加文本内容
表格组件
创建表格
JTanle类除了提供了默认的构造方法外,还提供了被用于显示二维数组中的元素的构造方法。这个构造方法的语法如下:
JTanle(Object[][]rowDate,Object[]columnNames)
rowDate存储表格数据的二维数组
columnNames,存储表格列明的一维数组
JTanle(Object[][]rowDate,Object[]columnNames)
rowDate存储表格数据的二维数组
columnNames,存储表格列明的一维数组
DefaultTableModel表格数据模型
Swing使用TableModel接口定义了一个表格模型,AbstractDefaultTableModel抽象类实现了TableModel接口的大部分方法只有以下三个抽象方法没有实现
为了实现使用表格模型,创建表格的功能swing提供了表格模型类,DefaultTableModel,DefaultTableModel常用构造方法如下:
为了实现使用表格模型,创建表格的功能swing提供了表格模型类,DefaultTableModel,DefaultTableModel常用构造方法如下:
维护表格模型
表格中的数据内容需要用于维护,
使用getValueAt()方法获得表格中某一个单元格的值,
使用addRow()方法向表格中添加新的行
使用setValueAt方法修改表格中某一个单元格的值
使用removeRow方法从表格中删除指定行等
使用getValueAt()方法获得表格中某一个单元格的值,
使用addRow()方法向表格中添加新的行
使用setValueAt方法修改表格中某一个单元格的值
使用removeRow方法从表格中删除指定行等
事件监听器
ActionEvent动作事件
动作事件(ActionEvent)监听器是 Swing 中比较常用的事件监听器,很多组件的动作都会使用它监听,如按钮被单击等。表 18.9 描述了动作事件监听器的接口与事件源等。
KeyEvent 键盘事件
KeyListener 接口共有 3 个抽象方法,分别在发生击键事件(按下并释放键)、按键被按下(手指按下键但不松开)和按键被释放(手指从按下的键上松开)时被触发,具体如下:
public interface KeyListener extends EventListener {
public void keyTyped(KeyEvent e); //发生击键事件时被触发
public void keyPressed(KeyEvent e); //按键被按下时被触发
public void keyReleased(KeyEvent e); //按键被释放时被触发
}
public interface KeyListener extends EventListener {
public void keyTyped(KeyEvent e); //发生击键事件时被触发
public void keyPressed(KeyEvent e); //按键被按下时被触发
public void keyReleased(KeyEvent e); //按键被释放时被触发
}
当向文本框中输入内容时,将发生键盘事件。KeyEvent 类负责捕获键盘事件,可以通过为组件添加实现了 KeyListener 接口的监听器类来处理相应的键盘事件。
MouseEvent 鼠标事件
MouseListener 接口共有 5个抽象方法,分别在光标移入或移出组件、鼠标按键被按下或释放和发生单击事件时被触发。所谓单击事件,就是按键被按下并释放。需要注意的是,如果按键是在移出组件之后才被释放,则不会触发单击事件。MouseListener 接口的具体定义如下:
public interface MouseListener extends EventListener {
public void mouseEntered(MouseEvent e); //光标移入组件时被触发
public void mousePressed(MouseEvent e); //鼠标按键被按下时被触发
public void mouseReleased(MouseEvent e) //鼠标按键被释放时被触发
public void mouseClicked(MouseEvent e); //发生单击事件时被触发
public void mouseExited(MouseEvent e); //光标移出组件时被触发
public interface MouseListener extends EventListener {
public void mouseEntered(MouseEvent e); //光标移入组件时被触发
public void mousePressed(MouseEvent e); //鼠标按键被按下时被触发
public void mouseReleased(MouseEvent e) //鼠标按键被释放时被触发
public void mouseClicked(MouseEvent e); //发生单击事件时被触发
public void mouseExited(MouseEvent e); //光标移出组件时被触发
十九章Java绘图
Java绘图类
Graphics类
Graphics 类是所有图形上下文的抽象基类,它允许应用程序在组件以及闭屏图像上进行绘制。 Graphics 类封装了 Java 支持的基本绘图操作所需的状态信息,主要包括颜色、字体、画笔、文本、图像等。
Graphics 类提供了绘图常用的方法,利用这些方法可以实现直线、矩形、多边形、椭圆、弧形等形状和文本、图形的绘制操作。另外,在执行操作之前,还可以使用相应的方法设置绘图的颜色和字体等状态属性。
Graphics 类提供了绘图常用的方法,利用这些方法可以实现直线、矩形、多边形、椭圆、弧形等形状和文本、图形的绘制操作。另外,在执行操作之前,还可以使用相应的方法设置绘图的颜色和字体等状态属性。
Graphics2D类
使用 Graphics 类可以完成简单的图像绘制任务,但是它所有实现的功能非常有限,如无法改变线条的粗线、不能对图片使用旋转和模糊等过滤效果。
Graphics2D 类继承Graphics 类,实现了功能更加强大的绘图操作的集合。由于Graphics2D 类是Graphics 类的扩展,也是推荐使用的 Java 绘图类。
Graphics2D 类继承Graphics 类,实现了功能更加强大的绘图操作的集合。由于Graphics2D 类是Graphics 类的扩展,也是推荐使用的 Java 绘图类。
绘制图形
Java可以分为使用 Graphics 类和 Graphics2D 类绘制图形,Graphics 类使用不同的方法实现不同图形的绘制。
绘制颜色与画笔属性
设置颜色
使用 Color 类可以创建任意颜色的对象,不用担心平台是否支持改颜色,因为 Java 以跨平台和与硬件无关的方式支持颜色管理。
设置画笔
setStroke() 方法必须接受一个Stroke 接口的实现类对象作参数,java.awt 包中提供了BasicStroke 类,它实行了了 Stroke 接口,并且通过不同的构造方法创建画笔不同对象。
绘制文本
设置字体
Java使用 Font 类封装了字体的大小、样式等属性,该类在 java.awt 包中定义,其构造方法可以指定字体的名称、大小和样式3个属性。
显示文字
Graphics2D 类提供了 drawString()方法,使用该方法可以实现图形上下文的文本绘制,从而实现在图片上显示文字的功能。
显示图片
绘图不仅可以绘制图形和文本,还可以使用 drawImage() 方法将图片资源显示到绘图上下文中,而且可以实现各种特效处理
图像处理
放大与缩小
使用了 drawImage() 方法将图片以原始大小显示在窗体中,要想实现图片的放大与缩小,则需要使用他的重载方法。
图像翻转
图像的翻转需要使用 drawImage() 方法的另一个重载方法。
图像旋转
图像旋转需要调用 Graphics2D 类的 rotate()方法,该方法将根据指定的弧度旋转图像。
图像倾斜
可以使用 Graphics2D 类提供的 shear()方法设置绘图的倾斜方向,从而使图像实现倾斜的效果。
二十章多线程
创建线程
继承Thread 类
Thread 类时 java.lang 包中的一个类,从类中实例化的对象代表线程,程序员启动一个新线程需要建立 Thread 实例。
Thread 对象需要一个任务来执行,任务是指线程在启动时执行的工作,start() 方法启动线程,该工作的功能被写在run() 方法中。
Thread 对象需要一个任务来执行,任务是指线程在启动时执行的工作,start() 方法启动线程,该工作的功能被写在run() 方法中。
例:让线程循环打印1~10的数字
实现 Runnable 接口
线程都是通过扩展 Thread 类来创建的,如果程序员需要继承其他类(非Thread 类),而且还要是当前类实现多线程,那么可以通过 Runnable 接口来实现。
实现 Runnable 接口的程序会创建一个 Thread 对象,并将 Runnable 对象与 Thread 对象相关联。使用 Runnable 接口启动新的线程的步骤:
实现 Runnable 接口的程序会创建一个 Thread 对象,并将 Runnable 对象与 Thread 对象相关联。使用 Runnable 接口启动新的线程的步骤:
- 建立 Runnable 对象
- 使用参数为 Runnable 对象的构造方法创建 Thread 实例
- 调用 start() 方法启动线程
例:让窗体的图标动起来
线程的生命周期
线程的休眠
一种能控制线程行为的方法是调用 sleep() 方法需要一个参数用于指定该线程休眠的时间,该时间以毫秒为单位。
例:每0.1秒绘制一条随机颜色的线条
线程的加入
当某个线程使用 join() 方法的加入一个线程时,另外一个线程会等待该线程执行完毕后再继续执行。
例:让进度条A等待进度条B
线程的中断
以往有时候会使用 stop() 方法停止线程,但当前版本的 JDK 早已废除了 stop() 方法,不建议使用 stop() 方法来停止一个线程的运行。现在提倡在 run() 方法中使用无限循环的形式,然后使用一个布尔型标记控制循环的停止。
如果线程是因为使用了 sleep()或 wait()方法进入了就入就绪状态,可以使用 Thread()方法,同时程序破除了 InterruptedException 异常,在异常处理时结束了 while 循环。在项目中,经常在这里执行关闭数据连接和关闭 Socket 连接等操作。
如果线程是因为使用了 sleep()或 wait()方法进入了就入就绪状态,可以使用 Thread()方法,同时程序破除了 InterruptedException 异常,在异常处理时结束了 while 循环。在项目中,经常在这里执行关闭数据连接和关闭 Socket 连接等操作。
例:单机按钮停止进度条滚动
线程的礼让
Thread 类提供了一种礼让方法,使用 yied()方法表示,它只是给当前正处于运行状态的线程一个提醒,告知它可以将资源礼让给其他线程,但这仅是一种暗示,没有任何一种机制保证当前线程会将资源礼让。
yied()方法使具有同样优先级的线程有进入可执行状态的机会,在当前线程放弃执行权时再度回到就绪状态。对于支持多任务的操作系统来说,不需要调用 yied()方法,因为操作系统会为线程自动分配 CPU 时间来执行。
yied()方法使具有同样优先级的线程有进入可执行状态的机会,在当前线程放弃执行权时再度回到就绪状态。对于支持多任务的操作系统来说,不需要调用 yied()方法,因为操作系统会为线程自动分配 CPU 时间来执行。
线程的优先级
每个线程都具有各自的优先级,线程的优先级可以表明在程序中该线程的重要性,如果有很多线程处于就绪状态,系统会根据优先级来决定首先使哪个线程进入运行状态。但这并不意味着低优先级的线程得不到运行,而只是它运行的概率比较小,如垃圾回收线程的优先级就按照较低。
线程的优先级可以使用 setPriority()方法调整,如果使用该方法设置的优先级不在 1~10,将产生IllegalArgumentException 异常。
线程的优先级可以使用 setPriority()方法调整,如果使用该方法设置的优先级不在 1~10,将产生IllegalArgumentException 异常。
例:观察不同优先级的线程执行完毕顺序
线程同步
线程安全
在编写多线程时时,因该考虑到线程安全问题。实质上线程问题来源两个线程同时存取单一对象的数据。
线程同步机制
同步块
Java中提供了同步机制,可以有效地防止资源冲突。同步机制使用 synchronized 关键字,使用该关键字包含的代码块称为同步块,也称临界区,语法如下:
synchronized(Object){
}
synchronized(Object){
}
同步方法
二十一章网络通信
网络程序设计基础
局域网与互联网
服务器是指提供信息的计算机或程序,客户机是指请求信息的计算机或程序。网络用于连接服务器与客户机,实现两者间的相互通信。
网络协议
1、IP协议
TCP/IP 模式是一种层次结构,共分为 4 层,分别为应用层、传输层、互联网层和网络层。各层实现特定的功能,提供特定的服务和访问接口,并具有相对的独立性,如图 21.2 所示。
2、TCP与UDP协议
在 TCP/IP 协议栈中,有两个高级协议,即传输控制协议(Transmission Control Protocol,TCP) 与用户数据报协议 (User Datagram Protocol,UDP)。
TCP 协议是一种以固接连线为基础的协议,它提供两台计算机间可靠的数据传送。UDP 协议适合于一些对数据准确性要求不高,但对传输速度和时效性要求非常高的网站,如网络聊天室、在线影片等。
TCP 协议是一种以固接连线为基础的协议,它提供两台计算机间可靠的数据传送。UDP 协议适合于一些对数据准确性要求不高,但对传输速度和时效性要求非常高的网站,如网络聊天室、在线影片等。
3.端口域套接字
一般而言,一台计算机只有单一的连接到网络的物理连接,所以的数据读通过此连接对内、对外送达特定的计算机,这就是端口。网络程序设计的端口(port)并非真实的物理存在,而是一个假想的连接装置。
TCP 程序
TCP 网络程序设计是利用 Socket 类编写通信程序。利用 TCP 协议进行通信的两个应用程序是有主次之分的,一个称为服务器程序,另一个称为客户机程序,两者的功能和编写方法大不一样。
InetAddress类
java.net 包中的 InetAddress 类是与 IP 地址相关的类,利用该类可以获取 IP 地址、主机地址等信息InetAddress 类的常用方法如表 21.1 所示。
ServerSocket类
TCP网络程序设计
明白了 TCP 程序工作的过程,就可以编写 TCP 服务器程序了。在网络编程中,如果只要求客户机向服务器发送消息,不要求服务器向客户机发送消息,称为单向通信。客户机套接字和服务器套接字连接成功后,客户机通过输出流发送数据,服务器则通过输入流接收数据。
UDP程序
用户数据报协议 (UDP) 是网络信息传输的另一种形式。基于 DP 的通信和基于 TCP 的通信不同,基于 UDP 的信息传递更快,但不提供可靠性保证。
DatagramSocket 类
java.net 包中的 DatagramSocket 类用于表示发送和接收数据包的套接字。该类的构造方法如下:
- DatagramSocket()。
- DatagramSocket(int port).
- DatagramSocket(int port, InetAddress addr).
UDP网络程序设计
广播数据报是一项较新的技术,其原理类似于电台广播。广播电台需要在指定的波段和频率上广播信息,收听者也要将收音机调到指定的波段、频率,才可以收听广播内容。
(1)广播主机程序不断地向外播出信息,代码如下:
(2)接收广播程序,代码如下:
十二章集合类
Collection接口
Collection 接口是层次结构中的根接口,构成 Collection 的单位称为元素。Collection 接口通常不能直接使用,但该接口提供了添加元素、删除元素、管理数据的方法
List集合
arraylist
ArrayList 类实现了可变的数组,允许保存所有元素,包括 null,并可以根据索引位置对集合进行快速的随机访问。缺点是向指定的索引位置插入对象或删除对象的速度较慢。
linkedlist
LikedList类采用链表结构保存对象。这种结构的优点是便于向集合中插入和删除对象。需要向集合中插入、删除对象时,使用 LinkedList 类实现的 List 集合的效率较高:但对于随机访
问集合中的对象,使用 LinkedList 类实现 List 集合的效率较低。
问集合中的对象,使用 LinkedList 类实现 List 集合的效率较低。
Set集合
HashSet和TreeSet都是Java中的集合类,它们的主要区别在于底层数据结构和元素的排序方式。
treeset
hashset
同一个哈希地址可以存放多个不同的对象
Map集合
hashmap
HashMap 类是基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,并允许使用null值和null键,但必须保证键的唯一性。HashMap 类通过哈希表对其内部的映射关系进行快速查找。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
treemap
TreeMap 类不仅实现了 Map 接口,还实现了java.util.SortedMap 接口,因此集合中的映射关系具有一定的顺序。但在添加、删除和定位映射关系时,TreeMap 类比 HashMap 类性能稍差
十三章枚举类型与泛型
枚举
使用枚举类型设置常量
设置常量时,我们通常放置在接口中,这样在程序中就可以直接使用。该常量不能被修改,因为在接口中定义常量时,改常量的修饰符为final与static。常规定义常量
设置常量时,我们通常放置在接口中,这样在程序中就可以直接使用。该常量不能被修改,因为在接口中定义常量时,改常量的修饰符为final与static。常规定义常量
深入了解枚举类型
1、values()方法
2、valuesOf()方法与compareTo()方法
3、ordinal()方法
4、枚举类型中的构造方法
使用枚举类型的类型
枚举类型声明提供了一种对用户友好的变量定义方法,枚举了某种数据类型所有可能出现的值。总结枚举类型,它具有以下特点:
- 类型安全。
- 紧凑有效的数据定义。
- 可以和程序其他部分完美交互。
- 运行效率高。
泛型
Object类最上层的父类,很多程序员为了使用更为通用,设计程序时通常使传入的值与返回的值都以Object类型为主。当需要使用这些实例时,必须正确地将该实例转换为原来的类型,否则在运行时将会发生ClassCastException异常。
泛型的高级用法
1、限制泛型可用类型
2、使用类型通配符
3、继承泛型类与现实泛型接口
十四章lambda表达式与流处理
lambda表达式 0>{代码块)
lambda表达式实现函数式接口
1、函数式接口
函数式接口指的是仅包含一个抽象方法的接口,接口中的方法简单明了地说明了接口的用途。开发者可以创建自定义的函数式接口,例如:
interface SayHi{
String say();
}
interface SayHi{
String say();
}
2.lambda 表达式实现无参抽象方法
很多函数式接口的抽象放方法式无参数的这样的无参抽象方法在lambda表达式中使用“()”表示。
代码如下:
代码如下:
3、lambda 表达式实现有参抽象方法
抽象方法中有一个或多个参数的函数式接口也是很常见的,lambda 表达式中可以用“(a1,a2,a3)”的方法表示有参数抽象方法,圆括号里标识符对应抽象方法的参数。如果抽象方法中只有一个参数,则可以省略圆括号。代码如下:
4、lambda 表达式使用代码块
当函数式接口的抽象方法需要方法实现复杂逻辑而不是返回一个简单的表达式的话,就需要在lambda 表达式中使用代码块。lambda 表达式会自动判断返回值类型是否符合抽象方法的定义。
代码如下:
代码如下:
lambda表达式调用外部变量
1、lambda 表达式无法更改局部变量
2、 lambda 表达式可以更改类成员变量
lambda表达式与异常处理
很多接口的抽象方法为保证程序的安全性,会在定义时就抛出异常。但是lambda 表达式中并没有抛出异常的语法,这是因为lambda 表达式会默认抛出抽象方法原有的异常,当此方法被调用时则需要进行异常处理。代码如下:
方法的引用:
引用静态方法
引用静态方法的语法如下:
类名::静态方法名
类名::静态方法名
引用成员方法
引用成员方法的语法如下:
对象名::成员方法名
对象名::成员方法名
引用带泛型的方法
泛型是Java开发经常使用到的功能,“::”操作支持引用带泛型的方法。除方法外,“::”操作符也支持引用带泛型的类。
引用构造方法
1、引用无参数构造方法
引用无参数构造方法的方法如下:
类名::new
引用无参数构造方法的方法如下:
类名::new
2、 引用有参数构造方法
引用有参构造方法的语法与引用无构造方法一样。区别就是函数式接口的抽象方法是有参数的。
引用有参构造方法的语法与引用无构造方法一样。区别就是函数式接口的抽象方法是有参数的。
流处理
数据过滤
1、filter() 方法
filter() 方法是Stream 接口提供的过滤方法。该方法可以将 lambda 表达式作为参数,然后按照 lambda 表达式的逻辑过滤流中的元素。过滤出想要的流元素后,还需使用 Stream 提供的 collect()方法按照指定方法重新封装。
2、limit() 方法
limit() 方法是Stream 接口提供的方法,该方法可以忽略流中的前 N 个元素。
3、distinct()方法
()方法是 Stream 接口提供的过滤方法。该方法可以去除流中的重复元素,效果与 SQL 语句中的 DISTINCT 关键字
4、skip () 方法
skip () 方法是 Stream 接口提供的方法,该方法可以忽略流中的前 N 个元素。
数据映射
数据的映射和过滤概念不同 :过滤是在流中找到符合条件的元素,映射是在流中获得具体的数据。Stream接口提供了map()方法用来实现数据映射,map()方法会按照参数中的函数逻辑获取新的流对象,新的流对象中元素类型可能与旧流对象元素类型不同,
数据查找
1、allMatch()方法
allMatch()方法是 Stream 接口提供的方法,该方法会判断流中的元素是否全部符合某一条件,返回结果是 boolean 值。如果所有元素都符合条件则返回 true,否则返回 false。
2、anyMatch() 方法
anyMatch() 方法是 Stream 接口提供的方法,该方法会判断流中的元素是否有符合某条件,只要有一个元素符合条件就返回 true,如果没有元素符合条件才会返回 false。
3、noneMatch() 方法
noneMatch() 方法是 Stream 接口提供的方法,给方法会判断流中的所有元素是否都不符合某一条件。这个方法的逻辑和 allMatch() 方法正好相反。
4、findFirst()方法
findFirst()方法是 Stream 接口提供的方法,这个方法会返回符合条件的第一个元素。
数据收集
1、数据统计
数据统计不仅不可以筛选出特殊元素,还可以对元素的属性进行统计计算。这种复杂的统计操作不是由 Stream 实现的,而是由 Collectors 收集器类实现的,收集器提供了非常的API,有着其强大的数据挖掘能力。
2、数据分组
数据分组就是将流中元素按照指定的条件分开保存,类似 SQL 语言中的 “GROUP BY” 关键字。分组之后的数据会按照不同标签分别保存成一个集合,然后按照 “键—值” 关系封装在 Map 对象中。
十五章I\O(输入\输出)
输入输出流
流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。
输入流
nputStream 类是字节输入流的抽象类,它是所有字节输入流的父类。InputStream 类的具体层次结构如图15.3 所示。
输出流
OutputStream 类是字节输出流的抽象类,此抽象类是表示输出字节流的所有类的超类OuputSteam类的具体层次如图 15.5 所示。
file类
文件的创建与删除可以使用 File 类创建一个文件对象。通常使用以下 3 种构造方法来创建文件对象。
1.File(String pathname)
该构造方法通过将给定的路径名字符串转换为抽象路径名来创建一个新 File 实例。语法如下:
new File(String pathname)
其中,pathname 代表路径名称 (包含文件名)。例如:
File file = new File("d:/1.txt");
new File(String pathname)
其中,pathname 代表路径名称 (包含文件名)。例如:
File file = new File("d:/1.txt");
2.File(String parent,String child)
该构造方法根据定义的父路径和子路径字符串 (包含文件名)创建一个新的 File对象。语法加下:
new File(String parent,String child)
new File(String parent,String child)
- parent:父路径字符串,如D:/或 D:/doc。
- child:子路径字符串,如letter.txt。
3.File(File f, String child)
该构造方法根据f抽象路径名和 child 路径名字符串创建一个新 File实例。语法如下:
new File(File f,String child)
new File(File f,String child)
- f:父路径对象,如D:/doc/。
- child:子路径字符串,如 letter.txt
如果D盘没有word.txt文件,输出内容:文件已创建
如果D盘有word.txt文件,输出内容:文件已删除
如果D盘有word.txt文件,输出内容:文件已删除
文件输入输出流
程序运行期间,大部分数据都在内存中进行操作,当程序结束或关闭时,这些数据将消失。如果需要将数据永久保存,可使用文件输入/输出流与指定的文件建立连接,将需要的数据永久保存文件中。
FileInputStream 类与 FileOutputStream 类
FileOutputStream 类是 OutputStream 类的子类。
FileInputStream 类常用的构造方法如下:
FileInputStream 类常用的构造方法如下:
- FileInputStream(String name)。
- FileInputStream(File file)。
FileReader 和FileWriter 类
带缓存的输入输出流
BufferedlnputStream 与 BufferedOutputStream 类
BufferedInputStream 类可以对所有 InputStream 类进行带缓存区的包装以达到性能的优化。BuferedInputStrcam 类有两个构造方法;
BufferedInputStream(InputStream in)。
BufferedInputStream(InputStream in,int size)。
BufferedInputStream(InputStream in)。
BufferedInputStream(InputStream in,int size)。
BufferedReader 与 BufferedWriter 类
BufferedReader 类与 BufferedWriter 类分别继承 Reader 与 Writer 类。这两个类同时具有内部缓存机制,并能够以行单位进行输入/输出。 BufferedReader 类常用的方法如下:
数据输入输出流
数据输入/输出流 (DataInputStream 类与 DataOutputStream 类)允许应用程序以与机器无关的方式从底层输入流中读取基本 Java 数据类型。也就是说,当读取一个数据时,不必关心这个数值应当是哪个字节
十六章反射与注解
反射
通过Java反射机制,可以在程序中访问已经装载到JVM中的Java对象的描述,实现访问、检测和修改描述Java对象本身信息的功能。Java反射机制的功能十分强大,在java.lang.reflect包中提供了对该功能的支持。
访问构造方法
在通过下列一组方法访问构造方法时,将返回 Constructor 类型的对象或数组。每个Constructor 对象代表一个构造方法。
访问成员变量
在通过下列一组方法去访问成员变量时,将返回 Field 类型的对象或数组。
访问成员方法
在通过下列一组方法访问成员方法时,将返回 Method 类型的对象或数组。
Annotation注解功能
定义Annotation类型
访问Annotation信息
如果在定义 Annotation 类型时将@RetentionPolicy.RUNTIME,那么在运行程序时通过反射就可以获取到相关的 Annotation 信息,如获取构造方法、字段和方法的 Annotation 信息。
收藏
收藏
0 条评论
下一页