实验三异常类与内部类.docx
- 文档编号:16851196
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:20
- 大小:238.35KB
实验三异常类与内部类.docx
《实验三异常类与内部类.docx》由会员分享,可在线阅读,更多相关《实验三异常类与内部类.docx(20页珍藏版)》请在冰点文库上搜索。
实验三异常类与内部类
信息工程学院
Java程序设计实验/实习报告
学院:
信息工程学院
班级:
软件工程123
姓名:
刘杰
学号:
2012013413
成绩:
多线程异常处理
一、实验/实习过程
实验题1修改实验二实验题4,声明一个局部变量Stringtext="";然后通过循环把数组中的成员(有序)添加到text中,修改方法JOptionPane.showMessageDialog();参数以显示text。
实验过程:
与上次实验中的实验四相同,只是添加一个局部变量Stringtext="",赋值到text中,通过JOptionPane.showMessageDialog();方法输出。
实验代码:
Store类:
packagecn.edu.nwsuaf.jp.p4;
importjava.util.Arrays;
importjavax.swing.JOptionPane;
importcn.edu.nwsuaf.jp.p4.data.MP3Player;
importcn.edu.nwsuaf.jp.p4.data.Mobile;
importcn.edu.nwsuaf.jp.p4.data.Product;
publicclassStore{
publicstaticvoidmain(String[]args){
Mobilemobile1=newMobile("E365onChinaMobile",1780.0f);
Mobilemobile2=newMobile("M330onChinaMobile",1450.0f);
MP3Playerplayer1=newMP3Player("MeizoX3",256,399.0f);
MP3Playerplayer2=newMP3Player("MeizoE5",512,580.0f);
MP3Playerplayer3=newMP3Player("XliveXMMP3Player",256,930.0f);
Product[]products={mobile1,mobile2,player1,player2,player3};
Arrays.sort(products);
Stringtext="";
for(inta=0;a text+=products[a].toString()+"\n";} JOptionPane.showMessageDialog(null,"Theproductsare: "+"\n\n"+ text+"\n\n"+"Thereare"+Product.getCount()+"products."); } } Mobile类: packagecn.edu.nwsuaf.jp.p4.data; publicclassMobileextendsProduct{ publicMobile(Stringname,floatprice){ super(name,price); } publicStringtoString(){ returnname+price+"RMB"; } } MP3Palyer类: packagecn.edu.nwsuaf.jp.p4.data; publicclassMP3PlayerextendsProduct{ publicintmemory; publicMP3Player(Stringname,intmemory,floatprice){ super(name,price); this.memory=memory; } publicintgetMemory(){ returnmemory; } publicvoidsetMemory(intmemory){ this.memory=memory; } @Override publicStringtoString(){ returnname+"("+memory+"MB),"+price+"RMB"; } } Product类: packagecn.edu.nwsuaf.jp.p4.data; publicabstractclassProductimplementsComparable protectedStringname; protectedfloatprice; protectedstaticintcount; protectedProduct(Stringname,floatprice){ this.name=name; this.price=price; ++count; } publicStringgetName(){ returnname; } publicfloatgetPrice(){ returnprice; } publicstaticintgetCount(){ returncount; } publicintcompareTo(Productproduct){ returnnewFloat(product.getPrice()).compareTo(price); } } 实验截图: 实验题2用StringBuilertext="";替换Stringtext="";然后通过循环使用StringBuiler类的append方法向text中把数组中的成员(按价格有序)添加到text中,修改方法JOptionPane.showMessageDialog()的参数以显示text。 运行结果如图3-1所示。 图3-1 思考问题: 对比分析StringBuiler与String的区别。 答: 一个String对象的长度是固定的,不能改变它的内容,或者是附加新的字符至String对象中。 您也许会使用+来串联字符串以达到附加新字符或字符串的目的,但+会产生一个新的String实例。 而使用StringBuiler类中的append方法则是将新的字符串添加到已经开辟的内存中,不会增加新的内存来存放新增的字符串。 使用StringBuiler类中的append方法效率比较高,并且使用StringBuiler类中的append方法可以完全替代String类。 实验过程: 在前面代码中使用了StringBuiler类中的append方法。 实验代码: (只展示Store类) Store类: packagecn.edu.nwsuaf.jp.p4; importjava.util.Arrays; importjavax.swing.JOptionPane; importcn.edu.nwsuaf.jp.p4.data.MP3Player; importcn.edu.nwsuaf.jp.p4.data.Mobile; importcn.edu.nwsuaf.jp.p4.data.Product; publicclassStore{ publicstaticvoidmain(String[]args){ Mobilemobile1=newMobile("E365onChinaMobile",1780.0f); Mobilemobile2=newMobile("M330onChinaMobile",1450.0f); MP3Playerplayer1=newMP3Player("MeizoX3",256,399.0f); MP3Playerplayer2=newMP3Player("MeizoE5",512,580.0f); MP3Playerplayer3=newMP3Player("XliveXMMP3Player",256,930.0f); Product[]products={mobile1,mobile2,player1,player2,player3}; Arrays.sort(products); StringBuildertext=newStringBuilder(); for(inta=0;a text.append(products[a]+"\n"); } JOptionPane.showMessageDialog(null,"Theproductsare: "+"\n\n" +text+"\n\n"+"Thereare"+Product.getCount()+"products."); } } 实验题3从网上加载一个门户网站首页文件,用所学正则表达式知识,提取出其中所有邮箱地址。 提示: 读取文件的语句为 BufferedReaderbr=newBufferedReader(newFileReader("d: \\shared\xxx.html")); while((line=br.readLine())! =null) parse(line); 基本要求: 编写parse方法,完成上述功能。 实验过程: 这个实验主要是编写prase方法中的正则表达式的使用,了解读取文件的语句。 实验代码: packagetext3.d3; importjava.io.BufferedReader; importjava.io.FileReader; importjava.io.IOException; importjava.util.regex.Matcher; importjava.util.regex.Pattern; publicclassEmail{ publicEmail(){ //TODO自动生成的构造函数存根 } privatestaticvoidparse(Stringtext){ Stringregex="[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"; Patternp=Ppile(regex); Matcherm=p.matcher(text); while(m.find()){ Stringstring=m.group(); System.out.println(string); } } publicstaticvoidmain(String[]args){ //TODO自动生成的方法存根 try{ @SuppressWarnings("resource") BufferedReaderreader=newBufferedReader(newFileReader("f: \\sina.htm")); Stringtext=""; while((text=reader.readLine())! =null){ parse(text); } }catch(IOExceptione){ e.printStackTrace(); } } } 实验截图: 实验题4修改实验二实验题4,在Product类中添加销售日期属性及销售额属性,在sell方法中对其初始化,比较Date类与Calender类的用法,最后使用SimpleDateFormat类对销售日期进行格式化;用类DecimalFormat的相关方法格式化属性sales,熟悉DecimalFormat的用法。 运行结果如图3-2所示。 图3-2 实验过程: 主要使用了上次实验的代码,增加了DecimalFormat方法和SimpleDateFormat类。 实验代码: package cn.edu.nwsuaf.jp.p4.data; import java.util.Date; import java.text.DecimalFormat; import java.text.SimpleDateFormat; public abstract class Product implements Comparable public String type; public float price; public static int count; public int salePrice; public String saleDate; public Product(String type, float price, int salePrice){ this.type = type; this.price = price; this.salePrice = salePrice; ++count; } public int compareTo(Product product){ return new Float(product.price).compareTo(price); } public String SalePrice(){ DecimalFormat formatSaleMoney = new DecimalFormat("'sales: '#,##,##0 ¥'.'"); String result = formatSaleMoney.format(salePrice); return result; } public String SaleDate(){ Date nowTime = new Date(); SimpleDateFormat matter = new SimpleDateFormat("'date and time of sale: 'yyyy-MM-dd HH: mm: ss.S"); return matter.format(nowTime); } } package cn.edu.nwsuaf.jp.p4.data; public class Mobile extends Product { public static int mobileCount; public Mobile(String type, float price, int salePrice){ super(type, price, salePrice); mobileCount++; } public String toString(){ return type + ": " + price + " RMB, " + SaleDate() + SalePrice(); } } package cn.edu.nwsuaf.jp.p4.data; public class Mp3Player extends Product { public static int Mp3PlayerCount; public Mp3Player (String type, float price, int salePrice){ super(type, price, salePrice); Mp3PlayerCount++; } public String toString(){ return type + ": " + price + " RMB, " + SaleDate() + SalePrice(); } } package cn.edu.nwsuaf.jp.p4; import java.util.Arrays; import javax.swing.JOptionPane; import cn.edu.nwsuaf.jp.p4.data.*; public class Store { public static void main(String[] args) { // TODO Auto-generated method stub Mobile mobile1 = new Mobile("E365", 1780f, 106800); Mobile mobile2 = new Mobile("m330", 1450f, 116000); Mp3Player player1 = new Mp3Player("Meizo X3", 399, 7980); Mp3Player player2 = new Mp3Player("Meizo E5", 580, 17400); Mp3Player player3 = new Mp3Player("Xlive XM MP3 Play", 930, 46500); Product[] products={mobile1, mobile2, player1, player2, player3}; Arrays.sort(products); StringBuilder text = new StringBuilder(); for(int i = 0; i < products.length; ++i){ text.append(products[i]); text.append("\n"); } JOptionPane.showMessageDialog(null, "The products are: \n\n" + text + "\nThere are " + Product.count + " products."); } } 实验截图: 实验题5编写一个程序,输入一个班某门课程成绩,统计及格人数、不及格人数平均分。 为此设计一个异常类,当输入的成绩小于0分或大于100分时,抛出异常,程序将捕捉这个异常,并作出相应处理。 基本要求: 编写完整程序 实验过程: 先设计Input类,其中包含judge函数用来判断输入的成绩是否合法并分别输出不合法原因。 在主方法中实现抛出异常。 其次设计两个异常类分别是: subException和beyondException实现成绩大于100分和小于0分的异常。 最后在主函数中编写成绩输入方法。 实验代码: Input类: packagetext3.d5; importjava.util.Scanner; publicclassInput{ publicstaticvoidjudge(doublei)throwssubException,beyondException{ if(i<0){ thrownewsubException("成绩不能为负数! "); } if(i>100){ thrownewbeyondException("成绩不能大于100! "); } } publicstaticvoidmain(String[]args){ inti=1; intpassnum=0; intnopassnum=0; System.out.println("请输入学生成绩,以“-1”结束! "); System.out.println("第"+i+"位同学的成绩为: "); @SuppressWarnings("resource") Scannerreader=newScanner(System.in); doublesum=0; doublex=reader.nextDouble(); while(x! =-1){ try{ judge(x); if(x<60){ nopassnum=nopassnum+1; } if(x>100){ passnum=passnum+1; } sum+=x; }catch(subExceptione1){ System.out.println(e1); i-=1; }catch(beyondExceptione2){ System.out.println(e2); i-=1; } i=i+1; System.out.println("第"+i+"位学生的成绩为: "); x=reader.nextDouble(); } System.out.println("平均分为: "+sum/(nopassnum+passnum)); System.out.println("及格人数为: "+passnum); System.out.println("不及格人数为: "+nopassnum); } } subException类: packagetext3.d5; publicclasssubExceptionextendsArithmeticException{ privatestaticfinallongserialVersionUID=1L; publicsubException(){ super(); } publicsubException(Stringstring){ super(string); } } beyondException类: packagetext3.d5; publicclassbeyondExceptionextendsArithmeticException{ privatestaticfinallongserialVersionUID=1L; publicbeyondException(){ super(); } publicbeyondException(Stringstring){ super(string); } } 实验截图: 实验题6设计类ReflectTester,该类中有一方法copy(Objectobj),该方法能够创建一个和参数obj同样类型的对象,然后把obj对象中所有属性复制到新建对象中,并将它返回。 基本要求: 设计相关类完成上述功能(只要求复制简单JavaBean,且每个JavaBean的每个属性都有public类型的getXxx()和setXxx()方法)。 实验过程: 这个实验感觉很难,开始有点找不到头绪,从网上找了写资料,参照别人的代码编写的。 先创建一个Product类,添加属性和get、set方法和构造函数。 接下来创建一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 异常 部类