1面向对象编程基础(二)方法中的参数传递1.输入下面的类,完成下面的要求publicclassJLab121{staticfinalcharsuits[]={'H','S','D','C'};staticfinalStringranks[]={A,2,3,4,5,6,7,8,9,1,J,Q,K};staticCard[]cards=newCard[52];/***初始化扑克牌数组*/publicstaticvoidinit(){for(inti=;isuits.length;i++){for(intj=;jranks.length;j++){cards[i*ranks.length+j]=newCard(suits[i],ranks[j]);}}}publicstaticvoidswap1(Cardc1,Cardc2){Cardc=c1;c1=c2;c2=c;}publicstaticvoidswap1(inti,intj){Cardc=cards[i];cards[i]=cards[j];cards[j]=c;}publicstaticvoidswap2(Cardc1,Cardc2){chars=c1.suit;c1.suit=c2.suit;c2.suit=s;Stringr=c1.rank;c1.rank=c2.rank;c2.rank=r;}/***@paramargs*/publicstaticvoidmain(finalString[]args){init();//任取两张牌Cardc1=cards[1];Cardc2=cards[12];System.out.println(第11张牌是:+c1+\t第13张牌是:+c2);}}1)在main方法中,添加下面几行语句,写出并分析结果swap1(c1,c2);System.out.println(执行swap1(c1,c2)后);System.out.println(c1引用的牌是:+c1+\tc2引用的牌是:+c2);System.out.println(第11张牌是:+cards[10]+\t第13张牌是:+cards[12]);运行结果:第11张牌是:HJ第13张牌是:HK执行swap1(c1,c2)后c1引用的牌是:HJc2引用的牌是:HK第11张牌是:HJ第13张牌是:HK2分析结果:c1,c2分别为cards[10],cards[13],故输出:第11张牌是:HJ第13张牌是:HK执行swap(c1,c2)后c1,c2只是把值传递给形参,swap()中值的变化是形参在变化,与c1,c2无关Cards[10],card[13]也无发生变化,故输出:第11张牌是:HJ第13张牌是:HK2)在main方法中,去掉刚才添加的语句,添加下面几行语句,写出并分析结果swap1(10,12);System.out.println(执行swap1(10,12)后);System.out.println(c1引用的牌是:+c1+\tc2引用的牌是:+c2);System.out.println(第11张牌是:+cards[10]+\t第13张牌是:+cards[12]);运行结果:第11张牌是:HJ第13张牌是:HK执行swap1(10,12)后c1引用的牌是:HJc2引用的牌是:HK第11张牌是:HK第13张牌是:HJ分析结果:未交换时,输出第11张牌是:HJ第13张牌是:HK该程序为交换cards[i]中i=10,13的牌,cards[10]与cards[13]交换即HJ与HK交换,但c1,c2已初始化,且swap1(inti,intj)中c1,c2只负责i值传递,与其本身无关,结果为cards[10]=”HK”cards[13]=”HJ”3)在main方法中,去掉刚才添加的语句,添加下面几行语句,写出并分析结果swap2(c1,c2);System.out.println(执行swap2(c1,c2)后);System.out.println(c1引用的牌是:+c1+\tc2引用的牌是:+c2);System.out.println(第11张牌是:+cards[10]+\t第13张牌是:+cards[12]);运行结果:第11张牌是:HJ第13张牌是:HK执行swap2(c1,c2)后c1引用的牌是:HKc2引用的牌是:HJ第11张牌是:HK第13张牌是:HJ分析结果:未交换时,输出第11张牌是:HJ第13张牌是:HKswap2(c1,c2);c1和c2的rank和suit分别交换,此为c1,c2所引用的对象的属性的交换,则c1,c2引用的牌也变化:c1引用的牌是:HKc2引用的牌是:HJcards[10]和cards[12]中的属性也发生交换变化,故第11张牌是:HK第13张牌是:HJ实验十八:异常3实验要求和过程1.publicclassTestApp{publicstaticvoidmain(String[]args){try{inti=0;intj=1/i;Stringmyname=null;if(myname.length()2)System.out.print(“1”);}catch(NullPointerExceptione){System.out.print(“2”);}catch(Exceptione){System.out.print(“3”);}}}分析上述程序运行后的输出的结果和原因。输出结果:3因j为除式,除数不能为0,属于运行异常中的java.lang.ArithmeticException:/byzero,不属于myname.length()2和NullPointerException的情况,因此输出32.下面是一个名称为NegativeAmountException的自定义异常类,表示一个不正常的银行账目事件类。填充下面的语句,完成该类的编写。publicclassNegativeAmountExceptionextendsException{publicNegativeAmountException(Strings){super(s);}}classAccount{doublebalance;//构造函数,余额为0;publicAccount(){balance=0;}//构造函数,余额为n,如果初始余额小于0抛出异常publicAccount(doublen)throwsNegativeAmountException{if(n0){this.balance=n;}else{thrownewNegativeAmountException(余额异常);}}//查询余额方法,返回当前余额publicdoublegetBalance(){returnthis.balance;}//存款方法,存款数额amount;如果存款数目小于0抛出异常publicvoiddeposit(doubleamount)throwsNegativeAmountException{if(amount=0){balance=amount;}else{thrownewNegativeAmountException(存款出错);}}//取款方法,取款数额amount;如果取款数目小于0抛出异常publicvoidwithdraw(doubleamount)throwsNegativeAmountException{if(amount0){4thrownewNegativeAmountException(操作错误);}elseif(balanceamount){thrownewNegativeAmountException(取款出错);}else{balance-=amount;}}publicstaticvoidmain(String[]args)throwsNegativeAmountException{Accountzqq=newAccount();zqq.deposit(-10);}}运行结果:ExceptioninthreadmainNegativeAmountException:存款出错atAccount.deposit(Account.java:28)atAccount.main(Account.java:46)3.模仿上题中NegativeAmountException自定义异常的写法,根据下面要求写程序。1)自定义异常OnlyOneException与NoOprandException,并补充各自类的构造函数,参数用于保存异常发生时候的信息;2)添加main方法,从命令行参数读入两个数据,计算这两个数据的和并输出。3)如果参数的数目只要一个,抛出OnlyOneException异常并退出程序的执行;如果没有参数,抛出NoOprandException异常并退出程序的执行;publicclassOnlyOneExceptionextendsException{publicOnlyOneException(Strings){super(s);}}publicclassNoOprandExceptionextendsException{publicNoOprandException(Strings){super(s);}}importjava.util.Scanner;publicclassTest{publicstaticvoidmain(String[]args)throwsException{System.out.println(请输入两个数);Scannersc=newScanner(System.in);Stringab=sc.next();String[]arr=ab.split(,);if(arr.length2){if(arr.length==0){thrownewNoOprandException(未输入参数);}else{thrownewOnlyOneException(仅输入了一个参数);}}doublex=Double.parseDouble(arr[0]);doubley=Double.parseDouble(arr[1]);doublesum;sum=x+y;System.out.println(sum);}}4.为实验15(5),添加一个取款异常WithdrawException,请定义异常类WithdrawException,要求:1)异常对象记录取款发生时的帐户余额、取款额还有取款人。5publicclassWithdrawExceptionextendsException{doublebalance;doubleamount;Stringname;publicWithdrawException(doublebalance,doubleamount,Stringname){super();this.balance=balance;this.amount=amount;this.name=name;}@OverridepublicStringtoString(){returnWithdrawException[余额+balance+,取款=+amount+,姓名=+name+];}}2)覆盖继承于超类的方法getMessage(),按以下格式返回信息:取款人,账号余额,取款额,原因:透支。@OverridepublicStringgetMessage(){returnWithdrawException取款人=+name+,账户余额+balance+,取款额=+amount+]+原因:透支;}3)修改CashAccount的取款方法,当用户取款超出额度时,抛出异常。Account类中abstractvoidwithdraw(doubleamount)throwsBlockException,WithdrawException;publicclassCashAccountextendsAccou