Java作业实验六---异常处理
Java异常(Exception)处理以及常见异常总结
Java异常(Exception)处理以及常见异常总结⽬录前⾔异常简介异常类型总结前⾔很多事件并⾮总是按照⼈们⾃⼰设计意愿顺利发展的,经常出现这样那样的异常情况。
例如:你计划周末郊游,计划从家⾥出发→到达⽬的→游泳→烧烤→回家。
但天有不测风云,当你准备烧烤时候突然天降⼤⾬,只能终⽌郊游提前回家。
“天降⼤⾬”是⼀种异常情况,你的计划应该考虑到这样的情况,并且应该有处理这种异常的预案。
计算机程序的编写也需要考虑处理这些异常情况。
异常(exception)是在运⾏程序时产⽣的⼀种异常情况,已经成为了衡量⼀门语⾔是否成熟的标准之⼀。
⽬前的主流编程语⾔java也提供了异常处理机制。
异常简介Java中的异常⼜称为例外,是⼀个在程序执⾏期间发⽣的事件,它中断正在执⾏程序的正常指令流。
为了能够及时有效地处理程序中的运⾏错误,必须使⽤异常类,这可以让程序具有极好的容错性且更加健壮。
在 Java 中⼀个异常的产⽣,主要有如下三种原因:1. Java 内部错误发⽣异常,Java 虚拟机产⽣的异常。
2. 编写的程序代码中的错误所产⽣的异常,例如空指针异常、数组越界异常等。
3. 通过 throw 语句⼿动⽣成的异常,⼀般⽤来告知该⽅法的调⽤者⼀些必要信息。
Java 通过⾯向对象的⽅法来处理异常。
在⼀个⽅法的运⾏过程中,如果发⽣了异常,则这个⽅法会产⽣代表该异常的⼀个对象,并把它交给运⾏时的系统,运⾏时系统寻找相应的代码来处理这⼀异常。
我们把⽣成异常对象,并把它提交给运⾏时系统的过程称为拋出(throw)异常。
运⾏时系统在⽅法的调⽤栈中查找,直到找到能够处理该类型异常的对象,这⼀个过程称为捕获(catch)异常。
例 1为了更好地理解什么是异常,下⾯来看⼀段⾮常简单的 Java 程序。
下⾯的⽰例代码实现了允许⽤户输⼊ 1~3 以内的整数,其他情况提⽰输⼊错误。
package io.renren.config;import java.util.Scanner;/*** Created by LiYangYong*/public class TestException {public static void main(String[] args) {System.out.println("请输⼊您的选择:(1~3 之间的整数)");Scanner input = new Scanner(System.in);int num = input.nextInt();switch (num) {case 1:System.out.println("one");break;case 2:System.out.println("two");break;case 3:System.out.println("three");break;default:System.out.println("error");break;}}}正常情况下,⽤户会按照系统的提⽰输⼊ 1~3 之间的数字。
java异常处理实验心得
java异常处理实验心得Java异常处理实验心得Java异常处理是Java编程中非常重要的一部分,它可以帮助我们更好地处理程序中出现的错误和异常情况,提高程序的健壮性和可靠性。
在本次实验中,我学习了Java异常处理的相关知识,并进行了实验操作,下面是我的心得体会。
一、Java异常处理的基本概念Java异常处理是指在程序运行过程中,当出现错误或异常情况时,程序能够自动捕获并处理这些异常,以保证程序的正常运行。
Java 中的异常分为两种:受检异常和非受检异常。
受检异常是指在编译时就能够检测到的异常,必须在代码中进行处理,否则编译不通过。
非受检异常是指在运行时才能够检测到的异常,不需要在代码中进行处理,但是如果不进行处理,程序会抛出异常并终止运行。
Java异常处理的基本语法如下:try {// 可能会抛出异常的代码块} catch (Exception e) {// 异常处理代码块} finally {// 无论是否抛出异常,都会执行的代码块在try块中编写可能会抛出异常的代码,如果出现异常,就会跳转到catch块中进行异常处理。
catch块中的参数e是一个异常对象,可以通过它获取异常的相关信息。
finally块中的代码无论是否抛出异常,都会执行。
二、实验操作在本次实验中,我编写了一个简单的Java程序,用于模拟银行账户的存取款操作。
程序中可能会出现两种异常情况:余额不足和输入错误。
我使用了try-catch语句来捕获并处理这些异常,保证程序的正常运行。
具体实现过程如下:1. 定义一个BankAccount类,包含账户余额和账户号码两个属性,以及存款和取款两个方法。
public class BankAccount {private double balance;private String accountNumber;public BankAccount(String accountNumber, double balance) {this.accountNumber = accountNumber;this.balance = balance;public void deposit(double amount) {balance += amount;}public void withdraw(double amount) throws InsufficientFundsException {if (amount > balance) {throw new InsufficientFundsException("余额不足");}balance -= amount;}public double getBalance() {return balance;}public String getAccountNumber() {return accountNumber;}}2. 定义一个InsufficientFundsException类,用于表示余额不足的异常情况。
Java实验报告继承、多态、接口和异常处理
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) {/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.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) {/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html = name;}public void setType(String type) {this.type = type;}public void setCourseScore(int courseNumber, int courseScore) { //按课程索引号设置课程成绩this.courses[courseNumber] = courseScore ;}}3.建⽴外部类(1)研究⽣类Postjgraduatepackage experiment5_1;public class postgraduate extends Student {public postgraduate(String name) {super(name);type = "研究⽣";}public void calculateGrade() {// TODO Auto-generated method stubint total = 0;double average = 0;for (int i = 0; i < CourseNo; i++) {total += courses[i];};average = total / CourseNo;if (average>=90&&average<100) courseGrade = "优秀"; else if (average>=80&&average<90) courseGrade = "良好"; else if (average>=70&&average<80) courseGrade = "⼀般"; else if (average>=60&&average<70) courseGrade = "及格"; else courseGrade = "不及格";}}(2)本科⽣类UnderGraduatepackage experiment5_1;public class undergraduate extends Student {public undergraduate(String name ) {super(name);type = "本科⽣";}public void calculateGrade() {int total = 0;double average = 0;for (int i = 0; i < CourseNo; i++) {total += getCourseScore(i) ;};average = total / CourseNo;if (average>=80&&average<100) courseGrade = "优秀"; else if (average>=70&&average<80) courseGrade = "良好"; else if (average>=60&&average<70) courseGrade = "⼀般"; else if (average>=50&&average<60) courseGrade = "及格"; else courseGrade = "不及格";}}4.编写代码测试函数package experiment5_1;public class polymorphism {public static void main(String[] args) {Student[] students = new Student[5];students[0] = new undergraduate("陈建平");students[1] = new undergraduate("鲁向东");students[2] = new postgraduate("匡晓华");students[3] = new undergraduate("周丽娜");students[4] = new postgraduate("梁欣欣");for (int i=0; i<5 ;i++) {students[i].setCourseScore(0,87);students[i].setCourseScore(1,90);students[i].setCourseScore(2,78);}for (int i=0; i<5 ;i++) {students[i].calculateGrade();}System.out.println("姓名" + " 类型" +" 成绩");System.out.println("-----------------------");for (int i=0; i<5 ;i++) {System.out.println(students[i].getName( )+" "+students[i].getType( )+" "+students[i].getCourseGrade( ));}}}实验内容⼆1.建⽴package experiment5_2,其最终⽬录结构如下:2.写接⼝Soundable代码:package experiment5_2;public interface Soundable {public void increaseV olume( );public void decreaseV olume( );public void stopSound( );public void playSound( );}3.创建三个类Radio、Walkman和Mobilephone具体实现,分别添加代码:// Mobilephone类package experiment5_2;class Mobilephone implements Soundable{public void increaseV olume( ) {System.out.println("增⼤⼿机⾳量");}public void decreaseV olume( ) {System.out.println("减⼩⼿机⾳量");}public void stopSound( ) {System.out.println("关闭⼿机");}public void playSound( ) {System.out.println("⼿机发出来电铃声");}}// Walkman类package experiment5_2;class Walkman implements Soundable { public void increaseV olume( ) { System.out.println("增⼤随声听⾳量"); }public void decreaseV olume( ) { System.out.println("减⼩随声听⾳量"); }public void stopSound( ) {System.out.println("关闭随声听");}public void playSound( ) {System.out.println("随声听发出⾳乐"); }}// Radio类package experiment5_2;class Radio implements Soundable{ public void increaseV olume( ) { System.out.println("增⼤收⾳机⾳量"); }public void decreaseV olume( ) { System.out.println("减⼩收⾳机⾳量"); }public void stopSound( ) {System.out.println("关闭收⾳机");}public void playSound( ) {System.out.println("收⾳机播放⼴播"); }}4.创建people类及编写测试代码://People类package experiment5_2;class People {public void listen(Soundable s) {s.playSound( );}}//测试代码package experiment5_2;import java.util.Scanner;public class InterfaceTest {public static void main(String[] args) {int i;People sportsman = new People( );Scanner scanner = new Scanner(System.in);Soundable[] soundDevice = new Soundable[3];//往声⾳设备数组中放⼊能发声的设备soundDevice[0] = new Radio( );soundDevice[1] = new Walkman( );soundDevice[2] = new Mobilephone();System.out.println("你想听什么? 请输⼊选择:0-收⾳机1-随声听2-⼿机");i = scanner.nextInt( );//开始听声⾳sportsman.listen(soundDevice[i]);soundDevice[i].increaseV olume( );soundDevice[i].stopSound();scanner.close();}}实验内容三1.建⽴package experiment5_3,其最终⽬录结构如下package experiment5_3;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class DateTransf extends JFrame implements KeyListener{/****/private static final long serialVersionUID = 1L;private static DateTransf frm;private static JTextField txt;private static JTextField data;DateTransf() {setTitle("数字与星期转换");setLocation(700, 300);setSize(400,130);}public static void main(String[] args) {frm = new DateTransf();frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setLayout(new GridLayout(2,2));txt = new JTextField(12);data = new JTextField(12);JLabel lable1 = new JLabel("输⼊数字:");JLabel lable2 = new JLabel("星期⼏:");frm.add(lable1);txt.addKeyListener(frm);frm.add(txt);frm.add(lable2);frm.add(data);frm.setVisible(true);}public void keyPressed(KeyEvent e) {if (e.getSource() == txt) {if (e.getKeyCode() == KeyEvent.VK_ENTER) // 判断按下的键是否是回车键{try {int number = Integer.parseInt(txt.getText());switch (number) {case 1:data.setText("Mon");break;case 2:data.setText("Tue");break;case 3:data.setText("Wen");break;case 4:data.setText("Thu");break;case 5:data.setText("Fri");break;case 6:data.setText("Sat");break;case 7:data.setText("Sun");break;default:JOptionPane.showMessageDialog(null, "您输⼊的数字不是1~7","⽆效⽇期",/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html RMATION_MESSAGE); break;}}catch (Exception e1) {// TODO: handle exceptionJOptionPane.showMessageDialog(null, "您输⼊的不是整数","⽆效⽇期",/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html RMA TION_MESSAGE); }}}}public void keyReleased(KeyEvent e) {}public void keyTyped(KeyEvent e) {}}2.编译运⾏五、实验结果●实验内容⼀结果:●实验内容⼆结果:●实验内容三结果:六、实验⼩结1.这次实验的内容⽐较多,需要掌握Java的类和对象的声明和使⽤⽅法、Java的类的继承和实现⽅法、多态性在类的继承中的运⽤、接⼝的定义与使⽤、基本异常的处理机制、try语句与catch语句的搭配使⽤等等;2. 在实验过程中,重点是要区分好实例和类,灵活掌握类的调⽤。
浅析Java异常处理机制及应用
浅析Java异常处理机制及应用摘要:Java异常处理机制是Java编程语言中最为重要的机制之一,它可以在代码中处理各种类型的异常。
本文将对Java异常处理机制进行浅析,并从应用层面探讨一些常见的Java异常处理方法。
关键词:Java,异常处理,应用正文:一、Java异常处理机制Java异常处理机制是Java编程语言中最为重要的机制之一。
在Java语言中,异常是指一个程序运行时产生的意外情况,可以是代码中的错误,也可以是由于外部环境因素导致的错误。
Java提供了一整套异常处理机制,可以帮助开发者处理各种类型的异常。
在Java中,异常通常被定义为继承自Throwable类的任意一个子类。
常见的异常类型包括RuntimeException、IOException、ClassNotFoundException、ArithmeticException等等。
Java中异常的处理主要分为两种方式:try-catch块和throws语句。
try-catch块是一种捕捉异常的方法,其基本语法结构如下:```try {// 可能会抛出异常的代码块} catch (type1 e1) {// 处理type1类型异常的代码块} catch (type2 e2) {// 处理type2类型异常的代码块} finally {// 不管是否发生异常,都会执行的代码块}```throws语句是一种抛出异常的方法,其基本语法结构如下:```public void methodName() throws ExceptionType {// 可能会抛出异常的代码块}```二、Java异常处理的应用Java异常处理机制应用广泛,以下是应用层面探讨一些常见的Java异常处理方法。
1、基于try-catch块的异常处理try-catch块是Java中最基本的异常处理方法。
它可以在程序运行时捕捉异常,并且根据不同的异常类型采取不同的处理方法。
Java异常处理
该程序段将输出: Array Index out of Bounds
22
不正确用法:
将两个catch块的顺序对调: int a[] = new int[10]; try{
for(int i=0;i<=10;i++) a[i]=i;
}catch(Exception e){ System.out.println("There is an exception");
18
结果分析:
例题的除数为0时返回为0的问题,通过 语句if (d!=0 || n[i]==0)得以改进;
该程序分别在不同的层次对两种异常进 行了处理;
异常处理后的程序保持了良好的健壮性, 体现了“带病工作”的能力;
19
异常处理
异常处理器(exception handler)
try t{ry语句块定义了异常处理器的范围 .c.at.ch语句块捕捉try语句块抛出的异常 t}ryc{atch (ArrayIndexOutOfBoundsException e) { // Code that might generate exceptions } caStcyhs(tTeymp.eo1uitd.1p)ri{ntln(e); }//cHaatcnhdl(eIeOxEcxecpetipotnios nofeT)y{pe1 } caStcyhs(tTeymp.eo2uitd.2p)ri{ntln(e); }// Handle exceptions of Type2 } catch(Type3 id3) { // Handle exceptions of Type3 } // etc ...
20
异常处理
catch 语句的顺序
java异常处理实验报告
java异常处理实验报告Java异常处理实验报告一、实验目的本次实验旨在通过编写Java程序,学习和掌握异常处理的相关知识和技巧,提高代码的健壮性和可靠性。
二、实验环境本次实验使用的开发环境为Eclipse,使用Java语言进行编程。
三、实验内容1. 异常的概念异常是指程序在运行过程中出现的意外情况,例如除零错误、数组越界等。
Java中的异常是以类的形式存在的,所有异常类都是Throwable类的子类。
2. 异常处理的方法Java提供了try-catch-finally语句用于处理异常。
在try块中编写可能会抛出异常的代码,如果发生异常,则会跳转到对应的catch块进行处理。
finally块中的代码无论是否发生异常都会被执行。
3. 异常的分类Java中的异常分为两种类型:受检异常(Checked Exception)和非受检异常(Unchecked Exception)。
受检异常需要在代码中显式地进行处理,否则编译器会报错;而非受检异常不需要强制处理。
4. 自定义异常除了使用Java提供的异常类,我们还可以根据需要自定义异常类。
自定义异常类需要继承Exception类或RuntimeException类,并重写相应的方法。
5. 异常处理的最佳实践在实际的软件开发中,异常处理是非常重要的一部分。
以下是一些异常处理的最佳实践:- 尽早捕获异常:在代码中尽量早地捕获异常,以避免异常的传播和影响其他部分的代码。
- 适当处理异常:根据具体情况,选择合适的处理方式,可以是打印日志、返回默认值、抛出新的异常等。
- 避免捕获过宽的异常:捕获异常时要尽量精确,避免捕获过宽的异常类型,以免屏蔽了真正的问题。
四、实验步骤1. 创建一个Java项目,并新建一个类用于实现异常处理的实验。
2. 编写代码,在try块中编写可能会抛出异常的代码。
3. 使用catch块捕获异常,并进行相应的处理,例如打印异常信息。
4. 在finally块中编写必要的代码,例如资源的释放。
java异常解决方案
java异常解决方案一、Hibernate(1)org.hibernate.TransientObjectException: object references an unsaved transient instance....(2)org.springframework.orm.hibernate3.HibernateSystemException: Don't change the reference to a collection withcascade="all-delete-orphan": entity.Klass.students; nested exception is org.hibernate.HibernateException: Don't change the reference to a collection with cascade="all-delete-orphan": entity.Klass.students二、Tomcat(1)tomcat启动时报错:java.io.EOFException(2)tomcat内存溢出三、JAVA基本(1)ng.ClassCastException:(2)ng.UnsupportedClassVersionError: Bad version number in .class file四、JSP(1)javax.servlet.jsp.JspException:(2)org.apache.jasper.JasperException: Unable to compile class for JSP:(3)Servlet.service() for servlet jsp threw exceptionng.Error: Unresolved compilation problem:(4)ng.Error: Unresolved compilation problem:The method contextInitialized(ServletContextEvent) of type CreateDataSourceTableListener must override a superclass method(5)Servlet.service() for servlet jsp threw exception ng.Error: Unresolved compilation problem:The method setCharacterEncoding(String) is undefined for the type ServletResponse五、SSH整合(1)ng.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener(2)Exception starting filter struts2 Class:com.opensymphony.xwork2.spring.SpringObjectFactory File: SpringObjectFactory.java Method: getClassInstance(3)(7)(8)org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'biz' defined in class path... (4)Exception starting filter struts2The action name cannot be the same as the action suffix [Action] - Class: org.apache.struts2.convention.SEOActionNameBuilder (5)avax.management.RuntimeErrorException: Error thrown in preDeregister methodCaused by: ng.NoClassDefFoundError:org/apache/struts2/util/ObjectFactoryDestroyable(6)Unable to load configuration. - bean -jar:file:/D:/Tomcat/tomcat/apache-tomcat-6.0.30/webapps/tes t/WEB-INF/lib/struts2-core-2.2.3.1.jar!/struts-default.xml: 29:72六、Struts(1)ng.NoSuchMethodException:action.StudentAction.getAllStudent()(2)Caused by: ng.ClassCastException:org.apache.xerces.parsers.XML11Configuration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration (3)No result defined for action and result七、Android(1)There is no android project named 'cm-android'一、Hibernate一(1)org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: er某个对象的某个属性是一个实体,在这个实体没有保存之前就保存这个对象而造成了这个错误。
JAVA语言程序设计实验报告
实验一、安装JDK并熟悉java的运行环境实验二、基本语法练习实验三、面向对象编程实验(4)实验四、异常处理实验实验五、小应用程序实验实验六、图形图像实验实验七、GUI(图形用户接口)实验(4)实验八、多线程实验实验九、输入输出流实验(4)实验十、数据库应用实验(4)实验一、安装JDK并熟悉java的运行环境一、实验目的熟悉JA V A的运行环境及学习简单的编程。
二、预习内容安装工具软件的基本方法。
三、实验设备与环境装有JA V A语言工具软件(Eclipse )的微机若干四、实验内容安装Eclipse及JA V A的核心编译程序J2SDK。
1、打开Eclipse的安装盘安装Eclipse。
2、在相同目录下安装J2SDK。
3、打开Eclipse软件对J2SDK文件进行配置。
4、编写一应用程序,在屏幕上显示“HELLO WORLD”和爱心标志。
Pulic class Hello{public static void main(String args[]){//在屏幕上显示“HELLO WORLD”和爱心标志}}5、编写一小程序实现上述功能:在屏幕上显示“HELLO WORLD”和爱心标志。
实验结果五、注意事项⒈认真填写实验报告⒉遵守实验室各项制度,服从实验指导教师的安排⒊按规定的时间完成实验六、说明本次实验建议学时数2学时七、实验总结与体会实验二、基本语法练习一、实验目的⒈熟悉Java的基本语法⒉编写应用程序接收命令行参数⒊编写应用程序接收用户从键盘的输入⒋掌握字符串与数组的基本方法二、预习内容java编程的基本结构三、实验设备与环境装有JA V A语言工具软件(Eclipse )的微机若干四、实验内容⒈编写一个应用程序求若干个数的平均数,原始数字要求从命令行输入。
应用程序中main方法的参数String类型的数组args能接受用户从命令行键入的参数。
(1)编辑A verage.java。
class A verage{public static void main(String args[ ]){double n,sun=0;for (int l=0;l<args.legth;l++){sum=sum+Double.valueOf(arg[l].doubleV alue();)}n=sum/args.length;System.out.println(“average=”+n);}}命令行参数:12.34 34.45 21212121注意:1)参数的个数可以利用args.length来取得。
java实验报告:实验六
java实验报告:实验六一、实验目的本次实验的主要目的是深入理解和掌握 Java 中的一些关键概念和技术,包括面向对象编程的特性、异常处理机制以及文件操作等。
通过实际的编程实践,提高我们运用 Java 解决实际问题的能力。
二、实验环境本次实验使用的开发工具是 IntelliJ IDEA,操作系统为 Windows 10。
三、实验内容(一)面向对象编程实践1、定义一个名为“Student”的类,包含学生的姓名、学号和成绩等属性,并实现相应的 getter 和 setter 方法。
2、在主函数中创建“Student”类的对象,并对其属性进行赋值和输出。
(二)异常处理1、编写一个方法,实现两数相除的运算。
如果除数为 0,抛出“ArithmeticException”异常。
2、在主函数中调用该方法,并使用trycatch 语句捕获并处理异常。
(三)文件操作1、创建一个文本文件,并向其中写入一些数据。
2、读取该文件中的数据,并将其输出到控制台。
四、实验步骤(一)面向对象编程实践1、首先,在 IntelliJ IDEA 中创建一个新的 Java 项目。
2、然后,创建“Student”类,代码如下:```javapublic class Student {private String name;private int studentId;private double score;public String getName(){return name;}public void setName(String name) {thisname = name;}public int getStudentId(){return studentId;}public void setStudentId(int studentId) {thisstudentId = studentId;}public double getScore(){return score;}public void setScore(double score) {thisscore = score;}}```3、在主函数中创建“Student”类的对象,并对其属性进行赋值和输出,代码如下:```javapublic class Main {public static void main(String args) {Student student = new Student();studentsetName("张三");studentsetStudentId(1001);studentsetScore(905);Systemoutprintln("学生姓名:"+ studentgetName());Systemoutprintln("学生学号:"+ studentgetStudentId());Systemoutprintln("学生成绩:"+ studentgetScore());}}```(二)异常处理1、编写一个名为“divide”的方法,实现两数相除的运算,代码如下:```javapublic class ExceptionHandling {public static double divide(double num1, double num2) {if (num2 == 0) {throw new ArithmeticException("除数不能为 0");}return num1 / num2;}public static void main(String args) {try {double result = divide(10, 0);Systemoutprintln("结果:"+ result);} catch (ArithmeticException e) {Systemoutprintln("捕获到异常:"+ egetMessage());}}}```(三)文件操作1、创建一个名为“FileOperation”的类,用于实现文件的写入和读取操作,代码如下:```javaimport javaioBufferedWriter;import javaioFileWriter;import javaioIOException;import javaioBufferedReader;import javaioFileReader;public class FileOperation {public static void writeToFile(String filePath, String content) {try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))){writerwrite(content);} catch (IOException e) {eprintStackTrace();}}public static String readFromFile(String filePath) {StringBuilder content = new StringBuilder();try (BufferedReader reader = new BufferedReader(new FileReader(filePath))){String line;while ((line = readerreadLine())!= null) {contentappend(line)append("\n");}} catch (IOException e) {eprintStackTrace();}return contenttoString();}public static void main(String args) {String filePath ="testtxt";String data ="这是写入文件的内容";writeToFile(filePath, data);String readData = readFromFile(filePath);Systemoutprintln("读取到的文件内容:\n" + readData);}}```五、实验结果(一)面向对象编程实践成功创建了“Student”类的对象,并正确地对其属性进行了赋值和输出。
JAVA_异常处理实验报告
JAVA_异常处理实验报告实验三异常处理[实验目的]1. 掌握异常处理方法及熟悉常见异常的捕获方法。
[实验内容]1. 练习捕获异常、声明异常、抛出异常的方法、熟悉try和catch子句的使用。
[实验步骤]第1题异常处理要求声明定义两个Exception的异常子类:NoLowerLetter类和NoDigit类。
再声明一个People类~该类中的void printLetter(charc)方法抛出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;}1}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());}}}将结果运行截屏贴在下面:23。
java异常处理
Try与 Try与catch
try
捕获违例的第一步是用try{… 捕获违例的第一步是用 try{…} 语句块选定捕 获违例的范围。 获违例的范围。 catch 在catch语句块中是对违例对象进行处理 catch语句块中是对违例对象进行处理 的代码
每个try 语句块可以伴随一个或多个catch 语句, 每个 try语句块可以伴随一个或多个 catch语句 , 用 于处理可能产生的不同类型的违例对象。 于处理可能产生的不同类型的违例对象 。 与其它 对象一样, 对象一样 , 可以访问一个违例对象的成员变量或 调用它的方法。 调用它的方法。 getMessage( ) 方法,用来得到有关异常事件的信 方法, 息 printStackTrace( )用来跟踪异常事件发生时执行 堆栈的内容。 堆栈的内容。
IOExeption
从一个不存在的文件中读取数据 越过文件结尾继续读取 连接一个不存在的URL 连接一个不存在的URL
5
Java当中的异常处理机制 Java当中的异常处理机制
异常是一个对象,必须是某个异常类的实 例,这个异常必须是已经定义好的。 例,这个异常必须是已经定义好的。 Java类库中已经存在了许多异常类,每种异 Java类库中已经存在了许多异常类,每种异 常类对应着某一种或者某一类错误,类中 包含着错误的相关信息和处理方法。 如果程序发生错误的当前结构中没有处理 如果程序发生错误的当前结构中没有处理 此异常的机制,那么它将移交给外层结构 处理,如果还不行,就继续上交,直到操 处理,如果还不行,就继续上交,直到操 作系统,操作系统就会终止程序的运行。
17
异常使用中的两个问题(1) 异常使用中的两个问题(
异常的匹配:异常的控制过程与swich相似, 异常的匹配:异常的控制过程与swich相似, 但有本质区别
java程序错误类型及异常处理
java程序错误类型及异常处理⼀、程序的错误类型在程序设计中,⽆论规模是⼤是⼩,错误总是难免的。
程序的设计很少有能够⼀次完成,没有错误的(不是指HelloWorld这样的程序,⽽是要实现⼀定的功能,具备⼀定实⽤价值的程序),在编程的过程中由于种种原因,总会出现这样或那样的错误,这些程序的错误就是我们常说的“Bug”,⽽检测并修正这些错误的⽅法就是“Debug”(调试)。
基本上所有的集成开发环境都提供了强⼤的和程序调试功能,在程序进⾏编译,连接,运⾏时,会对程序中错误进⾏诊断。
程序的错误可以抽象分为三类:语法错误、运⾏错误和逻辑错误。
1、语法错误是指由于编程中输⼊不符合语法规则⽽产⽣的。
程序编译就通不过,程序不能运⾏起来。
此类错误最简单,调试起来⽐较容易例如:表达式不完整、缺少必要的标点符号、关键字输⼊错误、数据类型不匹配、循环语句或选择语句的关键字不匹配等。
通常,编译器对程序进⾏编译的过程中,会把检测到的语法错误以提⽰的⽅式列举出来,⼜称为编译错误。
语法错误的调试,则可以由集成开发环境提供的调试功能来实现,在程序进⾏编译时,编译器会对程序中的语法错误进⾏诊断。
编译诊断的语法错误分为3中:致命错误、错误和警告。
(1)致命错误:这个错误⼤多是编译程序内部发⽣的错误,发⽣这类错误时,编译被迫中⽌,只能重新启动编译程序,但是这类错误很少发⽣,为了安全,编译前最好还是先保存程序。
(2)错误:这个错误通常是在编译时,语法不当所引起的。
例如:括号不匹配,变量未声明等。
产⽣这类错误时,编译程序会出现报错提⽰,我们根据提⽰对源程序进⾏修改即可。
这类错误是出现最多的。
(3)警告:是指被编译程序怀疑有错,但是不确定,有时可强⾏通过。
例如:没有加void声明的主函数没有返回值,double数据被转换为float类型等。
这些警告中有些会导致错误,有些可以通过。
常规解决⽅法:此类错误⼀般程序编译系统会⾃动提⽰相应的错误地点和错误原因,⽐如哪⼀⾏代码少了个括号等诸如此类的提⽰,常见的错误,看懂直接改正即可,如果是看不懂原因,可以将错误提⽰信息输⼊搜索引擎查找⼀下,⼀般都能找到具体的解决办法。
java异常处理机制详解
java异常处理机制详解转⾃:/hy928302776/archive/2013/04/22/3035504.html异常机制已经成为判断⼀门编程语⾔是否成熟的标准,异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提⾼程序健壮性。
Java异常机制主要依赖于try、catch、finally、throw、throws五个关键字。
1.try:它⾥⾯放置可能引发异常的代码2.catch:后⾯对应异常类型和⼀个代码块,⽤于表明该catch块⽤于处理这种类型的代码块,可以有多个catch块。
3.finally:主要⽤于回收在try块⾥打开的物⼒资源(如数据库连接、⽹络连接和磁盘⽂件),异常机制总是保证finally块总是被执⾏。
只有finally 块,执⾏完成之后,才会回来执⾏try或者catch块中的return或者throw语句,如果finally中使⽤了return或者 throw等终⽌⽅法的语句,则就不会跳回执⾏,直接停⽌。
4.throw:⽤于抛出⼀个实际的异常,可以单独作为语句使⽤,抛出⼀个具体的异常对象。
5.throws:⽤在⽅法签名中,⽤于声明该⽅法可能抛出的异常。
Java的异常分为两种,checked异常(编译时异常)和Runtime异常(运⾏时异常)1. java认为checked异常都是可以再编译阶段被处理的异常,所以它强制程序处理所有的checked异常,⽽Runtime异常⽆须处理,java程序必须显式处理checked异常,如果程序没有处理,则在编译时会发⽣错误,⽆法通过编译。
2. checked异常体现了java设计哲学:没有完善处理的代码根本不会被执⾏,体现了java的严谨性,对于构造⼤型、健壮、可维护的应⽤系统⽽⾔,错误处理是整个应⽤需要考虑的重要⽅⾯。
Java异常处理机制,在程序运⾏出现意外时,系统会⽣成⼀个Exception对象,来通知程序,从⽽实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。
java-异常处理
No
Im 第5章 异a 常处g 理 e
5.1 程序错误与处理
5.2 Java的异常处理
3
第3页,共45页。
No
Im 5.1 程序a 错误g 与处理e
5.1.1 程序错误、发现时刻及错误处理原则
5.1.2 面向过程语言与面向对象语言 的错误处理方式比较
5.1.3 Java的错误和异常
4
第4页,共45页。
System.out.println(str.length());
//调用空对象的方法,产生空对象异常
25
第25页,共45页。
No Image
5.2.1 异常类说明
2. RuntimeException 运行异常类
例如:输入数据格式错、除数为0错、 给变量赋予超出其范围的值等。
发现和排除:
Java解释器在运行时能够发现语义错,一旦发现了语义错,
Java将停止程序运行,并给出错误的位置和性质。
6
第6页,共45页。
No Image
5.1.1 程序错误、发现时刻及错误处理原则
3. 逻辑错 —logic error
②运行时不能发现浮点数除法中除数为0的语义错。
System.out.println(""+(3/0.0));
//浮点数除法,除数为0,没有抛出异常,运行结果为Infinity(无穷大)
18
第18页,共45页。
No Image
5.1.3 Java的错误和异常
【例5.2】发现数组下标越界的语义错。
public class Outofbounds
第15页,共45页。
事后处理 异常处理
15
No Image
JAVA-异常处理
JAVA-异常处理1.异常概述1. 异常是运⾏时错误(程序执⾏期间发⽣的事件).2. 异常是从⽅法抛出的,⽅法的调⽤者可以捕获以及处理该异常.3. 异常处理使得程序可以处理运⾏时的错误并且继续通常的执⾏.4. 运⾏时错误: 程序运⾏过程中,若JVM检测出⼀个不可能执⾏的操作.eg.越界下标访问: ArrayIndexOutOfBoundsException5. 异常: JAVA中运⾏时错误会作为异常抛出. 异常为⼀种对象.⼤致模板:try{Code to run;A statement or a method that may throw an exception;More code to run;}catch(type ex){Code to process the exception;}1. 很多库⽅法都会抛出异常,此时throw可省2. ⼀个异常可能是通过try块中的throw语句直接抛出,或者调⽤⼀个可能会抛出异常的⽅法⽽抛出3. 若try块中内容正常执⾏,不会引起异常4. 若try块中内容(⽅法)遇到⼀个异常,其会抛出⼀个异常给它的调⽤者,这个调⽤者的catch处理该异常拋出(throw)异常:⽣成异常对象,并把它提交给运⾏时系统。
捕获(catch)异常:运⾏时系统在⽅法的调⽤栈中查找,直到找到能够处理该类型异常的对象。
2.异常类型Java通过⾯向对象来处理异常,即异常是对象,⽽对象都⽤类来定义。
异常的根类为ng.Throwable异常类的类型:1. 系统错误Error: Java虚拟机抛出,描述内部系统错误.发⽣时:通知⽤户以及尽量稳妥地终⽌程序.2. 异常Exception:描述由程序和外部环境引起的错误.发⽣时:能被程序捕获和处理1. 运⾏时异常(unchecked): RuntimeException类表⽰,程序设计错误。
如 NullPointerException、IndexOutOfBoundsException 等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。
Java异常处理之异常处理机制一:try-catch-finally
Java异常处理之异常处理机制⼀:try-catch-finally⼀、Java 异常处理 编写程序时,要在出现可能出现错误的时候加上检测的代码,如判断分母为0,数据为空,过多的 if-else分⽀导致程序代码加长,臃肿,可读性差,因此采⽤异常处理机制。
Java采⽤的异常处理机制,是将异常处理的程序代码集中在⼀起,与正常的程序代码分开,使得程序简洁、优雅,并易于维护。
⼆、异常处理:抓抛模型 1、抛出 Java 程序的执⾏过程中出现异常,会⽣成⼀个异常类对象,该异常对象将被提交给 Java 运⾏时系统,这个过程称为抛出(throw)异常。
⼀旦抛出对象以后,其后的代码就不再执⾏。
2、捕获、“抓” 可以理解为异常的处理⽅式:① try-catch-finally; ② throws; 3、异常对象的⽣成 (1)由虚拟机⾃动⽣成:程序运⾏过程中,虚拟机检测到程序发⽣了问题,如果在当前代码中没有找到相应的处理程序,就会在后台⾃动创建⼀个对应异常类的实例对象并抛出——⾃动抛出; (2)由开发⼈员⼿动创建:Exception exception = new ClassCastException;——创建好的异常对象不抛出对程序没有任何影响,和创建⼀个普通对象⼀样; 4、处理异常过程 (1)当程序运⾏到某⼀句时,发⽣了异常,那么程序会先停下来; (2)程序会在这句代码处,查看原因,⽣成⼀个合理“异常对象”,然后“抛”出; (3)JVM 会检测这句代码的外围,是否有 try...catch 结构,可以“捕获”它; (4)如果可以捕获,那么程序在处理完异常后,继续下⾯的运⾏,不会崩溃; (5)如果不能捕获,那么会把这个异常继续抛给“上级”,如果“上级”能处理,那么程序从“上级"处理完的代码后⾯继续运⾏; (6)如果上级也不能处理,那么继续往上抛,⼀直到达JVM,那么就“崩溃”; ①如果⼀个⽅法内抛出异常,该异常对象会被抛给调⽤者⽅法中处理。
Java异常处理
异常的分类
异常的分类
Throwable
用户自己产生的异常 .
要处理 Error 不做处理 由用户捕获或 声明并处理
Exception RuntimeException
缺省的异常 处理程序
例外的分类
一个例外是由一个对象来代表的,所有的例外都 直接或间接地继承自Throwable类. 在Java类库的每个类包中都定义了例外类,这些 例外类分成两大类:Error类及Exception类,后者是 Java程序中需要大量处理的. 除了Java类库所定义的例外类之外,用户也可以 通过继承已有的例外类来定义自己的例外类,并在 程序中使用(利用throw产生,throws声明抛出, catch捕捉并处理).
捕获异常
捕获并处理异常 try { //接受监视的程序块,在此区域内发生 //的异常,由catch中指定的程序处理; } // 不能有其它语句分隔 catch(要处理的异常种类和标识符) { //处理异常; }catch(要处理的异常种类和标识符) { //处理异常; }
捕获例外
try语句 捕获例外的第一步就是用try {…}语句指定了一 段代码,该段代码就是一次捕获并处理例外的范围. 在执行过程中,该段代码可能会产生并抛弃一个或 多个例外,因此,它后面的catch语句进行捕获时也 要做相应的处理. 如果没有例外产生,所有的catch代码段都被略过 不执行.
—— catch语句 catch语句
尽量避免用一般类型作为catch中指定要捕获的类型.
一般应该按照try代码块中例外可能产生的顺序及其真正类型 进行捕获和处理,
在例外处理中无法访问try代码段中声明的变量
因为此时try代码段已经退出了,例外处理所需要的任何信息 一般都应该通过例外对象来传递
JAVA异常处理实验报告
JAVA语言程序设计实验报告实验三实验题目:异常处理指导老师:卢照专业班级:计算机科学与技术系1106班姓名:李锋(2011100645)2014年4月20日一、实验名称:异常处理二、实验目的:1.掌握异常处理机制的运作2.掌握处理异常的几个子句:try…catch..finally、thorws和throw3.掌握字符串类的相关操作三、实验内容:1. 编写一个类,在其main()方法中创建一个一维数组,在try字句中访问数组元素,使其产生ArrayIndexOutOfBoundsException异常。
在catch子句里捕获此异常对象,并且打印“数组越界”信息,加一个finally子句,打印一条信息以证明这里确实得到了执行。
2. 给定一个字符串,将字符串中的所有大写字母变成小写字母,数字用0来代替,其他符号用#代替。
四、实验代码1.ExceptionDemo.javaclass 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.javaclass 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<str.length();i++){char ch = str.charAt(i);if(ch>='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("#");}}System.out.println("转换后=="+sb);}}运行结果:五、实验总结:通过本次实验,熟悉掌握了Java的异常机制,try{}catch(){}finally{}的执行过程。
《java程序设计》实验指导书
实验一Java实验环境的建立一、实验目的1.掌握Java编程环境的搭建过程;2.掌握Jcreator pro软件的使用方法;3.能使用Java doc文档。
二、实验内容1.下载并安装JDK1.6,配置JDK环境变量;2.下载Javadoc压缩包并解压在JDK安装路径下;3.下载Jcreator pro 4.0并安装和配置使用环境;4.使用实验环境运行书中实例代码,在屏幕上输出“Hello Java”字符串。
①Java application程序代码如下:public class HelloJava{public static void main(String args[]){System.out.println("Hello Java!");}}②Java applet程序代码如下:import java.awt.*;public class Hello extends java.applet.Applet{public void paint(Graphics g){g.drawString("Hello!",30,30);}}三、试验要求1、预习试验内容并写出上机报告。
2、实验中出现的问题及实验体会。
实验二Java语言程序设计训练一、实验目的:1.输入、输出操作实现原理和方法2.掌握程序流程控制的实现方法3.掌握数组的定义和操作方法二、实验内容1.计算Result=1!+2!+3!+ (10)public class TestJieC{public static void main(String arg[]){long result=1;for(int i=1;i<=10;i++){ result=i*result;result+=result;}System.out.println(" "+result);}}2.计算1---50之间所有素数的和。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
提交方式:
把文件名改为学号姓名,提交文档和源码(只需提交最顶层包文件夹)
实验六异常处理
一、实验目的
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的异常和参数输入有误异常。
源代码如下:
编译并运行,当输入除数为0时,将有异常出现,当输入的不是整数时,如将30输成了3o,出现的是另一种异常。
(二)自定义异常类
4、注意throw、throws的使用。
源文件是Demo3_4.java。
【思考】
①修改try...catch中语句z=div.DIV(100,0)入口参数,观察运行结果。
z=d.div(100,10);
z=d.div(100,0);
②将try...catch语句注释掉,观察编译信息。
③上面条件保持,在main函数后面加上throws MyException再重新编译,能否通过?然后运行观察结
果,得到什么结论?
2.编写程序Demo3_5.java,包含自定义异常,当输入数值为13和4时抛出该异常。
源代码如下:
class Ex3_5 extends Exception{
Ex3_5 (String msg){
super(msg);
}
}
【思考】编译并运行,分别取消注释上面程序中被注释的语句。
当释放a.setX(13)语句后,查看运行结果,当释放a.setX(4)语句后,查看运行结果,当释放a.setX(0)语句后,查看运行结果。
并给出结论
四、实验练习题
1.参考下面的程序,试修改程序,捕获相关异常,使得程序能正常运行。
[提示:用
错误数据测试,即可得到异常类名,运行时主方法参数输入abc 测试]
public class StringIndexOutOf
{
public static void main(String args[])
{
System.out.println("字符串索引越界异常");
String str=args[0];
System.out.println(“第四个字符为”+str.charAt(3));
int aa=Integer.parseInt(args[0]); System.out.println(“平方为”+aa*aa);
}
}
2.从命令行得到5个整数,放入一整型数组,然后打印输出,要求:如果输入数据
丌为整数,要捕获Integer.parseInt()产生的异常,显示“请输入整数”,捕获输入参
数丌足5个的异常(数组越界),显示“请输入至少5个整数”。
3.写一个方法void sanjiao(int a,int b,int c),判断三个参数是否能构成一个三角形,
如果丌能则抛出异常IllegalArgumentException,显示异常信息a,b,c+”丌能构成三角形”,如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数,调用此方法,并捕获异常。
4.自定义类Sanj,其中有成员x,y,z,作为三边长,构造方法Sanj(a,b,c)分别给x,y,z
赋值,方法求面积getArea和显示三角形信息(三个边长)showInfo,这2个方法中当三
条边丌能构成一个三角形时要抛出自定义异常NotSanjiaoException,否则显示正确信息。
在另外一个类中的主方法中构造一个Sanj对象(三边为命令行输入的三个整数),显示三角形信息和面积,要求捕获异常。