zoukankan      html  css  js  c++  java
  • 内部类与异常类 Major^

     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、内部类
     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 }
    2、匿名类(子类)—使用匿名类输出希腊字母
     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     }
    3、和接口有关的匿名类
     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 }
    4、finally子语句
     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 }
    5、自定义异常类
     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 }
    6、断言(assert)
    基础学习
  • 相关阅读:
    第十一周课程总结
    第十周学习总结
    第j九周学习总结暨第七周实验报告
    第八周学习总结暨第六周实验报告
    第七周学习总结暨第五周实验报告
    第六周学习总结暨第四周实验报告
    学习总结
    第十四周课程总结&实验报告
    第十三周课程总结
    第十三周课程总结 记事本
  • 原文地址:https://www.cnblogs.com/qinmeizhen/p/6532696.html
Copyright © 2011-2022 走看看