当前位置:文档之家› 实验四 Java事件处理(汽院含答案)

实验四 Java事件处理(汽院含答案)

实验四  Java事件处理(汽院含答案)
实验四  Java事件处理(汽院含答案)

实验四Java事件处理

实验目的

1.掌握Java语言中的事件处理方法

2.掌握Java语言中事件源、监视器和处理事件的接口的概念

实验导读

1. Java事件处理简介

学习组件除了了解组件的属性和功能外,学习组件除了了解组件的属性和功能外,一个更重要的方面是学习怎样处理组件上发生的界面事件。当用户在文本框中输入文本后按Enter键、单击按钮、在一个下拉列表框中选择一个条目等操作时,都发生界面事件。在学习处理事件时,必须很好地掌握事件源、监视器、处理事件的接口这三个概念。

●事件源:

能够产生事件的对象都可以成为事件源,如文本框、按钮、下拉式列表等。也就是说,事件源必须是一个对象,而且这个对象必须是Java认为能够发生事件的对象。

●监视器:

需要一个对象对事件源进行监视,以便对发生的事件作出处理。事件源通过调用相应的方法将某个对象作为自己的监视器。例如,对于文本框,这个方法是:

addActionListener(监视器);

对于获取了监视器的文本框,当文本框获得输入焦点之后,如果用户按Enter键,Java 运行系统就自动用ActionEvent类创建一个对象,即发生了ActionEvent事件。也就是说,事件源获得监视器后,相应的操作就会导致事件的发生,并通知监视器,监视器就会做出相应的处理。

●处理事件的接口:

监视器负责处理事件源发生的事件。监视器是一个对象,为了让监视器这个对象能对事件源发生的事件进行处理,创建该监视器对象的类必须声明实现相应的接口,即必须在类体中给出该接口中所有方法的方法体,那么当事件源发生事件时,监视器就自动调用类实现的某个接口中的方法。

2.文本框上的ActionEvent事件

java.awt.event包中提供了许多事件类和处理各种事件的接口。对于文本框,这个接口的名字是ActionListener,这个接口中只有一个方法:

public void actionPerformed(ActionEvent e)

当在文本框中输入字符并按Enter键时,java.awt.event包中的ActionEvent类自动创建一个事件对象,并将它传递给actionPerformed(ActionEvent e)方法中的参数e,监视器自动调用这个方法对发生的事件做出处理。

所以,称文本框这个事件源可以发生ActionEvent类型事件。为了能监视到这种类型的事件,事件源必须使用addActionListener方法获得监视器;创建监视器的类必须实现接口ActionListener。只要学会了处理文本框这个组件上的事件,其他事件源上的事件的处理也就很容易学会,所不同的是事件源能发生的事件类型不同,所使用的接口不同而已。

ActionEvent类有如下常用的方法:

?public Object getSource() ActionEvent对象调用该方法可以获取发生ActionEvent事

件的事件源对象的引用,即getSource()方法将事件源上转型为Object对象,并返

回这个上转型对象的引用。

?public String getActionCommand() ActionEvent对象调用该方法可以获取发生

ActionEvent事件时,和该事件相关的一个命令字符串,对于文本框,当发生

ActionEvent事件时,文本框中的文本字符串就是和该事件相关的一个命令字符串。

3.选择框和下拉列表上的ItemEvent事件

选择框从未选中状态变成选中状态或从选中状态变成未选中状态时、下拉列表选项列表中选中某个选项时就发生ItemEvent事件,即ItemEvent类自动创建一个事件对象。

发生ItemEvent事件的事件源获得监视器的方法是addItemListener(监视器)。处理ItemEvent事件的接口是ItemListener,创建监视器的类必须实现ItemListener接口,该接口中只有一个方法。当选择框发生ItemEvent事件时,监视器将自动调用接口方法:itemStateChanged(ItemEvent e)

对发生的事件进行处理。

4.鼠标事件

任何组件上都可以发生鼠标事件,如:鼠标进入组件、退出组件、在组件上方单击鼠标、拖动鼠标等都触发组件发生鼠标事件,也就是说,组件可以成为发生鼠标事件的事件源。

使用MouseListener接口可以处理5种操作触发的鼠标事件:

(1)在事件源上按下鼠标键。

(2)在事件源上释放鼠标键。

(3)在事件源上击鼠标键。

(4)鼠标进入事件源。

(5)鼠标退出事件源。

鼠标事件的类型是MouseEvent,即当发生鼠标事件时,MouseEvent类自动创建一个事件对象。

MouseListener接口中的方法:

(1)mousePressed(MouseEvent) 负责处理在组件上按下鼠标触发的鼠标事件,当在组件上按下鼠标时,监视器将自动调用接口中的这个方法对事件作出处理。

(2)mouseReleased(MouseEvent) 负责处理在组件上释放鼠标触发的鼠标事件,当在

组件上释放鼠标时,监视器将自动调用接口中的这个方法对事件作出处理。

(3)mouseEntered(MouseEvent) 负责处理鼠进入组件触发的鼠标事件,当鼠标进入组件上方时,监视器将自动调用接口中的这个方法对事件作出处理。

(4)mouseExited(MouseEvent) 负责处理鼠标离开组件触发的鼠标事件,当鼠标离开组件时,监视器自动调用接口中的这个方法对事件作出处理。

(5)mouseClicked(MouseEvent) 负责处理在组件上单击或连击鼠标触发的鼠标事件,当单击或连击鼠标时,监视器自动调用接口中的这个方法对事件作出处理。

MouseMotionListener接口:

使用MouseMotionListener接口可以处理以下两种操作触发的鼠标事件:

(1)在事件源上拖动鼠标。

(2)在事件源上移动鼠标。

MouseMotionListener接口中有如下方法:

(1)mouseDragged(MouseEvent) 负责处理在组件上拖动鼠标触发的鼠标事件,当在组件上拖动鼠标时,监视器调用接口中的这个方法对事件作出处理。

(2)mouseMoved(MouseEvent) 负责处理在组件上运动鼠标触发的鼠标事件,当在组件上运动鼠标时,监视器调用接口中的这个方法对事件作出处理

5.焦点事件

组件可以触发焦点事件。组件可以使用

public void addFocusListener(FocusListener listener)

增加焦点事件监视器。

当组件获得焦点监视器后,如果组件从无输入焦点变成有输入焦点或从有输入焦点变成无输入焦点都会触发FocusEvent事件。创建监视器的类必须要实现FocusListener 接口,该接口有两个方法:

public void focusGained(FocusEvent e)

public void focusLost(FocusEvent e)

当组件从无输入焦点变成有输入焦点触发FocusEvent事件时,监视器调用类实现的接口方法:focusGained(FocusEvent e);当组件从有输入焦点变成无输入焦点触发FocusEvent 事件时,监视器调用类实现的接口方法:focusLost(FocusEvent e)。

用户通过单击组件可以使得该组件有输入焦点,同时也使得其他组件变成无输入焦点。一个组件也可以调用

public boolean requestFocusInWindow()

方法获得输入焦点。

6.键盘事件

当按下、释放或敲击键盘上一个键时就发生了键盘事件,在Java1.2事件模式中,必须

要有发生事件的事件源。当一个组件处于激活状态时,敲击键盘上一个键就导致这个组件上发生了键盘事件。

事件源使用addKeyListener方法获得监视器。

使用KeyListener接口处理键盘事件.接口KeyListener中有3个方法:

public void keyPressed(KeyEvent e),

public void keyTyped(KeyEvent e),

public void KeyReleased(KeyEvent e)。

当按下键盘上某个键时,监视器就会发现,然后keyPressed方法会自动执行,并且KeyEvent类自动创建一个对象传递给keyPressed方法中的参数e。keyTyped方法是keyPressed 和KeyReleased方法的组合,当键被按下又释放时,keyTyped方法被调用。

用KeyEvent类的public int getKeyCode()方法,可以判断哪个键被按下、敲击或释放,getKeyCode方法返回一个键码值。也可以用KeyEvent类的public char getKeyChar()判断哪个键被按下、敲击或释放,getKeyChar方法返回键上的字符。

键盘事件KeyEvent对象调用getModifiers()方法,可以返回整数值ALT_MASK、CTRL_MASK、SHIFT_MASK,它们分别是InputEvent类的类常量。

程序可以通过getModifiers()方法返回的值处理组合键事件。例如,对于KeyEvent对象e,当按下CTRL+X组合键时,下面的逻辑表达式为true:

e. getModifiers() == InputEvent.CTRL_MASK&&e.getKeyCode() == keyEvent.VK_X

Java事件处理就是基于这种授权模式,即发生相应事件的事件源对象,比如sourceObject,通过调用相应的方法:

sourceObject. addXXXListener(监视器);

将某个对象作为自己的监视器。

创建监视器对象的类必须声明实现相应的事件接口:

class A implements XXXListener

当事件源发生事件时,监视器将调用接口中相应的方法做出处理。Java使用了接口回调技术设计了它的处理事件模式,注意到

addXXXListener(XXXListener listener)

方法中的参数是一个接口类型,listener可以引用任何实现了XXXListener接口的类所创建的对象,当事件源发生事件时,接口listener立刻回调类实现的接口中的某个方法。

事件的处理过程如下图所示:

图 事件处理示意图

内部类实例做监视器:

Java 支持在一个类中声明另一个类,这样的类成为内部类,而包含内部类的类成为内部类的外嵌类,外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。匿名类是内部类的特殊情形,即省略类声明,可以直接用类体创建对象,因此,可以使用匿名内部类的对象做监视器。例如:

xxx .addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

}

}); 实验内容

1. 图形用户界面设计程序(ArtFont.java)

在实验三第1题的基础上,添加事件处理机制,并逐步完善程序功能。分别用ArtFont 类的对象做监视器和匿名内部类的对象做监视器实现。

要求实现如下功能:

事件源.addXXXListener(

监视器回调接口方法

●当在文本框中输入文字后回车,在文本域中显示输入的文字。

●当分别选择粗体和斜体复选框时,文本域中的文字分别显示粗体和斜体样式。

●当点击颜色按钮时,出现颜色选择对话框,选择需要的颜色,按确定按钮后,

按钮的前景色和文本域的前景色设置为选定的颜色。

●当选择字体样式下拉框中的某一字体样式时,文本域中的文字设置为指定的字

体样式。

●当选择字体大小下拉框中的某一字体大小时,文本域中的文字设置为指定的字

体大小。

●当选择窗体样式下拉框中的某一窗体效果时,窗体外观改变为指定的窗体外

观。

代码提示:

1)用ArtFont类的对象做监视器

public class CopyOfArtFont extends JFrame implements ActionListener, ItemListener {

JComboBox windowStyle;// 窗体样式下拉框

JCheckBox boldBx;// 粗体按钮

JButton colorBtn;// 颜色按钮

JTextField inputText;// 文字输入框

private JPanel getNorthPanel() {

JPanel panel = new JPanel();

inputText.addActionListener(this);

colorBtn.addActionListener(this);

return panel;

}

private JPanel getCenterPanel() {

JPanel panel = new JPanel();

boldBx.addItemListener(this);

return panel;

}

private JPanel getSouthPanel() {

JPanel panel = new JPanel();

windowStyle.addItemListener(this);

return panel;

}

@Override

public void itemStateChanged(ItemEvent e) {

if(e.getSource() == windowStyle){

String s = (String) e.getItem();

String className = "";

if (s.equals("Windows显示效果"))

className =

"com.sun.java.swing.plaf.windows.WindowsLookAndFeel";

else if (s.equals("Unix显示效果"))

className =

"com.sun.java.swing.plaf.motif.MotifLookAndFeel";

else if (s.equals("默认显示效果"))

className =

UIManager.getCrossPlatformLookAndFeelClassName();

try {

UIManager.setLookAndFeel(className);

SwingUtilities.updateComponentTreeUI(this);

} catch (Exception de) {

System.out.println("Exception happened!");

}

}

}

@Override

public void actionPerformed(ActionEvent e) {

}

}

2)用匿名内部类的对象做监视器

public class CopyOfArtFont extends JFrame {

JComboBox fontType;// 字体样式下拉框,

JCheckBox boldBx;// 粗体按钮

JButton colorBtn;// 颜色按钮;

JTextField inputText;// 文字输入框;

private JPanel getNorthPanel() {

JPanel panel = new JPanel();

inputText.addActionListener(new ActionListener() { @Override

public void actionPerformed(ActionEvent e) {

}

});

return panel;

}

private JPanel getCenterPanel() {

JPanel panel = new JPanel();

boldBx.addItemListener(new ItemListener() {

@Override

public void itemStateChanged(ItemEvent e) {

}

});

return panel;

}

private JPanel getSouthPanel() {

JPanel panel = new JPanel();

fontType.addItemListener(new ItemListener() { @Override

public void itemStateChanged(ItemEvent e) {

}

});

return panel;

}

}

2.日历应用程序设计

在实验三第2题的基础上,添加事件处理机制,并逐步完善程序功能。分别用CalendarFrame类的对象做监视器和匿名内部类的对象做监视器实现。

要求实现如下功能:

●在文本框inputYear中输入年份,验证年份的有效性;按回车键后,显示输入

年份的正确日历

●单击previousMonth按钮可以显示当前月的上一月的日历;如果月份小于1,

则显示上一年的12月

●单击nextMonth按钮,可以显示当前月的下一月的日历;如果月份大于1,则

显示下一年的1月

3.英语单词拼写训练程序设计

编写一个应用程序,要求如下:

窗口中有一个TextField对象和一个按钮对象,将这两个对象添加到一个面板,然后将该面板添加到窗口的北面。

用户在TextField对象中输入一个英文单词,然后回车或单击按钮,程序将创建若干个标签,其个数刚好等于英文单词所包含的字母的标签,而且每个标签上的名字刚好是英文单词中的一个字母。要求将这些标签按一行添加到一个面板中,然后将该面板添加到窗口的中心。

用户用鼠标单击一个标签后,然后按下键盘上的“→”、“←”键交换相邻标签上的字母,使得这些标签上字母的排列顺序和英文单词中字母的顺序相同。

请按模板要求,将代码补充完整。程序运行效果如下:

1)RandomString.java

public class RandomString {

String str = "";

public String getRandomString(String s) {

StringBuffer strBuffer = new StringBuffer(s);

int m = strBuffer.length();

for (int k = 0; k < m; k++) {

int index = (int) (Math.random() *

strBuffer.length());

char c = strBuffer.charAt(index);

str = str + c;

strBuffer = strBuffer.deleteCharAt(index);

}

return str;

}

}

2)LetterLabel.java

import java.awt.*;

import java.awt.event.*;

public class LetterLabel extends Button implements FocusListener, MouseListener {

LetterLabel() {

【补充代码】// 将当前对象注册为自身的焦点视器

【补充代码】// 将当前对象注册为自身的标监视器

setBackground(Color.cyan);

setFont(new Font("", Font.BOLD, 30));

}

public static LetterLabel[] getLetterLabel(int n) { LetterLabel a[] = new LetterLabel[n];

for (int k = 0; k < a.length; k++) {

a[k] = new LetterLabel();

}

return a;

}

public void focusGained(FocusEvent e) {

setBackground(Color.red);

}

public void focusLost(FocusEvent e) {

setBackground(Color.cyan);

}

public void mousePressed(MouseEvent e) {

requestFocus();

}

public void setText(String string) {

setLabel(string);

}

public String getText() {

return getLabel();

}

public void mouseReleased(MouseEvent e) {

}

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

public void mouseClicked(MouseEvent e) {

}

}

3)SpellingWordFrame.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.Box;

public class SpellingWordFrame extends Frame implements KeyListener,

ActionListener {

TextField inputWord;

Button button;

LetterLabel label[];

Panel northP, centerP;

Box wordBox;

String hintMessage = "用鼠标单击字母,按左右箭头交换字母,将其排列成所输入的单词";

Label messaageLabel = new Label(hintMessage);

String word = "";

SpellingWordFrame() {

setTitle("英语单词拼写训练");

inputWord = new TextField(12);

button = new Button("确定");

button.addActionListener(this);

inputWord.addActionListener(this);

northP = new Panel();

northP.add(new Label("输入一个英文单词:"));

northP.add(inputWord);

northP.add(button);

centerP = new Panel();

wordBox = Box.createHorizontalBox();

centerP.add(wordBox);

add(northP, BorderLayout.NORTH);

add(centerP, BorderLayout.CENTER);

add(messaageLabel, BorderLayout.SOUTH);

setBounds(100, 100, 350, 180);

setVisible(true);

validate();

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

}

public void actionPerformed(ActionEvent e) {

word = inputWord.getText();

int n = word.length();

RandomString rondom = new RandomString();

String randomWord = rondom.getRandomString(word);

wordBox.removeAll();

messaageLabel.setText(hintMessage);

if (n > 0) {

label = LetterLabel.getLetterLabel(n);

for (int k = 0; k < label.length; k++) {

【补充代码】// 将当前窗口注册为label[k]的键盘监视器

label[k].setLabel("" + randomWord.charAt(k));

wordBox.add(label[k]);

JAVA实验3-异常处理和常用实用类-报告

信息工程学院1 《Java语言程序设计》实验报告 学院: 班级: 姓名: 学号: 成绩: 一、实习目标 (1)掌握Java的异常处理机制及相关实现方法; (2)掌握常用实用类的使用,熟悉使用JDK_API进行软件开发; (3)掌握Java中正则表达式的基本用法。 二、实验过程 实验题1 try-catch练习: JAVA_API: getMassage():返回此throwable或exception的详细消息字符串,正数除0 返回Infinity,负数除0返回-Infinity。 toString():对象利于null的详细消息字符串创建,则返回此对象的实际类的 名称,返回此throwable的简短描述。 printStackTrace():将错误的详细信息追踪到代码中具体某一行,将throwable 及其追踪输出至标准错误流。 代码截图: CatchError类: 实验报告的内容与格式按任课教师的要求书写。

MainTest类:

运行结果: 实验题2 用户自定义异常: 在ExceptionTest类中进行成绩录入和平均成绩的计算。 StasticScore类为成绩录入的具体方法,并进行异常检测。 ScoreException类继承StasticScore,输出错误提示。 代码截图: ExceptionTest类: ScoreException类:

StasticScore类:

运行结果:

实验题3 String & StringBuffer的使用: JAVA_API: Int indexOf(String str, int fromIndex)函数:返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。如果不存在,返回-1。 Static String valueOf(int i)函数:返回int参数的字符串表示形式。该表示形式正是单参数的interger.toString方法返回的结果。 Int indexOf(String str, int fromIndex)函数:返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。如果不存在,则返回-1。 Public StringBuffer append(String str)函数:将指定的字符串追加到此字符序列。按顺序追加String变量中的字符,使此序列增加到该变量的长度。 代码截图: TestOfKeyword类:

JAVA异常实验报告

一. 实验目的及实验环境 实验目的:1.理解JA V A对异常的处理 2.掌握自定义异常的定义方式 实验环境:eclipse 4.4 二. 实验内容 1.假设Sum类中有一个addContinue(int n)方法,当n>0时,方法翻译1+2+…+n 的和;当n<0时,方法抛出一个受检查的ArgumentException异常。ArgumentException类应该提供一个能够接受并保存n值得构造方法,以及一个能返回n值得实例方法,现定义Sum类以及ArgumentException类,并编程测试它们。 三.方案设计 1.定义三个类Sum,ArgumentException,Test类 2.分别在类中实现加法,异常抛出和测试 四.测试数据及运行结果 1.正常测试数据(3组)及运行结果;

2.非正常测试数据(2组)及运行结果。 五.总结 1.实验过程中遇到的问题及解决办法; ①中没有明确表示需要进行异常抛出很有可能就会忘记这个题目存在的问题。所以平常程序设计时,应该多考虑不同的情况,防止程序出现不可逆的漏洞。 ②如果发生可识别的运行错误,系统应产生一个相应的异常类对象,并进一步寻找异常处理代码来处理它,确保程序能从故障中恢复,之程序能够运行下去,直

到结束。 2.对设计及调试过程的心得体会。 中断,影响程序正常运行的事件称为异常。异常处理是使程序从故障中恢复,他包括提示异常信息、不产生无效结果和释放资源三方面内容。其中,显示异常信息和不产生无效结果可通过try和catch块来实现,释放资源可通过finally块实现。 附代码 public class Add { public int addContinue(int i) throws ArgumentException{ int sum=0; if( i<0){ throw new ArgumentException(i); } for(int n=0;n<=i;n++){ sum=sum+n; } return sum; } } public class ArgumentException extends Exception { private int n; public ArgumentException(int n) { this.n = n; } public int getN(){ return n; } } public class test { public static void main(String[] args){ Add s = new Add(); try { System.out.println(s.addContinue(-1)); } catch (ArgumentException e) { System.out.println(e.getN()); } } }

java 异常处理

实验五异常处理 【实验目的】 1.了解Java 中异常处理(exception)的作用。 2.掌握异常处理的设计方法。 【实验内容】 一.Java的异常处理。源文件是Ex4_1.java。要捕捉的异常是除数为零和数组下标越界。 通过修改a和c[]下标值体验程序。 public class Ex4_1 { public static void main (String[] args) {int a, b; int c[]={1,2,3}; try{ a=10; b=100/a; System.out.println ("当前a值:"+a); c[2]=200; System.out.println ("当前数组长:"+c.length); }catch(ArithmeticException e) { System.out.println ("除零错误:"+e); } catch(ArrayIndexOutOfBoundsException e) { System.out.println ("数组下标越界:"+e); } finally { System.out.println ("我是finally");} System.out.println ("我能被正常执行到"); } } 【思考问题】 ①先运行上面没有错误程序,观察运行结果。 ②按下条件分别修改数据,编译后运行,观察输出结果,分析在try…catch块里那 些语句没有被执行,为什么? 块外那些语句可被执行到,为什么? ◆修改a=0,保持c[2]=200; ◆保持a=10,修改c[3]=200, ◆修改a=0,修改c[2]=200; ③再添加一个catch{Exception e}{ },位置在最前面,观察编译信息,说明什么?2.自定义异常类。注意throw、throws的使用。源文件是Ex4_2.java。 class MyException extends Exception //自定义异常类 {public String toString() { return "除数等于零"; } }

java异常处理例题代码教学文稿

j a v a异常处理例题代 码

App9_1.java:输出一个数组的所有元素,捕获数组下标越界异常和除娄为0异常。public class App9_1{ public static void main(String args[]){ int i; int[] a={1,2,3,4}; for(i=0;i<5;i++) System.out.println(" a["+i+"]="+a[i]); System.out.println("5/0"+(5/0)); } } App9_2.java:使用try-catch-finall语句对程序中的异常进行捕获与处理。 public class App9_2{ public static void main(String args[]){ int i; int a[]={1,2,3,4}; for (i=0;i<5;i++){ try{ System.out.print("a["+i+"]/"+i+"="+(a[i]/i)); } catch(ArrayIndexOutOfBoundsException e){ System.out.print("捕获到了数组下标越界异常"); } catch(ArithmeticException e){ System.out.print("异常类名称是:"+e); //显示异常信息 } catch(Exception e){ System.out.println("捕获"+e.getMessage()+"异常!"); //显示异常信息 } finally{ System.out.println(" finally i="+i); } } System.out.println("继续!!"); } } App9_3.java:使用throw语句在方法中抛出异常。 public class App9_3{ public static void main(String args[]){ int a=5,b=0; try{ if (b==0) throw new ArithmeticException(); //抛出异常,不是必须的 else System.out.println(a+"/"+b+"="+a/b); //若不抛出异常,则运行此行

第五章Java语言异常处理-实验题目

第五章Java语言异常处理--实验题目 一、实验目的 1. 掌握Java的异常处理机制。 2. 掌握try、catch、throws和finally这5个关键字的用法。 3. 掌握成员的几个异常类。 4. 掌握自定义异常的使用。 二、实验内容 1.编写程序,从键盘上输入两个数。将第一个数除以第二个数并显示结果;处理所有可能的异常。 2.写出下面程序运行的结果: 3.写出下列程序的输出结果。

4.有下列程序: 若用下面方式执行该程序,则baz的值为( )。 java Test Red Green Blue (A)“”(B)null (C)"Red”(D)”BIue”(E)”Green”(F)代码不能编译(G)程序抛出异常5.有下列程序: 该程序的输出结果为( )。 (A)没有任何输出(B)输出“Finally”(C)编译错误(D)抛出异常 6.有下列程序:

该程序的输出结果为( )。 (A)没有任何输出(B)输出“Finally”(C)编译错误(D)抛出异常7.修改下列程序的错误之处。 8.写出下列程序的运行结果。

9.编写一个程序,要求从键盘输入一个double型的圆的半径,计算并精出其面积。 测试当输入的数据不是double型数据(如字符串“abc”)会产生什么结果,怎样处理。10.编写一个应用程序,在main()方法中使用try块抛出一个Exception类的对象,为Exception的构造方法提供一个字符串参数,在catch块内捕获该异常并打印出字符串参数。添加一个finally块并打印一条消息。 11.创建一个自定义的异常类,该类继承Exception类,为该类写一个构造方法,该构造方法带一个String类型的参数。写一个方法.令其打印出保存下来的String对泉。再编写一个类,在main()方法中使用try--catch结构创建一个MyException类的对象并抛出,在catch块中捕获该异常井打印出传递的String消息。

Java实验报告 继承、多态、接口和异常处理

实验5 继承、多态、接口和异常处理 一、实验目的 1、掌握Java的类和对象的声明和使用方法; 2、掌握Java的类的继承和实现方法; 3、掌握多态性在类的继承中的运用; 4、掌握接口的定义与使用; 5、掌握基本异常的处理机制; 6、熟悉try语句与catch语句的搭配使用; 7、了解有异常处理与没有异常处理的差别; 8、多重catch语句的使用; 9、使用Throws声明异常和Throw抛出异常。 二、实验环境 1、PC微机; 2、DOS操作系统或 Windows 操作系统; 3、Java sdk程序开发环境、eclipse集成环境。 三、实验内容 1. 设计三个类,分别是学生类Student,本科生类UnderGraduate,研究生类 Postjgraduate,其中Student类是一个抽象类,它包含学生的基本信息如姓名、所学课程、课程成绩等,而Undergraduate类和Postgraduate类都是Student类的子类,这两个类计算课程成绩等级的方法有所不同,如下表所示。假设某班级里既有研究生又有本科生,编写程序统计出全班学生 2. 和 Mobilephone具体实现,并设计一个应用程序类来使用这些类。 3.要求设计一个GUI图形窗口程序,该程序让用户输入一个星期中的任意一天的数字1-7,然后输出该数字所对应的是星期几。 四、实验步骤 实验内容一

1.建立package experiment5_1,其最终目录结构如下: 2.建立Student类: package experiment5_1; public abstract class Student { final static int CourseNo = 3; String name; String type; int[] courses; String courseGrade; public Student(String name) { https://www.doczj.com/doc/be14025119.html, = name; courses = new int[CourseNo]; courseGrade = "" ; } public abstract void calculateGrade(); public String getName( ) { return name; } public String getType( ) { return type ; } public String getCourseGrade( ) { return courseGrade; } public int getCourseScore(int courseNumber) { return courses[courseNumber]; } public void setName(String name) { https://www.doczj.com/doc/be14025119.html, = name; } public void setType(String type) { this.type = type; } public void setCourseScore(int courseNumber, int courseScore) { //按课程索引号设置课程成绩 this.courses[courseNumber] = courseScore ; } }

JAVA 异常处理实验报告

实验三异常处理 [实验目的] 1.掌握异常处理方法及熟悉常见异常的捕获方法。 [实验内容] 1.练习捕获异常、声明异常、抛出异常的方法、熟悉try和catch 子句的使用。 [实验步骤与要求] 第1题异常处理 要求声明定义两个Exception的异常子类:NoLowerLetter类和NoDigit类。再声明一个People类,该类中的void printLetter(char c)方法抛出NoLowerLetter异常类对象,void PrintDigit(char c)方法抛出NoDigit异常类对象。 [作业提交] 将代码贴在下面: class NoLowerLetter extends Exception{ String message; NoLowerLetter(char c){ message=c+"不是正数"; } public String getMessage(){ return message; } } class NoDigit extends Exception{ String message; NoDigit(char c){ message=c+"不是偶数"; }

public String getMessage(){ return message; } } class People{ public void printLetter(char c) throws NoLowerLetter{ if(c<0){ NoLowerLetter ex=new NoLowerLetter(c); throw(ex); } double number=Math.sqrt(c); System.out.println(c+"的平方根:"+number); } public void PrintDigit(char c) throws NoDigit{ if(c%2!=0){ NoDigit ex=new NoDigit(c); throw(ex); } double number=Math.sqrt(c); System.out.println(c+"的平方根:"+number); } } public class bianma{ public static void main(String args[]){ People p=new People(); try{ p.printLetter('Q'); p.printLetter(' '); } catch( NoLowerLetter e){ System.out.println(e.getMessage()); } try{ p.PrintDigit('d'); p.PrintDigit('a'); } catch( NoDigit e){ System.out.println(e.getMessage()); } } } 将结果运行截屏贴在下面:

实验三 Java异常处理

实验三Java异常处理 一、实验目的 1)掌握Java异常的概念及工作机制 2)掌握异常的分类 3)掌握抛出异常语句的使用(throw) 4)掌握抛出捕获处理异常语句的使用(try…catch…finally) 5)掌握上抛异常语句的使用(throws) 6)掌握创建自定义异常 二、实验内容 自定义一个异常类,求两个数的最大公约数。 三、实验步骤 1)声明一个类,继承与Exception,用来处理求公约数时被除数小于除数抛出异常。 2)声明一个方法来求公约数。 3)在主方法里通过控制台输入二个人数并把求公约数的方法写在try{}中,catch{}填写出现的自定义的异常及ArithmeticException 异常。 四、实现代码 import java.util.Scanner; class MyException extends Exception { int m,n;

public MyException(int m,int n) { this.m=m; this.n=n; } public void process() { System.out.println("被除数小于除数!"); } } public class divisor{ int m,n; public divisor(int m,int n) { this.m=m; this.n=n; } public int div() throws MyException { int tmp;

if(m

JAVA异常处理实验报告

实验报告 实验名称:异常处理 学院:电子信息工程学院 班级:电信01班 姓名:鲁川 学号: 121040110113 日期: 2014.11.3 成绩:

一、实验名称:异常处理 二、实验目的: 1.掌握异常处理机制的运作 2.掌握处理异常的几个子句:try…catch..finally、thorws和throw 3.掌握字符串类的相关操作 三、实验内容: 1. 编写一个类,在其main()方法中创建一个一维数组,在try字句中访问数 组元素,使其产生ArrayIndexOutOfBoundsException异常。在catch子句里捕获此异常对象,并且打印“数组越界”信息,加一个finally子句,打印一条信息以证明这里确实得到了执行。 2. 给定一个字符串,将字符串中的所有大写字母变成小写字母,数字用0来代替,其他符号用#代替。 四、实验代码 1.ExceptionDemo.java class ExceptionDemo { public static void main(String[] args) { int [] arr = new int[]{13,24,1,53,24}; try { int num = arr[5]; } catch (ArrayIndexOutOfBoundsException e) { System.out.println("数组越界啦!!!"); } finally { System.out.println("此处代码一定会执行的--finally"); } } } 运行结果:

2.StringTest.java class StringTest { public static void main(String[] args) { String str = "DfS分手dsA吧25J奋45斗"; System.out.println("原字符串=="+str); StringBuffer sb = new StringBuffer(); for(int i = 0;i='A' && ch<='Z') { sb.append(Character.toLowerCase(ch)); } else if(ch>='a' && ch<='z') { sb.append(ch); }else if(ch>=49 && ch<=58) { sb.append(0); }else { sb.append("#"); }

java异常处理试题及答案

异常处理练习题 一、选择题 1.java中用来抛出异常的关键字是 (C) A、try B、catch C、throw D、finally 2.关于异常,下列说法正确的是(A) A、异常是一种对象 B、一旦程序运行,异常将被创建 C、为了保证程序运行速度,要尽量避免异常控制 D、以上说法都丌对 3.(A)类是所有异常类的父类。 A、Throwable B、Error C、Exception D、AWTError 4.java语言中,下列哪一子句是异常处理的出口(C) A、try{…}子句 B、catch{…}子句 C、finally{…}子句 D、以上说法都丌对 5.下列程序的执行,说法错误的是 (C) public class MultiCatch { public static void main(String args[]) { try { int a=args.length; int b=42/a; int c[]={1}; c[42]=99; System.out.println(“b=”+b); } catch(ArithmeticException e) { System.out.println(“除0异常:”+e); } catch(ArrayIndexOutOfBoundsException e) { System.out.println(“数组超越边界异常:”+e); } } } A、程序将输出第15行的异常信息 B、程序第10行出错 C、程序将输出“b=42”

D、程序将输出第15和19行的异常信息 6.下列程序的执行,说法正确的是(D) class ExMulti { static void procedure() { try { int c[]={1}; c[42]=99; } catch(ArrayIndexOutOfBoundsException e) { System.out.println(“数组超越界限异常:”+e); } } public static void main(String args[]) { try { procedure(); int a=args.length; int b=42/a; System.out.println(“b=”+b); } catch(ArithmeticException e) { System.out.println(“除0异常:”+e); } } } A、程序只输出第12行的异常信息 B、程序只输出第26行的异常信息 C、程序将不输出异常信息 D、程序将输出第12行和第26行的异常信息 7.下面程序抛出了一个“异常”并捕捉它。请在横线处填入适当内容完成程序。class TrowsDemo { static void procedure() throws IllegalAccessExcepton { System.out.println(“inside procedure”); throw__new_____IllegalAccessException(“demo”);

JAVA实验四异常处理

实验四异常处理 实验目的 1、掌握异常的概念和Java 异常处理机制。 2、掌握异常的定义、抛出和捕捉处理。 实验内容与要求 1、仔细读下面的JAVA语言源程序,自己给出程序的运行结果 import java.io.*; public class Ch31 { public static void main(String args[])throws IOException { int[] ko=new int[15]; int n,a; String x; BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in)); System.out.print("Enter an integer:"); x=keyin.readLine(); n=Integer.parseInt(x); try { a=110/n; ko[15]=100; System.out.println("此描述无法执行!"); } catch(ArithmeticException e){ System.out.println("除数为0的错误"); } catch(ArrayIndexOutOfBoundsException f) { System.out.println("数组索引值大于数组长度的错误!"); } System.out.println("执行完catch的描述!!!"); } } 2.运行下面的程序,自己给出程序的运行结果。 import java.io.*; public class Ch32{ public Ch32(){ try{ int a[] = new int[2]; a[4] = 3; System.out.println("After handling exception return here?"); }catch(IndexOutOfBoundsException e){ System.err.println("exception msg:" + e.getMessage()); System.err.println("exception string:" + e.toString()); e.printStackTrace(); }finally{

JAVA实验异常处理

成都大学实验报告 实验项目名称异常处理的编程练习 一、实验目的: 1、了解异常类的作用 2、掌握对异常的捕获和处理方式 二、实验内容(包括源程序及相关说明): 1、使用try….catch语句处理异常。在程序中主动产生一个ArithmeticException 类型被0 除的异常,并用catch 语句捕获这个异常。最后通过ArithmeticException 类的对象e 的方法getMessage 给出异常的具体类型并显示出来。源代码如下: public class EXP5_1 { public static void main(String[] args){ System.out.println("这是一个处理异常的例子"); try{ int i=10; i/=0; } catch(ArithmeticException e){ System.out.println("异常是:"+e.getMessage()); } finally { System.out.println("finally语句被执行"); } } } 2、异常类型不匹配的处理方式。源代码如下: public class EXP5_1 { public static void main(String[] args){

System.out.println("这是一个处理异常的例子"); try{ int i=10; i/=0; } catch(IndexOutOfBoundsException e){ System.out.println("异常是:"+e.getMessage()); } finally { System.out.println("finally语句被执行"); } } } 3、包含多个catch子句的异常处理方式.在try 子句中设计两个可能出现的异常,当 a 为0 时会发生异常。另外一个是肯定的异常,因为数组c 的长度为1,定义c[42] 是非法的。通过两个catch 子句分别来捕获异常。 public class EXP5_1 { public static void main(String[] args) { try { int a=args.length; System.out.println("\na = "+a); int b=42/a; int c[]={1}; c[42]=99; } catch (ArithmeticException e) { System.out.println("发生了被 0 除:"+e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("数组下标越界:"+e); } } } 4、使用throw语句抛出异常. 在上面的实验中,可以发现,异常对象是Java 运行时由 系统抛出的。抛出异常也可以通过使用throw 语句实现。throw 是Java 语言的关 键字,用来告知编译器此处要发生一个异常。throw 后面要跟一个新创建的异常类对象,用于指出异常的名称和类型。 public class EXP5_1{ static void throwProcess(){ try {

JAVA实验7-9+答案

实验7 1. 编一个程序,包含以下文件。 (1)Shape.java文件,在该文件中定义接口Shape,该接口在shape包中。 属性:PI。 方法:求面积的方法area()。 (2)Circle.java文件,在该文件中定义圆类Circle,该类在circle包中,实现Shape接口。 属性:圆半径radius。 方法:构造方法;实现接口中求面积方法area();求周长方法perimeter()。 (3)“Cylinder.java”文件,在该文件中定义圆柱体类Cylinder,该类口在cylinder包中,继承圆类。 属性:圆柱体高度height。 方法:构造方法;求表面积方法area();求体积方法volume()。 (4)X5_3_6.java文件,在该文件中定义主类X5_3_6,该类在默认包中,其中包含主方法main(),在主方法中创建两个圆类对象cir1和cir2,具体尺寸自己确定,并显示圆的面积和周长;再创建两个圆柱体类的对象cy1和cy2,具体尺寸自己确定,然后分别显示圆柱体cy1和cy2的底圆的面积和周长以及它们各自的体积和表面积。 【编程分析】本题主要考察接口、包、继承、封装等问题。编程步骤如下:第一步:首先创建p1包,在其中创建Shape接口 // Shape.java文件 package p1; // 创建p1包 public interface Shape{ // 定义Shape接口 … } 第二步:创建Circle类和Cylinder类,它们都定义在p2包中。 // Circle.java文件 package p2; // 创建p2包 import p1.*; public class Circle implements Shape{ // 定义实现Shape接口的Circle类 … } // Cylinder.java文件 package p2; public class Cylinder extends Circle{ // 创建继承Circle类的Cylinder类 … } 第三步:创建主类,在其中的main()方法中创建对象,实现相应的功能。 // X5_3_6.java文件 package p3; import p2.*; public class X5_3_6 { // 定义主类 public static void main(String[] args) { … } }

Java作业实验六---异常处理

提交方式: 把文件名改为学号姓名,提交文档和源码(只需提交最顶层包文件夹) 实验六异常处理 一、实验目的 1.学会利用Try-catch-finally语句来捕获和处理异常; 2.掌握自定义异常类的方法。 二、实验要求 1.通过编程理解系统异常处理的机制和创建自定义异常的方法。 2.掌握基础类。 三、实验内容 (一)异常处理机制 1. 编写使用try…catch 语句处理异常的程序文件Demo4_1.java,

编译并运行程序,并把运行结果复制在下面 。 注意:如果在catch 语句中声明的异常类是Exception,catch 语句也能正确地捕获,这是因为Exception是ArithmeticException的父类。如果不能确定会发生哪种情况的异常,那么最好指定catch的参数为Exception,即说明异常的类型为Exception。 2、源文件是Demo3_2.java。要捕捉的异常是除数为零和数组下标越界。通过修改a和c[]下标值体验程序。 【思考】 ①先运行上面程序,观察运行结果。 ②按下条件分别修改数据,编译后运行,观察输出结果,分析在try…catch块里那些语句没有被执行,为什么? 块外那些语句可被执行到,为什么? 修改a=0,保持c[2]=200; 保持a=10,修改c[3]=200, 修改a=0,修改c[3]=200; ③再添加一个catch{Exception e}{ },位置在最前面,观察编译信息,说明什么? 3、编写Demo3_3.java 程序,计算两数相除并输出结果。使用两个catch子句,分别捕捉除数为0的异常和参数输入有误异常。源代码如下:

java实验报告

实验报告□实践报告□ 课程名称: Java语言程序设计 实验、实践名称:Java语言基础、数组和字符串编程、Java 面向对象程序设计、Java异常处理多线 程编程、图形用户界面编程 实验、实践地点:致向楼301 专业班级:软件1531 学号: 学生姓名:关玉芬 指导教师:相洁 2017 年 1月8日

for(int j=1;j

《Java程序设计》上机实验报告 实验四 异常类的定义及处理

信息科学与工程学院《Java程序设计》上机实验报告 专业班级姓名学号 实验时间指导教师成绩 实验名称实验四异常类的定义及处理 实验目的1)了解异常处理方法。 2)熟悉并掌握常见异常的捕获方法。 3)熟悉JDK中已经定义的若干异常类的层次结构。 4)掌握自定义异常类的创建方法。 主要实验记录及个人小结 (包括部分实验源程序、调试结果及实验结果分析等)1.编写程序实现如下功能:生成并捕获到NegativeArraySizeException和IndexOutOfBoundsException类型的异常,并显示捕获到的异常信息。然后在此基础上生成并捕获到NullPointerException类型的异常,并显示捕获到的异常信息。 1)实验源程序: public class TestException { public static void main(String[] args){ outofBound(); arraySize(); nullPointer(); } static void arraySize(){ try{int p=-5; int test1[]=new int[p]; //不一定要是-5,只要小于0的就能捕获到无效数组长度的异常} } catch (NegativeArraySizeException e) { System.out.println("捕获异常:\n"+e); System.out.println(e.toString()); //把捕获的错误异常转变为字符串类型,传给println()方法,用以输入。 }finally{ System.out.println("捕获完成\n"); } } static void outofBound(){ try {int test2[]=new int[10]; test2[100]=1; //超出数组长度 } catch (ArrayIndexOutOfBoundsException e) { System.out.println("捕获异常:\n"+e); System.out.println(e.toString()); } finally{ System.out.println("捕获完成\n\n"); } } static void nullPointer(){ try {int test3[]=null; test3[1]=100; //空指针无法赋值 } catch (NullPointerException e) {

java实验报告-

实验报告□实践报告□ 课程名称:Java语言程序设计 实验、实践名称:Java语言基础、数组和字符串编程、 Java面向对象程序设计、Java异常处 理多线程编程、图形用户界面编程实验、实践地点:致向楼301 专业班级:软件1531 学号: 学生姓名:关玉芬 指导教师:相洁 2017 年1月8日 实验一Java语言基础 一、实验目的和要求 (1) 通过实验,掌握Java语言程序设计的基本方法。 (2) 学会Java语言中标示符的命名、运算符和表达式的应用。 (3) 熟练地掌握Java程序流程控制语句的应用。 二、实验内容 1.编写应用程序,计算100(含100)以内所有偶数的和。 2.“水仙花数”是指一个3位数,其个位、十位、百位上的数字的立方和等于该数 本身,例如371=33+73+13,因此371是一个水仙花数。编写程序,求所有的水仙花 数。 3.编写一个程序,求1-100间的素数。 4. 有一函数: x (x<1) Y= 3x-2 (1≤x<10) 4x (x≥10) 写一程序,给定x值,输出y值。 5. 使用for循环语句,编写程序输出以下图案。 ☆ ☆☆☆ ☆☆☆☆☆ ☆☆☆☆☆☆☆

☆☆☆☆☆ ☆☆☆ ☆ 6.编写程序,输出从公元1900年到2100年所有闰年的年号,每输出5个年号换一行。判断年是否为闰年的条件是:①若年号可以被4整除,而不能被100整除,则是闰年;②若年号可以被400整除,也是闰年。 三、主要仪器设备 使用的计算机惠普:硬件配置Win7、软件环境eclipse 四、实验代码 1. public class a1 { public static void main(String[] args) { int i,sum=0; for(i=0;i<=100;i++){ if(i%2==0) sum+=i;} Syst }} 2. public class a2 { public static void main(String[] args) { int i,a,b,c; for(i=100;i<=999;i++){ a=i%10; b=(i-a)%100/10; c=(i-b*10-a)/100; if(i==a*a*a+b*b*b+c*c*c){ }}}} 3. public class a3 {public static void main(String[] args) { // TODO Auto-generated method stub for(int i=2;i<=100;i++) { boolean t = false; for(int j=2;j=1;i--){ for(j=1;j<=((-1)*i+4);j++) for(j=1;j<=(2*i-1);j++)

相关主题
文本预览
相关文档 最新文档