灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3589回复:0

[系统教程]JAVA新手入门(10)

楼主#
更多 发布于:2012-09-08 08:08


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() //返回类的全部方法


喜欢0 评分0
游客

返回顶部