千家信息网

Java事件与错误处理方法是什么

发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇文章主要讲解了"Java事件与错误处理方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java事件与错误处理方法是什么"吧!12.1事件处
千家信息网最后更新 2025年11月13日Java事件与错误处理方法是什么

这篇文章主要讲解了"Java事件与错误处理方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java事件与错误处理方法是什么"吧!

  12.1事件处理

  传授新知

  消息驱动、事件处理是面向对象编程技术的主要特点,它一改过程语言的顺序执行,整个程序以程序代码为主线地思想,而是变成了由用户,使用程序的用户为主线的思想。

  通俗地说,以前的程序设计思想中,整个程序的运行流程是以程序本身为主的,整个运行流程是在程序中预定义的。而在面向对象的程序设计思想中,则是让用户来掌握主动权,整个运行流程是由用户来决定的。应用程序一旦构建完GUI后,它就不再工作,而是等待,等待用户通过鼠标、键盘给它通知(消息驱动),它再根据这个通知的内容进行相应的处理(事件处理)。

  我们来回顾一下,在我们讲解使用"按钮"时,曾经在程序中使用过这样的一段程序:

button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
Toolkit.getDefaultToolkit().beep();
}
});


  当时,我们已经对它的功能做了描述:首先为按钮buuton1增加了一个事件监测器,这个事件监测器用来监测按钮是否按下(ActionEvent)。另外,我们还编写了一个事件处理的程序段:


public void actionPerformed(ActionEvent evt)
{
Toolkit.getDefaultToolkit().beep();
}

  当按钮按下时,就会执行这个程序段,也就执行了Toolkit.getDefault.Toolkit().beep()方法,即响了一声铃。

  在程序中要编写"事件处理"程序段时,通常可以分为以下几个步骤来做:

  1.确定事件类型

  几乎用户使用鼠标、键盘做的每一个动作都会引起一个消息,也就是会引发一个事件,但我们并不是要对这些所有的事件都做出反应,有些事件并不是我们所关心的。对于不同的部件,我们需要关心的事件往往不同。下表中列出了最常用到的几个事件。

  部件 事件类型 事件描述

  JButton ActionEvent 按下了按钮

  CheckBox ActionEvent 选择或取消选择复选框

  JTextField ActionEvent 用户输入文本输入回车键

  表12-1 常用部件-事件一览表

  2.为部件增加一个该事件的监测器

  每一种事件类型都有一个相应的接口,通常名为XXXListener,其中XXX代表它所处理的事件类型。这些接口包含在java.awt.event和javax.swing.event包中。例如:


button1.addActionListener(new ActionListener()
{
……
});

  3.增加事件处理程序

  最后,我们就要往里面增加血肉,实际的事件处理程序。

  正如你所看到的一样,编写事件处理程序并不是一件简单的事,要写好事件处理程序更不是那么简单。由于本书是一本Java的入门性书籍,所以并没有把每个部件的全部事件都列举出来,做一个一一讲解。在此,只求大家能够通过学习对事件处理过程有一个粗略地了解,以便大家能够学习、研究各种与事件处理相关的知识。

  实例说明

  我们曾经在第10章中使用过Frame来构建小应用程序,当时我们可以看到程序执行时是新弹出了一个窗口,也就是一个Frame,这个Frame有最大化、最小化、关闭按钮。不知各位读者是否注意到,在这个Frame中呢,关闭按钮并没有生效,这是因为在程序中并未定义对这个事件的处理。下面我们来看一段程序,看一下它是如何使这个关闭按钮生效的。根据惯例,我们首先创建一个源程序:

  源程序:closeTest.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class closeTest
{
public static void main(String args[])
{
Frame frame1=new Frame("This is a Frame");
frame1.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
frame1.setSize(200,200);
frame1.show();
}
}
  这是一个Java的应用程序,我们首先使用javac编译,然后执行:

java closeTest

  来执行这个程序,程序的输出极为简单:

  图12-1 程序closeTest.java的输出

  一些提示:

  这个程序也从侧面说明了,我们在Java的应用程序中也可以使用GUI界面,虽然我们一直使用Java小应用程序(Applet)来举例。

  程序的输出是一个空白的Frame,大家现在按下关闭按钮,你会发现,这个Frame马上被关闭了。我们实现了我们的目标。

  传授新知

  下面,我们一起来看一下这个程序:

  1)

public static void main(String args[])

  大家应该还记得,一个Java应用程序(Application)是从main方法开始执行的吧!

  2)

Frame frame1=new Frame("This is a Frame");

  在这时,我们定义了一个Frame,这个我们学习过了,不会多说。

  3)

frame1.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});

  这段程序是本节最重要的内容。它为容器frame1增加了一个有关window(窗口)的事件监测器。监测的事件是什么?是windowClosing,也就是按下关闭按钮。

  如果监测到这个按钮被按下时,就执行System.exit(0)退出程序。

  4)

frame1.setSize(200,200);
frame1.show();

  这两句语句,大家应该也不会陌生,我们先将Frame设置为200*200大,然后调用show方法将其显示出来。

  自测练习

  1) 当一个部件有一个事件发生,但并没有为这个部件的这个事件指定事件监测器,将会发生什么?________________。

  a.编译时就不会通过 b.引起Java程序发生致命错误

  c.忽略这个事件 d.引发默认的事件处理

  2) 通常我们使用____________方法来为一个部件增加事件监视器。

  a.addXXXListener b.XXXListener

  3) 事件监视器包含在_____________包中。

  a.java.awt.happen b.java.until c.java.awt.event

  4) 按钮按下事件名是__________。

  a.PressedEvent b.ActionEvent

  5) 在Java应用程序(Application)中不能够使用JButton对象?_______。

  a.对 b.错

  6) 仅有GUI部件可以产生事件?___________。

  a.对 b.错

  请说明理由:

  ____________________________________________________________________

  练习答案

  1)c 这个事件将被忽略,因为Java中并不存在默认的事件处理。当然也不会使Java程序异常退出,Java还不至于如此脆弱吧!

  2)a 当你遇到这种形式的语句,就是增加事件监测器。

  3)c 在java.awt.event和javax.swing.event中。

  4)b ActionEven。

  5)b 虽然我们一直都在以Applet为例,但这不证明,Application中不能够使用这些GUI部件。我们完全可以使用这个GUI部件组成一个Application程序。

  6)b 这是一种错觉,最简单的例子就是Frame,它是容器呀,其实还有许多东西可以发生事件。

  12.2错误处理

  传授新知

  "世界上并不存在完全无错的程序",我们不讨论它是不是一条真理。但它的确是一条警语,它告诫我们在编写程序时一定要注意尽可能地避免错误。

  程序运行出错时会超出程序员的控制,使得程序"南辕北辙",不仅无法正常完成功能,而且还会出现一些可怕的事情。

  注意:

  由于程序设计的错误而引起的事故数不胜数,损失最巨大的是美国的一次火箭发射,在那次悲剧中,在程序中由于错把","写成了";",却使得火箭在天上爆炸,所以为防止程序设计错误花再大的人力、物力也是应该的。

  最有效的解决方法是在程序设计是,有意识地加入一些机制,使其能够在运行时检测自己,在错误失控之前,报告出来。

  最常见的一种错误处理是为每一个方法(其它语言,就是每一个函数)返回一个状态值,用来指示该方法是否成功、正确地完成了任务。当调用这个方法的程序收到了一个错误的状态值,就能够得知程序出错了,再采取有效的措施避免这个错误引起的问题(最简单的方法就是退出程序,或给出提示提醒操作者)。

  下面我们来考察一下简单的例子:

public int getIndex(String emailaddr)
{
for(int x=0;x

  这个方法用来在emailaddr字符串中找到"@"符所在的位置,然后返回位置值。但细心的读者应该能够很快地提出一个问题:假如emailaddr中没有"@"符,那么这个程序将返回什么呢?

  对,这就是潜在的错误可能。当emailaddr中没有"@"符时,不管返回什么值,可以确定的一点就是返回的值一定不正确!

  然后,调用这个方法的程序并不知道它得到了一个错误的返回呀!它会当作一个正确的值继续运行下去。糟了,"多米诺骨牌"启动了!一个错误引发了。

  所以,我们应该在这种时候,给调用这个方法的程序一个提示,那就是返回一个明确的错误值,比如在这里我们可以使用-1来表示没找到。使用这种思想,我们将程序改写一下,形成:


public int getIndex(String emailaddr)
{
for(int x=0;x

  我们在原来的程序中加上了一句:return(-1),这时程序的逻辑发生了变化,当找到时"@"符时,将返回它所在的位置。而如果找不到,那么就会执行:return(-1)。

  然后我们在调用这个方法的程序收到的返回值是-1时,就能够意识到错误发生了。

  自测练习

  1) 请创建一个方法,在整数数组intArray查找是否有一个成员为5,有就返回它的位置。并且请注意加上一些错误处理机制。

  在这个程序中,你使用了什么错误处理机制。
  ____________________________________________________________________

  如果整型数组intArray的值是{2,5,6,9,10}那么,返回什么值?
  ____________________________________________________________________

  如果值是{4,6,2,90,8},则返回什么值?
  ____________________________________________________________________

  练习答案

  1) 以下一个实例:

public int searchfive(int intArray[])
{
for(int x=0;x

  在这个程序中,我们采用了通用的错误标识机制,也就是说,找到数字5,返回它的位置,而找不到数字5时,就返回-1。这样可以让调用这个方法的程序知道这个方法的执行效果。

  如果整型数组intArray的值是{2,5,6,9,10}那么将返回1。

  而如果值是{4,6,2,90,8},那么将找不到5,因而返回-1。

  12.3异常处理

  传授新知

  然而在有些情况下,合法的返回值和标识一个错误情形的返回值之间不能明确区分。这种情况下错误出现的地方,称为异常情形。这个异常错误是致命错误,经常使得程序异常退出。

  在Java语言中,提供了一些处理这些异常情况的工具,能够较好的处理这些情况,使得Java程序更加健壮。由于这方面的内容相对比较高级,很难使用较短的篇幅来说明,所以本书(一本入门的书)仅以只言片语,与大家做一个简单的介绍。

  1.异常处理的流程

  在Java中,异常是由Exception类定义的对象,一旦产生异常,方法的正常控制流会立即停止,Java虚拟机(JVM)将试图找出能够捕获的处理程序并处理这个特定的异常。如果找不到处理程序,Exception对象将向上层传递,一层一层地上传,直至程序的main方法。如果还是找不到处理程序,程序将退出运行。

  也就是说,Java已经预先定义了许多异常情况(使用Exception类定义),当程序发生异常时,Java虚拟机就会想办法寻找排除异常的办法(也就是寻找相应的处理程序),如果在当前方法中找不到,就会将这个异常情况报告给调用这个方法的程序段,然后继续寻找相应的程序。如果还找不到就再向上一层传递,直到程序的main方法。如果都找不到,程序就会异常退出。

  2.构建异常处理的程序

  那么如何来构建这个异常处理程序呢?我们可以通过try/catch程序结构来设置:

try
{
……
}
catch(Exception ex)
{
……
}
  当try块内的代码产生了catch块中指定的异常就跳过try块内的后面的代码,而执行catch块内的程序。

  而如果try块内的代码未产生catch块中指定的异常,则跳过catch块内的程序。

感谢各位的阅读,以上就是"Java事件与错误处理方法是什么"的内容了,经过本文的学习后,相信大家对Java事件与错误处理方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

程序 事件 处理 方法 错误 按钮 部件 监测 就是 应用程序 情况 用户 应用 运行 也就是 监测器 学习 位置 内容 对象 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 土地监管 大数据库 视觉软件开发包中文版 上海夺汇网络技术有限公司天眼查 access制作问卷数据库 计算机网络技术与应用的定义 业绩大增的网络安全龙头股 阿里云腾讯云服务器功能对比 网络安全服务的功能有 网络安全框架ipdr 南宁上上软件开发公二 徐州银联网络技术服务怎么样 微信登录无法连接服务器1 投ACS数据库用什么浏览器 数据库监控好牌子推荐 网络安全建议信英语初中 软件开发五行属土 百旺上传参数设置服务器地址 怎样搭建我的世界手机版服务器 重庆天穹网络技术 无线传感器网络技术应用实例 聊天信息用数据库怎么存储 大宗商品交易软件开发租赁 登录系统显示连接服务器失败 第五空间网络安全比赛题目 江苏电脑软件开发机构 it软件开发详细介绍 数据库数据主键扩增问题 农行甘肃分行招软件开发岗 数据库设置主键关键词 服务器安全狗要钱么
0