1 public class Example8_1 { 2 public static void main(String args[]){ 3 RedCowForm form=new RedCowForm("红牛农场"); 4 form.showMess(); 5 } 6 } 7 8 class RedCowForm{//农场 9 String formName; 10 RedCow cow; //内部类声明对象 11 RedCowForm(){} 12 RedCowForm(String s){ 13 cow=new RedCow(150,112,5000); 14 formName=s; 15 } 16 public void showMess(){ 17 cow.speak(); 18 } 19 class RedCow{//内部类 20 String cowName="红牛"; 21 double height,weight,price; 22 RedCow(double i,double j,double k){ 23 height=i; 24 weight=j; 25 price=k; 26 } 27 public void speak(){ 28 System.out.println("偶是"+cowName+"身高:"+height+"cm,体重:"+weight+"kg,生活在"+formName);//formName是内部类调用外嵌套类的常量(变量也可以) 29 } 30 } 31 }
1 //用户程序中的一个对象需要调用方法:f(A a){},该方法的参数类型是A类,用户希望向该方法传递A的子类对象,但系统没有符合要求的子类,那么用户可以在编写代码时考虑匿名类 2 public class Example8_2 {//输出英文字母表和希腊字母表 3 public static void main(String args[]){ 4 showBoard board=new showBoard(); 5 board.showMess(new EnglishAlphabet());//使用子类输出英文字母表 6 System.out.println(""); 7 board.showMess(new inputAlphabet(){//定义内部类输出希腊字母表 8 public void input(){ 9 for(char i='α';i<='ω';i++){ 10 System.out.printf("%3c", i); 11 if(((int)i-(int)'α')%5==4)System.out.println(""); 12 } 13 } 14 } 15 ); 16 } 17 } 18 19 class showBoard{ 20 public void showMess(inputAlphabet show){ 21 show.input(); 22 } 23 } 24 abstract class inputAlphabet{//输出字母表抽象类 25 public abstract void input(); 26 } 27 28 class EnglishAlphabet extends inputAlphabet{//英文字母表子类 29 public void input(){ 30 for(int i=(int)'a';i<='z';i++){ 31 System.out.printf("%3c",i); 32 if(((int)i-(int)'a')%5==4)System.out.println(""); 33 } 34 } 35 }
1 //假设Computable是一个接口,java 允许直接用接口名和一个类体创建一个匿名对象,该类体被认为是实现了该接口的类去掉声明后的类体,称作匿名类,new Computable(){实现了接口匿名类的类体} 2 public class Example8_3 { 3 public static void main(String args[]){ 4 HelloMachine machine=new HelloMachine(); 5 machine.turnOn(new SpeakHello(){//实现了SpeakHello接口的类去掉声明后的类体 6 public void speak(){ 7 System.out.println("Hello,you are welcom!"); 8 } 9 }); 10 machine.turnOn(new SpeakHello(){//同上 11 public void speak(){ 12 System.out.println("你好,欢迎光临!"); 13 } 14 }); 15 } 16 } 17 interface SpeakHello{//接口 18 void speak(); 19 } 20 class HelloMachine{ 21 public void turnOn(SpeakHello hello){ 22 hello.speak(); 23 } 24 }
1 //try-catch语句 2 public class Example8_4 { 3 public static void main(String args[]){ 4 CargoBoard ship=new CargoBoard(); 5 ship.setMaxContent(1000); 6 int m=600; 7 try{ 8 ship.loading(m); 9 m=400; 10 ship.loading(m); 11 m=300; 12 ship.loading(m); 13 m=555; 14 ship.loading(m); 15 } 16 catch(DangerException e){ 17 System.out.println(e.warnMess()); 18 System.out.println("无法再装载重量为"+m+"的货物"); 19 } 20 finally{ 21 System.out.println("货船正点起航"); 22 } 23 System.out.println("最终装了"+(ship.realContent-m)+"吨货物"); 24 } 25 } 26 class DangerException extends Exception{ 27 final String message="超重"; 28 public String warnMess(){ 29 return message; 30 } 31 } 32 class CargoBoard{ 33 int realContent;//装载的重量 34 int maxContent;//最大装载量 35 public void setMaxContent(int c){ 36 maxContent=c; 37 } 38 public void loading(int m)throws DangerException{ 39 realContent+=m; 40 if(realContent>maxContent)throw new DangerException(); 41 System.out.println("目前装载了"+realContent+"吨货物"); 42 } 43 }
1 public class Example8_5 { 2 public static void main(String args[]){ 3 Bank bank=new Bank(); 4 try{ 5 bank.income(200,-100); 6 bank.income(300,-100); 7 bank.income(400,-100); 8 System.out.println("银行目前有"+bank.money); 9 bank.income(200,100);//发生BankException异常,转去执行catch 10 bank.income(9999,-100);//没有机会被执行 11 } 12 catch(BankException e){ 13 System.out.println(e.warnMess()); 14 } 15 System.out.println("目前银行有"+bank.money+"元"); 16 } 17 } 18 19 class BankException extends Exception{ 20 String message; 21 public BankException(int m,int n){ 22 message="入账资金"+m+"是负数或支出"+n+"是正数,不符合要求"; 23 } 24 public String warnMess(){ 25 return message; 26 } 27 } 28 class Bank{ 29 int money; 30 public void income(int in,int out)throws BankException{ 31 if(in<0||out>0)throw new BankException(in,out); 32 int netIncome=in+out; 33 System.out.println("本次计算的纯收入:"+netIncome); 34 money+=netIncome; 35 } 36 public int getMoney(){ 37 return money; 38 } 39 }
1 //断言assert 2 //表达式 :assert booleanException:messageException;如果booleanException为false,程序停止运行并输出messageException 3 //当使用java解释器直接运行应用程序时,默认为关闭断言语句,在调试程序时可以使用-ea(enableassertions),如:java -ea Example8_6 4 //用Eclipse运行则用下面方法启动断言语句:Run as——>Run configurations——>Agumenets页签——>VM arguments文本框中加上终中断开启(-ea或-enableassertions)。 5 import java.util.Scanner; 6 public class Example8_6 { 7 public static void main(String args[]){ 8 int[] score={-120,98,89,120,99}; 9 int sum=0; 10 for(int number:score){ 11 assert number>0:"负数不能是成绩"; 12 sum+=number; 13 } 14 System.out.println("总成绩"+sum); 15 } 16 }