JAVA新手入门(10)
4138 点击·0 回帖
![]() | ![]() | |
![]() | b)和接口相关的匿名类 假设Computable是一个接口,那么,java允许直接调用接口名和一个类体创建一个匿名对象,此类体被认为是实现Computable接口的类去掉类声明后的类体,称为匿名类.下面这个例子就是用实现了Computable接口的类(匿名类)创建对象: 复制代码 interface Cubic { double getCubic(int n); } interface Sqrt { public double getSqrt(int x); } class A { void f(Cubic cubic) { double result=cubic.getCubic(3); //执行匿名类体中实现getCubic()方法 System.out.println(result); } } public class E { public static void main(String args[]) { A a=new A(); a.f(new Cubic() //使用匿名类创建对象,将该对象传递给方法f的参数cubic { public double getCubic(int n) { return n*n*n; } } ); Sqrt ss=new Sqrt() //使用匿名类创建对象,接口ss存放该对象的 { public double getSqrt(int x)//匿名类是实现Sqrt接口的方法,所以必须要实现getSqrt方法 { return Math.sqrt(x); } }; double m=ss.getSqrt(5); //接口回调类实现的方法 System.out.println(m); } } 3.异常类 所谓异常就是程序运行时可能出现的一些错误,如试图打开一个根本不存在的文件等,异常处理将会改变程序的控制流程,让程序有机会对错误作出处理. 当程序运行出现异常时,java运行环境就用异常类Exception的相应子类创建一个异常对象,并等待处理,例如读取下一个不存在的文件时,运行环境就用异常类IOException创建一个对象.异常对象可以调用如下方法得到或输出有关异常的信息: public String getMessage(),public void printStackTrace(),public String toString() java使用try-catch语句来处理异常,将可能出现的异常操作放在try-catch语句的try的部分.当try部分中的某个语句发生异常后,try部分将立刻结束执行,而转向执行相应的catch部分,所以程序可以将发生异常后的处理放在catch部分.try-catch语句可以由几个catch组成,分别处理发生的相应异常. try-catch语句格式如下: try { 包含可能发生异常的语句 } catch(ExceptionSubClass1 e) { } catch(ExceptionSubClass2 e) { } ... 各个catch参数中的异常类都是Exception的某个子类,标明try部分可能发生的异常,这些子类之间不能由父子关系,否则保留一个含有父类参数的catch即可. 通过例子掌握try-catch语句的用法,如: 复制代码 public class E { public static void main(String args[ ]) { int n=0,m=0,t=555; try{ m=Integer.parseInt("8888");//Integer.parseInt是可以将数字格式的字符串转换成int型数据 n=Integer.parseInt("abc789");//"abc"不是属于数字格式的字符串,所以通过Integer.parseInt转换时会出现异常 t=9999; //发生异常后就立刻进入catch部分,所以t=9999没有被执行 } catch(NumberFormatException e) { System.out.println("发生异常:"+e.getMessage());//得到发生异常的部分 e.printStackTrace(); n=123; } System.out.println("n="+n+",m="+m+",t="+t); } }//结果应该是n=123,m=8888,t=555 在程序中也可以扩展Exception类定义自己的异常类,然后规定哪些方法产生这样的异常.一个方法在声明时可以使用throws关键字声明要产生的若干异常,并在该方法的方法体中具体给出产生异常类的操作,即用相应的异常类创建对象,并使用throw关键字抛出该异常类,导致该方法结束执行.程序必须在try-catch语句中调用能发生异常的方法,其中catch的作用就是捕获throw方法抛出的异常现象. 注意:throw时java的关键字,该关键字的作用就是抛出异常.throw和throws是两个不同的关键字. 下面的例子中,Computer类中有一个计算最大公约数的方法,如果向该方法传递负整数,方法就抛出定义的异常. 复制代码 class NopositiveException extends Exception//子定义的异常类 { String message; NopositiveException(int m,int n) { message="数字"+m+"或"+n+"不是正整数"; } public String toString() { return message; } } class Computer { public int getMaxCommonDivisor(int m,int n) throws NopositiveException//声明NopositiveException自定义的异常类 { if(n<=0||m<=0)//不满足条件时候 { NopositiveException exception=new NopositiveException(m,n);//创建自定义异常类的对象,用来抛出异常 throw exception; //抛出异常,结束方法的执行 } if(m<n) { int temp=0; temp=m; m=n; n=temp; } int r=m%n; while(r!=0) { m=n; n=r; r=m%n; } return n; } } public class E { public static void main(String args[]) { int m=24,n=36,result=0; Computer a=new Computer(); try { result=a.getMaxCommonDivisor(m,n); System.out.println(m+"和"+n+"的最大公约数 "+result); m=-12; n=22; result=a.getMaxCommonDivisor(m,n); System.out.println(m+"和"+n+"的最大公约数 "+result); } catch(NopositiveException e) { System.out.println(e.toString()); } } } 4. Class 类 Class 是java.lang包中的类,该类的实例用来封装对象运行时的状态.当一个类被加载且创建对象时,和改类相关的一个类型为Class的对象就会自动创建.Class类本身不提供构造方法,因此,不能用new运算符和构造方法创建一个Class对象.任何对象调用getClass()方法都可以获取和该对象相关的一个Class对象,这个Class对象调用如下的方法可以获取创建对象的类的有关信息,比如类的名字,类中的方法名称,成员变量的名称等. String getName() //返回类的名字 Constructor[] getDeclaredConstructors() //返回类的全部构造方法 Field[] getDeclaredFields() //返回类的全部成员变量 Method[] getDeclaredMethods() //返回类的全部方法 | |
![]() | ![]() |