实验报告 Java输入、输出和异常处理

实验四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总内存异常总结

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

相关推荐