实验四Java输入、输出和异常处理
一、实验目的
1. 了解I/O流的使用;
2. 掌握常见的输入/输出流类及其主要方法。
3. 熟悉System类,掌握标准输入/输出。
4. 学会利用Try-catch-finally语句来捕获和处理异常;
5. 掌握自定义异常类的方法。
1. 使用标准数据流的应用程序。
2. 使用文件输入输出流的应用程序。
3. 通过编程理解系统异常处理的机制和创建自定义异常的方法。
标准数据流指在字符方式下(如DOS 提示符)程序与系统进行输入输出的方式,键盘和显示器屏幕是标准输入输出设备,数据输入的起点为键盘,数据输出的终点是屏幕,输出的数据可以在屏幕上显示出来。
1. 程序功能:将键盘上输入的字符在屏幕上显示出来。
2. 编写SY4_1.java 程序文件,源代码如下:
class SY4_1{
public static void main(String[] args) throws java.io.IOException {
byte buffer[]=new byte[10];
System.out.println("从键盘输入不超过10 个字符,按回车键结束输入:");
int count =System.in.read(buffer);//读取输入的字符并存放在缓冲区buffer 中
System.out.println("保存在缓冲区buffer 中元素的个数为:"+count);
System.out.println("buffer 中各元素的值为:");
for (int i=0;i<count;i++){
System.out.print(" "+ buffer[i]);//在屏幕上显示buffer 元素的值
}
System.out.println();
System.out.println("输出buffer 字符元素:");
System.out.write(buffer, 0, buffer.length);
}
}
3. 编译、运行SY4_1.java 文件。
1. 程序功能:将保存在本地机当前文件夹中的SY5_6.HTML 文本文件的内容在屏幕上显示出来,然后将其另存为SY4_6.txt 文件。
2. 编写SY4_2.java 程序文件,源代码如下:
import java.io.*;
public class SY4_2 {
public static void main(String[] args) throws IOException {
FileReader in=new FileReader("SY4_2.HTML");//建立文件输入流
BufferedReader bin=new BufferedReader(in);//建立缓冲输入流
FileWriter out=new FileWriter(" SY4_2.txt",true);//建立文件输出流
String str;
while ((str=bin.readLine())!=null) {
//将缓冲区内容通过循环方式逐行赋值给字符串str
System.out.println(str);//在屏幕上显示字符串str
out.write(str+"\n");//将字符串str 通过输出流写入KY5_1.txt 中
}
in.close();
out.close();
}
}
3. 编译、运行程序。
(四)异常处理机制
1. 编写使用 try…catch 语句处理异常的程序文件 SY4_3.java,源代码如下:
public class SY4_3{
public static void main(String[] arg3) {
System.out.println("这是一个异常处理的例子\n");
try {
int i=10;
i /=0;
}
catch (ArithmeticException e) {
System.out.println("异常是:"+e.getMessage());
}
finally {
System.out.println("finally 语句被执行");
}
}
}
l 编译并运行程序。
注意:如果在 catch 语句中声明的异常类是 Exception,catch 语句也能正确地捕获,这是因为
Exception是ArithmeticException的父类。如果不能确定会发生哪种情况的异常,那么最好指定catch
的参数为 Exception,即说明异常的类型为 Exception。
2.编写SY4_4.java 程序,计算两数相除并输出结果。使用两个catch子句,分别捕捉除数为0的异常和参数输入有误异常。源代码如下:
Import java.io.*;
Class SY4_4{
public static void main(string args[ ]) {
try{
BufferedReader strin=new BufferedReader ( new InputStreamReader(System .in);
System .out .print(“请输入除数:”);
String cl=strin .readLine();
int a=Integer .parseInt(cl);
System .out .print(“请输入被除数:”);
cl=strin .readLine();
int b=Integer .parseInt(cl);
int c=b/a;
System .out .println(“商为:”+c);
}
//捕获与I/O有关的异常
catch(IOException e){eprintStackTrace();}
//捕获数值转化时的异常,如不能将字符转化成数值
catch(IOException e){e .printStackTrace () ;}
//捕获数值转化时的异常,如不能将字符转化成数值
catch(NunberFormatException e){
System .out .println(“请输入整数!”);
//e .printStackTrace();
}
//捕获除数为0的异常
catch(ArithmeticException e){
System .out .println(“除数不可以0!”);
//e .printstackTrace();
}
}
}
编译并运行,当输入除数为0时,将有异常出现,当输入的不是整数时,如将30输成了3o,出现的是另一种异常。
3.编写程序SY4_5.java,包含自定义异常,当输入数值为13和4时抛出该异常。源代码如下:
class Ex2 extends Exception{
Ex2 (String msg) {
super(msg);
}
}
class SY4_5{
private int x;
void setX(int x) {
this.x=x;
}
void f1() throws Ex2{
if(x==13)
throw new Ex2(“I don’t like 13!”);
else if(x==4)
throw new Ex2(“I don’t like 4!”);
else
system .out.println(100/x);
}
public static void main(Sstring args[ ]) {
SY4_5 a=new SY4_5 ();
try {
a.steX(5);
//a.setX(13);
//a.setX(4);
//a.setX(0);
a.f1();
}
catch(Ex e) {
Sytem .out.println(“get message:”+e.getMessage());
}
}
编译并运行,分别取消注释上面程序中被注释的语句。当释放a.setX(13)语句后,查看运行结果,当释放a.setX(4)语句后,查看运行结果。
1. 编写程序,将一个文本文件中的内容,以行为单位,调整为倒序排列。
2.教材P206实验一、二、四
java.lang.OutOfMemoryError异常处理总结
20xx年x月x日星期二 10:04
原因:
常见的有以下几种:
1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3.代码中存在死循环或循环产生过多重复的对象实体;
4.使用的第三方软件中的BUG;
5.启动参数内存值设定的过小;
常见错误提示:
1.tomcat:java.lang.OutOfMemoryError: PermGen space
2.tomcat:java.lang.OutOfMemoryError: Java heap space
3.weblogic:Root cause of ServletException java.lang.OutOfMemoryError
4.resin:java.lang.OutOfMemoryError
5.java:java.lang.OutOfMemoryError
解决;
1.应用服务器提示错误的解决:
把启动参数内存值设置足够大。详细请看下列文章:
tomcat:
weblogic:
resin:
Jboss:
2.Java代码导致错误的解决:
重点排查以下几点:
1)检查代码中是否有死循环或递归调用。
2)检查是否有大循环重复产生新对象实体。
3)检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
4 )检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。
网友案例:
1.hibernate查询数据时,一次查询过多的数据,后来调整了该部分的代码,每次只取出指定量的数据,成功的解决该问题。
2.在做压力测试时,出现OutOfMemoryError,发现session的资源一直没有被释放产生的,最好通过session的invalidate()方法将session的资源释放。
3.程序中出现死循环。
4.tomcat部署、运行出现OutOfMemoryError,加大内存参数值,解决此问题。
文章出自: http://ajava.org/exep/java/14009.html
JAVA语言程序设计实验报告实验三实验题目:异常处理指导老师:卢照专业班级:计算机科学与技术系1106班姓名:李锋(20xx100…
中南财经政法大学武汉学院实验报告实验课名称JAVA语言学生姓名专业班级网络工程1104学号11071125开课时间20xx年2月2…
西安邮电大学计算机学院Java程序设计课内实验报告实验名称异常处理专业名称班级学生姓名1201学号8指导教师实验日期20xx年04…
实验报告课程名称Java语言程序设计院系管理学院专业班级姓名学号指导教师20xx年6月7日第1页Java语言程序设计上机实验报告一…
数学与计算科学学院实验报告实验项目名称JAVA调试环境及异常处理程序所属课程名称面向对象技术实验类型设计型实验日期20xx41班级…
JAVA语言程序设计实验报告实验三实验题目:异常处理指导老师:卢照专业班级:计算机科学与技术系1106班姓名:李锋(20xx100…
实验报告计算机与信息工程学院实验中心学期20xx20xx课程名称Java程序设计实验班级信息1202姓名方逸梅学号12121002…
中南财经政法大学武汉学院实验报告实验课名称JAVA语言学生姓名专业班级网络工程1104学号11071125开课时间20xx年2月2…
西安邮电大学计算机学院Java程序设计课内实验报告实验名称异常处理专业名称班级学生姓名1201学号8指导教师实验日期20xx年04…
数学与计算科学学院实验报告实验项目名称JAVA调试环境及异常处理程序所属课程名称面向对象技术实验类型设计型实验日期20xx41班级…