实验六-内部类与异常类
第六章 内部类与异常类

嵌套try-catch-finally语句
Java语言的try-catch-finally语句可以嵌套,即
在try块中可以包含另外的try-catch-finally语句。
【示例程序c11_3.java】 使用嵌套的try-catch-finally语句自行处理异常。
public class c11_3 { static int a,b,c; public static void main(String args[ ]) { try { a=10; b=0; try { c=a/b; System.out.println("a/b = " + c); } catch (IndexOutOfBoundsException E) { System.out.println("捕捉超出索引异常 ..."); } finally { System.out.println("嵌套内层的 finally区块 "); } } catch(ArithmeticException E) { System.out.println("捕捉数学运算异常: b="+b); } finally { System.out.println("嵌套外层的 finally区块 "); if(b == 0) System.out.println("程序执行发生异常 !"); else System.out.println("程序正常执行完毕 !"); } } }
例子
class China { final String nationalAnthem="义勇军进行曲"; Beijing beijing; China() { beijing=new Beijing(); } String getSong() { return nationalAnthem; } class Beijing //内部类 { String name="北京"; void speak() { System.out.println("我们是"+name+" 我们的国歌是:"+getSong()); } } } public class Example4_30 { public static void main(String args[]) { China china=new China(); china.beijing.speak(); } }
第8节课 内部类和异常处理

这是外部类
private String name;
private int age;
private class 学籍{ Calendar 入学时间; String 系别;
这是内部类,它的修饰符没有static ,可以和成员变量、成员方法一样
private void 输入系别(String xb){ 系别=xb;
第八节课 内部类和异常处理
学习目标
了解内部类有哪几种类型 了解内部类和外部类的关系 能看懂有匿名内部类的程序
第八节课 内部类和异常处理
内部类
定义在类中的类就称为内部类,也称为成员类 分类
非静态成员内部类 静态成员内部类 局部内部类 匿名内部类
特点
内部类可以访问外部类的成员,包括private成员 内部类的成员只有在内部类的范围内是可知的,不能被外部类使
public interface 马戏团动物 { void 会表演(); void 动物名();
}
1、在一个包中新建一个接口,名为 马戏团动物,新建一个类,名为马戏 团 2、接口代码如上图所示 3、马戏团类代码如图所示 4、在“马戏团”类中有一个方法叫 “指派动物”,它需要“马戏团动物” 对象, 由于没有事先设计任何子类继承“马 戏团动物”类,因此在调用该方法时, 我们就用设计匿名内部类的方法临时 设计一个没名的子类
public static void main(String[] args) { int i = 1; while (i <= 5) { try { System.out.print("请输入第" + i + "个数 "); Scanner sn = new Scanner(System.in); int n = sn.nextInt(); System.out.println("你输入的是:" + n); i++; } catch (Exception e) { System.out.println("你输入的不是数字"); } }
内部类实验报告

一、实验目的1. 理解内部类的概念及其在Java编程中的应用。
2. 掌握内部类的定义、使用方法和特点。
3. 通过实例分析,加深对内部类的理解。
二、实验环境1. 操作系统:Windows 102. 开发工具:Eclipse IDE3. 编程语言:Java三、实验内容1. 内部类的定义及特点2. 成员内部类3. 静态内部类4. 局部内部类5. 匿名内部类四、实验步骤1. 创建一个名为“OuterClass”的类,作为外部类。
2. 在“OuterClass”中定义一个成员内部类“InnerClass”。
3. 在“OuterClass”中定义一个静态内部类“StaticInnerClass”。
4. 在“OuterClass”中定义一个局部内部类“LocalInnerClass”。
5. 创建一个匿名内部类的实例,并演示其使用。
五、实验代码```java// 1. 创建外部类OuterClasspublic class OuterClass {// 2. 成员内部类InnerClasspublic class InnerClass {public void display() {System.out.println("这是成员内部类InnerClass的方法");}}// 3. 静态内部类StaticInnerClasspublic static class StaticInnerClass {public void display() {System.out.println("这是静态内部类StaticInnerClass的方法");}}// 4. 局部内部类LocalInnerClasspublic void outerMethod() {class LocalInnerClass {public void display() {System.out.println("这是局部内部类LocalInnerClass的方法");}}LocalInnerClass localInner = new LocalInnerClass();localInner.display();}// 5. 匿名内部类public void anonymousInnerClass() {Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("这是匿名内部类的方法");}};new Thread(runnable).start();}public static void main(String[] args) {OuterClass outer = new OuterClass();OuterClass.InnerClass inner = outer.new InnerClass(); InnerClass.display();StaticInnerClass staticInner = new StaticInnerClass(); staticInner.display();outer.outerMethod();outer.anonymousInnerClass();}}```六、实验结果与分析1. 成员内部类:通过定义在类中的内部类,可以访问外部类的成员变量和方法。
第六章 内部类与异常类

RuntimeException类 RuntimeException子类
CheckedException类 CheckedException子类
异常类的继承结构
异常类的继承关系
Java中所有的异常类都继承自 ng.Throwable类。Throwable类有两个 直接子类:
try-catch-finally结构
无异常
try 执行catch
有异常
执行finally
try-catch-finally结构
例子
public class Example4_33 { public static void main(String args[ ]) { int n=0,m=0,t=555; try{ m=Integer.parseInt("8888"); n=Integer.parseInt(“abc789”); t=9999; } catch(NumberFormatException e) { System.out.println("发生异常:"+e.getMessage()); e.printStackTrace(); n=123; } System.out.println("n="+n+",m="+m+",t="+t); } }
嵌套try-catch-finally语句
Java语言的try-catch-finally语句可以嵌套,即
在try块中可以包含另外的try-catch-finally语句。
【示例程序c11_3.java】 使用嵌套的try-catch-finally语句自行处理异常。
java实验报告 接口、泛型、枚举、内部类与异常

实验报告课程名称: Java程序设计成绩评定:实验项目名称:接口、泛型、枚举、内部类与异常指导教师:学生姓名:学号:专业班级:实验项目类型:基础实验地点:实验时间:一、实验目的与要求:1、理解接口的定义与实现;2、知道泛型、枚举型与内部类的基本应用;3、掌握常用异常的抛出与捕获及处理.二、实验环境:(硬件环境、软件环境)1.硬件环境:奔ⅣPC。
2.软件环境:Windows XP 操作系统,JDK6.0。
三、实验内容:(原理、操作步骤、程序代码等)任务:1、按照要求完成下述接口及实现类的程序1)定义名称为PCI()的接口,包括启动的方法start和关闭的方法stop;2)定义名称为NetworkCard 的类表示网卡,实现PCI接口,并且其在实现start方法时输出“sending data……”,在实现stop方法时输出“network stop.”3)定义名称为SoundCard 的类表示声卡,实现PCI接口;并且其在实现start方法时输出“dudu……”,在实现stop方法时输出“sound stop.”4)定义名称为MainBoard 的类表示主板,包含方法public void usePCICard(PCIp),在方法体内通过p来启动和关闭组件;5)定义一个包含main方法的Test类,在main方法内创建一个MainBoard 对象用mb来引用,创建一个NetworkCard对象用nc来引用,创建一个SoundCard对象用sc来引用,分别通过mb来使用usePCICard(PCI p)启动声卡和网卡。
2、泛型类程序的调试调试教材P165的程序8-2,写出程序运行结果,理解泛型类的工作机理及应用。
3、调试运行内部类程序:在类内部再定义另外一个类,这个另外定义的类就叫内部类。
调试教材P171-172程序8-3,写出程序运行结果,理解内部类的定义方法与应用。
4、异常抛出与捕获编程与调试先调试教材P182、183中的程序9-2和9-3,写出调试结果。
第5章 内部类与异常类

public class Example{ public static void main(String args[]) { RedCowFarm farm = new RedCowFarm("红牛农 场"); farm.showCowMess(); farm.cow.speak(); //RedCowFarm.RedCow redCow = new RedCowFarm.RedCow(180,119,6000);//如果将内部类 定义为static,那么就可以用外部类名直接访问内部类的 构造方法。 //redCow.speak(); //如果将内部类定义为static,那 么声明的内部类的对象也可以直接访问内部类的方法。 } }
interface SpeakHello { void speak(); }
public class Example { public static void main(String args[]) { HelloMachine machine = new HelloMachine(); machine.turnOn( new SpeakHello(){ public void speak() {//实现接口中的方法 System.out.println("hello,you are welcome!"); } } ); machine.turnOn( new SpeakHello(){ public void speak() {//实现接口中的方法 System.out.println("你好,欢迎光临!"); } } ); } }
throws
• 在可能出现异常的方法上声明抛出可能出现异常的类型: – 声明的时候尽可能声明具体的异常,方便更好的处理. • 当前方法不知道如何处理这种异常,可将该异常交给上一级调用者来处理(非 RuntimeException类型的异常)。 • 方法一旦使用throws声明抛出方法内可能出现的异常类型, 该方法就可以不 再过问该异常了; • 一个方法调用另一个使用throws声明抛出的方法,自己要么try...catch , 要么也throws;
5.内部类和异常类

String s1=“Hello World!”; String s2=“Hello World!”; 此时:s1==s2
0xAb28 0xAb28
Hello World!
s2
思考:如果按照下式定义,s1 和 s2还相等吗? String s1=new String(“Hello World!”); String s2=new String(“Hello World!”);
Java技术及其应用
class 动物类{} class 骡子类{ class 马类 extends 动物类{ void 奔跑(){System.out.println("我能奔跑");} } class 驴类 extends 动物类{ void 拉磨(){System.out.println("我能拉磨");} } 马类 马; 1、接口可以实现简单的多重继承功能 驴类 驴; 骡子类(){ 2、一个外嵌类,拥有多个内部类, 马=new 马类(); 驴=new 驴类(); 可理解为多重继承的一种变通形式 } 注意:原理上没有关系 void 奔跑(){ 马.奔跑(); } void 拉磨(){ 驴.拉磨(); } } class Example{ public static void main(String args[]) { 骡子类 骡子=new 骡子类(); 骡子.奔跑(); Java技术及其应用 骡子.拉磨();
小结
内部类可直接调用外嵌类中的属性和方法; 外嵌类必须通过内部类的对象调用其属性和方法。
Java技术及其应用
字符串处理中几个问题
Java技术及其应用
关于字符串处理
Java提供String类,专门负责处理跟字符串相关 的操作。 String类在ng包内,是默认导入的。
实验题目

实验一 Java语言概述【实验目的】1.掌握开发Java应用程序的三个步骤:编写源文件、编译源文件和运行应用程序。
2.熟悉Java应用程序的基本结构,并能联合编译应用程序所需要的类。
文件保存要求:在D:盘新建文件夹“学号”,在“D:\ 学号”下新建文件夹“timu1”。
题目1的文件保存在“timu1”中,以下依次类推。
【题目1】1、实验要求:编写一个简单的Java应用程序,该程序在命令行窗口输出两行文字:“你好,很高兴学习Java”和“We are students”。
2、程序模板:请按模板要求,将【代码】替换为Java程序代码。
3、实验后的练习a.编译器怎样提示丢失大括号的错误。
b.编译器怎样提示语句丢失分号的错误。
c.编译器怎样提示将System写成system这一错误。
d.编译器怎样提示将String写成string这一错误。
【题目2】1、实验要求:编写3个源文件:、、,每个源文件只有一个类。
含有应用程序的主类(含有main方法),并使用了Teacher和Student类。
将3个源文件保存到同一目录,D:\timu2,然后编译。
2、程序模板:请按模板要求,将【代码】替换为Java程序代码。
3、实验后的练习a.将编译通过后,不断地修改源文件中的【代码2】。
比如,在命令行窗口输出“我是语文老师”或“我是数学老师”。
要求每次修改源文件后,单独编译,然后直接运行应用程序(不要再编译)。
b.如果需要编译某个目录下的全部Java源文件,如D:\1001目录,可以使用如下命令:D:\1001>javac *.java请练习上述命令。
【题目3】1、实验要求:课本第15页习题2、实验后的练习习题8.(4)实验四类与对象【实验目的】1.掌握使用类来封装对象的属性和行为。
2.掌握对象的组合以及参数传递。
3.掌握类变量与实例变量,以及类方法与实例方法的区别。
文件保存要求:在D:盘新建文件夹“shiyan04”,在“D:\ 20120shiyan04”下新建文件夹“timu1”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六内部类和异常类1.实验目的1、掌握内部类的常用方法2、掌握匿名类的常用方法3、掌握接异常类的常用方法2.实验内容1、根据附录里的源代码,按照注释要求,完成代码填空,使程序能够运行得出结果。
1)实验1 红牛农场package four;public class RedCowForm {String formName;RedCow cow;//【代码1】//用内部类RedCow声明对象cowRedCowForm(){}RedCowForm(String s){cow=new RedCow(150,112,5000);//【代码2】//创建cowformName=s;}public void showCowMess(){cow.speak();}class RedCow{String cowName="红牛";int height,weight,price;RedCow(int h,int w,int p){height=h;weight=w;price=p;}void speak(){System.out.println(cowName+",身高:"+height+"cm,体重:"+weight+"kg");System.out.println("生活在"+formName);}}}package four;public class MainClass {public static void main(String[] args) {RedCowForm form=new RedCowForm("红牛农场");form.showCowMess();}}2)实验2 检查危险品package four;public class Goods {boolean isDanger;String name;public boolean isDanger() {return isDanger;}public void setDanger(boolean boo) {isDanger = boo;}public String getName() {return name;}public void setName(String s) {name = s;}}package four;public class DangerException extends Exception{ String message;public DangerException(){message="危险品!";}public void toShow(){System.out.print(message+"");}}package four;public class Machine {Goods[] goods;public void checkBag(Goods goods) throws DangerException{ if(goods.isDanger){throw new DangerException();//【代码1】//用throw抛出一个DangerException的匿名类}}}package four;public class Check {public static void main(String[] args) {Machine machine=new Machine();String name[]={"苹果","炸药","西服","硫酸","手表","硫磺"};Goods [] goods= new Goods[name.length];//检查6件物品for(int i=0;i<name.length;i++){goods[i]=new Goods();if(i%2==0){goods[i].setDanger(false);goods[i].setName(name[i]);}else{goods[i].setDanger(true);goods[i].setName(name[i]);}}for(int i=0;i<goods.length;i++){try{machine.checkBag(goods[i]);System.out.println(goods[i].getName()+"检查通过");}catch(DangerException e){e.toShow();//【代码2】//e调用toShow()方法System.out.println(goods[i].getName()+"被禁止!");}}}}3)实验3 内部类的使用方法package four;public class Outer{private static int size;/** 内部类Inner的声明 */public class Inner{private int size;/** 方法doStuff() */public void doStuff(int size){size=size+3;//【代码1】 //存取局部变量size加3this.size=size+2;//【代码2】 //存取其内部类的成员变量size加2Outer.this.size=size+1;//【代码3】存取其外部类的成员变量size加1System.out.println(size+" "+this.size+" "+Outer.this.size);}}//内部类Inner结束/** 类Outer中定义的实例方法testInner()方法 */public void testInner(){Inner i=new Inner();i.doStuff(size);//调用Inner类中的doStuff方法}/** main()方法 */public static void main(String args[]){Outer o=new Outer();o.testInner();//调用Outer类中的testInner方法}}//类Outer结束4)实验4 匿名类的使用方法package four;interface Square{ double getSquare(int n);}interface Sqrt{ public double getSqrt(int x);}class A{ void p(Square square){System.out.println(square);//输出getSquare方法计算后的结果}void k(Sqrt sqrt){System.out.println(sqrt);//输出getSqrt方法计算后的结果}}public class Anonymity{ public static void main(String args[]){A a=new A();a.p(null);//实现Square接口,重写getSquare方法,返回n的平方Sqrt sqrt=new Sqrt(){public double getSqrt(int x) {return Math.sqrt(x);}};//重写getSqrt方法,返回x的开平方根,用静态Math.sqrt方法来运算 System.out.println("计算开平方:"+sqrt.getSqrt(5));}}5)实验5 异常类使用方法package four;class MyException extends Exception{String message;MyException(String str){message=str;//把参数的引用传给message成员变量}public String getMessage(){return message;//返回message成员变量}}abstract class C{abstract int f(int x,int y) throws MyException;}class B extends C{int f(int x,int y) throws MyException{if(x<100&&y<100)//判断x、y都不大于100{throw new MyException("乘数超过100");//抛出一个新建的MyException对象,MyException对象中构造方法传入的参数内容为:乘数超过100}return x*y;}}public class eClass{public static void main (String args[]){C a;a = new B();//设计a对象的B类上转型对象try{System.out.println(a.f(12,10));a.f(150,250);//使用f()方法时传入一个大于100的乘数}catch(MyException e){System.out.println("x、y都不大于100");//输出错误信息 }}}2、设计编写程序完成以下任务。
1)假如要从命令行获得两个整数,自定义两个异常类来描述可能发生的异常:ParameterNumberException(参数个数异常),ParameterFormateException (参数格式异常),设计一个类,在check(String args[])方法中通告这两个异常,在main方法中判断相应的情况下触发异常,然后捕获异常,对它们进行处理。
(知识点:异常处理机制)判断长度和类型不准,相应条件分支抛出对应的自定义异常即可2)编写一个异常类MyException,在编写一个类Student,该类有一个产生异常的方法public void speak(int m)throws MyException,要求参数m的值大于1000时,方法抛出一个MyException对象。
最后编写一个主类,在主类的main方法中用Student创建一个对象,让该对象调用speak方法。
3.实验步骤略4.评分标准1.A——内容功能完善,编程风格好,人机接口界面好;2.B——内容功能完善,编程风格良好,人机接口界面良好;3.C——完成必做内容;4.D——能完成必做内容;5.E——未按时完成必做内容,或者抄袭(雷同者全部为E).参照书上实验按模版要求,将【代码】替换为Java程序代码,编写好完整的程序文档,最后运行得到的相关文件,把实验所得文件一起打包上交。