Java:内部类和异常类

一、内部类

  1. Java支持在一个类中声明另一个类,这样的类叫内部类
  2. 外嵌类的成员变量在内部类仍然有效
  3. 内部类的方法也可以调用外嵌类中的方法
  4. 内部类的类体中不可以声明类变量和类方法
  5. 外嵌类的类体可以用内部类来声明对象,作为外嵌类成员
  6. 内部类的只能有外嵌类使用,其他类不可以用某个内部类声明对象

RedCowForm.java

public class RedCowForm{
String formName;
RedCow cow; //声明内部类对象
RedCowForm()
{}
RedCowForm(String s){
cow= new RedCow(150,112,5000);
formName=s;
public void showComMess(){
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, 生活在"+formName);
}
}
}

main.java

public class Example{
public static main(String arg[])
{RedCowForm form =new RedCowForm("红牛农场")}
form.showCowMess();
}

二、匿名类

  1. Java允许直接用一个类的子类的类体创建子类对象,也就是说创建子类对象的时候,除了使用父类的构造方法外还有类体,此类体叫匿名类;
  2. 匿名类是一个子类,当没有显示声明,所以不能用匿名类声明对象,但却可以直接用匿名类创建一个对象;
  3. 匿名类可以继承父类的方法,也可以重写父类的方法;
  4. 匿名类一定是内部类,匿名类类体不能声明static成员变量或方法
  5. 匿名类的创建需要用父类的构造方法,且类体写在后面
  6. 匿名类创建对象没有经过类声明步骤,但匿名类对象的引用可以传递给一个匹配的参数,匿名类的常用方式是向方法的参数传值
abstract class A{
public abstract void put();
}

class B extends A
{ 
public void put()
{System.out.println("这是电视");}
} 


class C
{ 
void showMess(A show)
{show.put();}
}

public class Example{
public static void main(String arg[]){
C board=new  C();
board.showMess(new B());//这里用了接口回调
board.showMess(new A()//这是匿名类
                     public void put()
                     {System.out.println("这是冰箱");}
);
}

这里没有一个A 的子类专门输出“这是冰箱”,所以可以用匿名类对象引用传递参数

与接口有关的匿名类

  1. Java允许直接用接口名和一个类体创建一个匿名对象,该类被认为实现了该接口且去掉类声明的只有类体的类
已知 Computable 是接口

void show(Computable a) 该函数要求接口类型对象作为参数
{}

那么可以创建匿名类
void show(new Computacle(){ 实现接口方法 + 自身扩展});
{}

三、异常类

  1. Java 异常出现在方法调用过程中,即运行过程中出现异常抛出异常对象,终止当前方法执行;
  2. 异常对象可以调用以下方法输出异常的信息:
public String getMessage();
public void printStackTrace();
public String toString();
  1. try-catch 语句允许多个catch语句
  2. 各个catch中的参数的异常类都是Exception的某个子类
  3. 这些类不能有父子关系,否则保留一个含有父类的参数的catch就行
  4. java.lang 包中的Integer类调用其类方法:
    public static int parsenInt(String s) 可以将字符串s 中的数字转化为真正的数字;
public class Example{
public static void main(String arg[]){
int n=0,m=0,t=1000;
try{m=Integer.parseInt("8888");
    n=Integer.parseInt("ab89");
    t=777;
   }
catch(NumberFormatException e){
System,out,println("发生异常:"+e.getMessage());
}
System.out.println("n="+n+",m="+m+",t"+t);
}

finally 语句

  1. 无论在try部分是否发生异常,finally语句都会被执行
  2. 当 try-catch 语句中执行了return 语句,那么finally 子语句仍然会被执行
  3. try-catch语句执行了程序退出代码,即执行System.exit(0);则不执行finally语句

断言

  1. 断言是当该程序加入断言语句時,那么程序出现错误时,在断言语句出程序立即体质执行
  2. assert booleanExpression
  3. assert booleanExpression
  4. assert booleanExpression : messageExpression
  5. booleanExpression 取值为ture 时,程序出现异常,当不会停止执行,当false 时立即停止执行;当出现异常时输出messageExpression 表达式的值;
import java.util.Scanner;
public static void main(String args[]){
int p[] score={-120,98,89,120,99};
int sum=0;
for(int number:score){
   assert number>0:"负数不能是成绩";
   sum=sum+number;
   }
   System.out.println("总成绩:"+sum);
   }
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值