1. 程式人生 > >內部類與異常類例題

內部類與異常類例題

內部類

public class RedCowForm{
	static String formName;
	RedCow cow;//內部類宣告物件
	public RedCowForm() {
	}
	RedCowForm(String s){
		cow=new RedCow(150,112,5000);
		formName=s;
	}
	public void showCowMess() {
		cow.speak();
	}
	class RedCow{  //內部類的宣告
		String cowName="紅牛";
		int height,weight,price;
		public RedCow(int h,int w,int p) {
			height=h;
			weight=w;
			price=p;
		}
		void speak(){
			System.out.println("偶是"+cowName+"身高:"+height+"cm 體重:"+weight+"kg,生活在"+formName);
		}
	}//內部類結束
}// 外嵌類結束
public class exma {
	public static void main(String[] args) {
		RedCowForm form=new RedCowForm("紅牛農場");
		form.showCowMess();
		form.cow.speak();

	}

}

匿名類

 abstract class OutputAlphabet {
   public abstract void output();
}
public class OutputEnglish extends OutputAlphabet {  //輸出英文字母的子類
    public void output(){
    	for(char c='a';c<='z';c++){
    		System.out.printf("%3c",c);
    	}
    }
}
public class ShowBoard {
     void showMess(OutputAlphabet show){  //引數show是OutputAlphabet型別的物件
    	 show.output();
     }
}
public class Exam {

	public static void main(String[] args) {
		ShowBoard borad=new ShowBoard();
		borad.showMess(new OutputEnglish());//向引數傳遞OutputAlphabet的子類OutputEnglish物件
		borad.showMess(new OutputAlphabet() {
			public void output() {  //引數傳遞OutputAlphabet的匿名子類物件
				for(char c='a';c<='z';c++){
		    		System.out.printf("%3c",c);
				}
			}
		}
		);
	}
}


和介面有關的匿名類

interface SpeakHello{
	void speak();
}
class HelloMachine{
	public void turnOn(SpeakHello hello) {
		hello.speak();
	}
}
public class Exam {
	public static void main(String[] args) {
		HelloMachine machine=new HelloMachine();
		machine.turnOn(new SpeakHello() { //和介面SpeakHello有關的匿名類
			public void speak() {
				System.out.println("hello,you are welcome!");
			}
		}
		);
		machine.turnOn(new SpeakHello() {   //和介面SpeakHello有關的匿名類
			public void speak() {
				System.out.println("你好,歡迎光臨");
			}
		}
		);
	}
}


try-catch語句

import java.util.jar.JarException;
public class exam {

	public static void main(String[] args) {
		int n=0,m=0,t=1000;
		try {
			m=Integer.parseInt("8888");
			n=Integer.parseInt("ab89");//傳送異常,轉向catch
			t=7777;//t沒有機會被賦值
		} catch (NumberFormatException e) {
			System.out.println("發生異常:"+e.getMessage());
		}
           System.out.println("n="+n+",m="+m+",t="+t);
        try {
			System.out.println("故意丟擲I/O異常!");
			throw new java.io.IOException("我是故意的");  //故意丟擲異常
			//System.out.println("這個輸出語句肯定沒有機會執行,必須註釋,否則編譯出錯");
		} catch(java.io.IOException e) {
			System.out.println("發生異常:"+e.getMessage());
		}
	}
}

public class BankException extends Exception {
 String message;
  public BankException(int m,int n) {
       message="入賬資金"+m+"是負數或支出"+n+"是正數,不符合系統要求";
 }
 public String warnMess() {
	return message;
}
}
public class Bank {
            private int money;
            public void income(int in,int out) throws BankException {
				if(in<=0||out>=0||in+out<=0){
					throw new BankException(in, out); //方法丟擲異常,導致方法結束
				}
				int netIncome=in+out;
				System.out.printf("本次計算出得純收入是:%d\n",netIncome);
				money=money+netIncome;
			}
            public int getMoney() {
				return money;
			}
}
public class Exam {
	public static void main(String[] args) {
		Bank bank=new Bank();
		try {
			bank.income(200, -100);
			bank.income(300, -100);
			bank.income(400, -100);
			System.out.printf("銀行目前有%d元\n",bank.getMoney());
			bank.income(200,100);
			bank.income(99999,-100);
		} 
		catch (BankException e) {
			System.out.println("計算收益得過程出現如下問題");
			System.out.println(e.warnMess());
		}
         System.out.printf("銀行目前有%d元\n",bank.getMoney());
	}

}
斷言
import java.util.*;
public class exam {
	public static void main(String[] args) {
	    int [] score={-120,98,89,120,99};
	    int sum=0;
	    for(int number:score){
	    	assert number>=0:"負數不能是成績";
	    	sum=sum+number;
	    }
	    System.out.println("總成績:"+sum);
	}
}

應用舉例

public class DangerException extends Exception {
   final String message="超重";
   public String warnMess() {
	return message;
}
}
public class CargoBoat {
     int realContent;  //裝載的重量
     int maxContent; //最大裝載量
     public void setMaxContent(int c) {
		maxContent=c;
	}
     public void loading(int m)throws DangerException {
		realContent+=m;
		if(realContent>maxContent){
			realContent-=m;
			throw new DangerException();
		}
		System.out.println("目前裝載了"+realContent+"噸貨物");
	}
}
public class Exam {
	public static void main(String[] args) {
		CargoBoat ship=new CargoBoat();
		ship.setMaxContent(1000);
		int m=600;
		try {
			ship.loading(m);
			m=400;
			ship.loading(m);
			m=347;
			ship.loading(m);
			m=555;
			ship.loading(m);
		} 
		catch (DangerException e) {
			System.out.println(e.warnMess());
			System.out.println("無法再裝載重量是"+m+"噸的集裝箱");
		}
          finally{
        	  System.out.println("貨物將正點啟航");
          }
	}

}

習題

class Cry{
	public void cry() {
		System.out.println("大家好");
	}
}
public class E {
	public static void main(String[] args) {
          Cry hello=new Cry(){
        	  public void cry(){
        		  System.out.println("大家好,祝工作順利!");
        	  }
          };
          hello.cry();
	}

}

interface Com{
	public void speak();
}
public class E {

	public static void main(String[] args) {
		Com p=new Com(){
			public void speak(){
				System.out.println("p是介面變數");
			}
		};
   p.speak();
	}

}

import java.io.IOException;

import org.omg.CORBA.PUBLIC_MEMBER;
public class E {
	public static void main(String[] args) {
		try{
			methodA();
		}
         catch(IOException e){
        	 System.out.println("你好");
        	 return ;
         }
		finally{
			System.out.println(" fine thanks");
		}
	}
	public static Void methodA() throws IOException{
		throw new IOException();
	}
}

class RedCowForm{
	static class RedCow{  //靜態內部類是外嵌類中的一種靜態資料型別
		void speak(){
			System.out.println("我是紅牛");
		}
	}
}
public class E {
	public static void main(String[] args) {
		RedCowForm.RedCow redCow= new RedCowForm.RedCow();//如果RedCow不是靜態類此程式碼非法
		redCow.speak();
	}

}