亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        如何處理Java程序中的錯(cuò)誤

        2010-08-15 00:52:09高榮芳
        關(guān)鍵詞:定義程序計(jì)算機(jī)

        高榮芳

        (波鴻大學(xué)數(shù)學(xué)系,德國(guó) 波鴻 44801)

        【理工園地】

        如何處理Java程序中的錯(cuò)誤

        高榮芳

        (波鴻大學(xué)數(shù)學(xué)系,德國(guó) 波鴻 44801)

        編寫Java程序時(shí),不可避免的會(huì)出現(xiàn)這樣或那樣的錯(cuò)誤。本文介紹處理和修改Java程序的方法和技巧,并著重對(duì)“try-程序段”和“catch-程序段”的應(yīng)用作了詳細(xì)的闡述。

        Java;Java程序;try-程序段;catch-程序段

        Java程序的編寫,對(duì)于學(xué)計(jì)算機(jī)語(yǔ)言的專業(yè)人員而言并不是一件很難的事情,但是在編寫程序的過程中,經(jīng)常會(huì)出現(xiàn)這樣或那樣的錯(cuò)誤,譬如:第一類情況,程序編寫雖然正確,但計(jì)算機(jī)并不執(zhí)行命令。第二類情況,程序在執(zhí)行的過程中自行中斷或不出結(jié)果。第三類情況,程序在執(zhí)行過程中輸出錯(cuò)誤的結(jié)果等。所以,尋找一個(gè)程序的錯(cuò)誤所在處和錯(cuò)誤的原因所在以及如何處理、解決程序中的問題就顯得比較重要,但這并不是件容易的事情,尤其在規(guī)模較大、篇幅較長(zhǎng)的大型程序中。

        下面主要介紹怎樣尋找一個(gè)程序中的錯(cuò)誤以及消掉錯(cuò)誤的基本方法。

        一、錯(cuò)誤的基本類型

        總體上來說,在一個(gè)Java程序的編寫過程中,所在可能會(huì)出現(xiàn)的問題大致可分為兩大類,即:Exception和Error。

        Exception,是一種普通的錯(cuò)誤,它是可以被程序檢控的;Error是一異常的錯(cuò)誤,它是不可以被程序檢控的,也是不應(yīng)該出現(xiàn)的。下面依據(jù)具體例題詳細(xì)解釋之。

        例1

        class Ex01{

        public static void main(String[]args){

        int tastenCode;

        tastenCode=System.in.read();

        System.out.println(tastenCode);

        }

        }

        雖然這個(gè)程序看起來是完全正確的,但是計(jì)算機(jī)在編輯的過程中給出了錯(cuò)誤的聲明:

        Ex01.java:4:unreported exception java.io.IOException;must be

        caught or declared to be thrown

        tastenCode=System.in.read();

        導(dǎo)致這個(gè)程序錯(cuò)誤的原因在于方法read的聲明,也就是說,一個(gè)錯(cuò)誤可能直接或間接的在方法read內(nèi)出現(xiàn)。這是一種在輸入操作或輸出操作時(shí)出現(xiàn)的錯(cuò)誤,例如:由于輸入了錯(cuò)誤的數(shù)據(jù),或者是意想不到的問題發(fā)生,象例1,等等。不過這些問題都是可以被檢控的。

        例2:

        class Ex02{

        public static void main(String[]args){

        String s1="24",s2="25",s3="x";

        //(1)

        int number1,number 2,number 3;

        number1=Integer.parseInt(s1);

        //(2)

        number2=Integer.parseInt(s2);

        number3=Integer.parseInt(s3);

        }

        }

        仔細(xì)觀察一下我們的程序:

        在程序里的(1)處我們定義了三個(gè)符號(hào)串,他們的類型(Typ)是數(shù)字串(String),可是在它們中只有兩個(gè)定義的是數(shù)字串。

        再看程序里的(2)處,在符號(hào)串中S1,S2將被輸出,可是成功的前提是:所有符號(hào)串都必須由數(shù)字組成,而不是象在S3中定義了一個(gè)變量。這也就是導(dǎo)致程序錯(cuò)誤的原因。

        例3:

        //file:account.java

        public class Account{

        private int accountnumber;

        private double balance;

        public Account(){}

        public Account(int accountnumber){

        this.accountnumber=accountnumber;

        }

        public Account(int accountnumber,double balance)

        throws AccountException{

        if(blance<0)

        throws new AccountException("Negative Blance:"+blance);

        this.accountnumber=accountnumber;

        this.balance=blance;

        }

        public int getAccountnumber(){

        限幅機(jī)構(gòu)主支撐架擬選取的材料為L(zhǎng)W-2改性聚酯亞胺,該材料的抗拉強(qiáng)度為145 MPa,屈服強(qiáng)度為89 MPa。由圖8可知,在該仿真負(fù)載下,主支撐架的最大位移量為0.47 μm,最大應(yīng)力為2.44 MPa,即在300 N橫向負(fù)載的作用下,限幅機(jī)構(gòu)主支撐架具有較大的靜力裕度,滿足強(qiáng)度和剛度要求。

        return accountnumber;

        }

        public void setAccountnumber(int nr){

        accountnumber=nr;

        }

        public double getBlance(){

        return blance;

        }

        public void setBlance(double amount)throws AccountException{

        if(amount<0)

        throw new AccountException("Negative Blance:"+amount);

        blance=amount;

        }

        public void numberIn(double amount)throws AccountException{

        if(amount<0)

        throw new AccountException("Negative Amount:"+amount);

        blance+=amount;

        }

        public void numberOut(double amount)throws AccountException{

        if(amount<0)

        throw new AccountException("Negative Amount:"+amount);

        if(balance<amount)

        throw new AccountException("A-mount>Blance")

        blance-=amount;

        }

        }

        //file:Test.java

        public class Test{

        public static void main(String[]args)throw AccountException{

        Account acc=new Account(4711,500);

        acc.numberOut(1000);

        System.out.println(acc.getBlance());

        }

        }

        這個(gè)程序在執(zhí)行中自行中斷,計(jì)算機(jī)給出了以下聲明:

        Exception in thread“main”AccountException

        Amount>balance

        導(dǎo)致計(jì)算機(jī)在編輯過程中錯(cuò)誤聲明的原因是:throws-clause的不完善。

        二、錯(cuò)誤的處理與修改

        例1的修改方案較簡(jiǎn)單,這里略去。

        修改以后的例2的新程序如下:

        class Ex02’{

        public static void main(String[]args){

        String s1="24",s2="25",s3="x";

        int number1,number2,number3;

        number1=number2=number3=0;

        try{

        //(1)

        number1=Integer.parseInt(s1);

        number2=Integer.parseInt(s2);

        number3=Integer.parseInt(s3);

        }

        catch(

        java.lang.NumberFormatException e){ //(2)

        System.out.println("Uups");

        //(3)

        }

        System.out.println(number 1*number 2);

        System.out.println(number 1+number 3);

        }

        }

        輸出結(jié)果為:

        Uusp

        600

        24

        詳細(xì)解釋如下:

        (1)在新程序中,關(guān)鍵詞try引導(dǎo)了一個(gè)程序段,它被限定在一對(duì)花括號(hào)之內(nèi)。這個(gè)程序段確定了程序的范圍。

        (2)由于在(1)處我們定義了一個(gè)try-程序段,那么按照J(rèn)ava的規(guī)則,我們必須緊接著在這個(gè)try-程序段的后邊最少定義一個(gè)catch-程序段,而且在catch-程序段內(nèi)定義的程序指示命令是針對(duì)一定類型錯(cuò)誤的。根據(jù)例2的具體情況,我們?cè)谛薷拇顺绦驎r(shí)只定義了一個(gè)catch-程序段,在這個(gè)catch-程序段中我們給出了一個(gè)參量e,它就是針對(duì)錯(cuò)誤的對(duì)象而給出的。通過說明,不僅參量的類型被聲明了,而且確定了這個(gè)程序段負(fù)責(zé)處理怎樣的錯(cuò)誤。

        (3)每個(gè)有效的Java-code都可以存在在一個(gè)catch-程序段內(nèi),通過此種途徑和方法,編程序的人可以嘗試著將錯(cuò)誤消除。

        例3修改方案有好幾種,這里我們僅介紹一種。

        修改以后的例3新程序?yàn)椋?/p>

        //file:account.java

        public class Account{

        private int accountnumber;

        private double balance;

        public Account(){}

        public Account(int accountnumber){

        this.accountnumber=accountnumber;

        }

        public Account(int accountnumber,double balance)

        throws AccountException{

        if(blance<0)

        throws new AccountException("Negative Blance:"+blance);

        this.accountnumber=accountnumber;

        this.balance=blance;

        }

        public int getAccountnumber(){

        return accountnumber;

        }

        public void setAccountnumber(int nr){

        accountnumber=nr;

        }

        public double getBlance(){

        return blance;

        }

        public void setBlance(double amount)throws AccountException{

        if(amount<0)

        throw new AccountException("Negative Blance:"+amount);

        blance=amount;

        }

        public void numberIn(double amount)throws AccountException{

        if(amount<0)

        throw new AccountException("Negative Amount:"+amount);

        blance+=amount;

        }

        public void numberOut(double amount)throws AccountException{

        if(amount<0)

        throw new AccountException("Negative Amount:"+amount);

        if(balance<amount)

        throw new AccountException("A-mount>Blance")

        blance-=amount;

        }

        }

        //file:Test.java

        public class Test{

        public static void main(String[]args){

        Account acc=zero;

        try{

        acc=new Account(4711,500);

        //(1)

        for(int i=0;i<3;i++){

        System.out.println("BEGINN STEP"+i);

        try{

        //(2)

        switch(i){

        case 0:

        acc.numberOut(100);

        break;

        case 1:

        acc.numberOut(700);

        break;

        case 2:

        acc.numberOut(200/0);

        break;

        }

        }

        catch(accountException e){

        //(3)

        System.out.println("Error:"+e.getMessage());

        }

        finally{

        System.out.println("Issue in finally-block:"

        +acc.getBalance());

        }

        System.out println("END STEP"+i);

        System.out println();

        }

        }

        catch(accountException e){

        //(4)

        System.out println(e.getMessage());

        }

        }

        }

        具體說明如下:

        在例3程序(Test部分)的修改過程中,我們利用了try—程序段和catch—程序段,他們的作用這里不再贅述,不同前邊例2的修改方法是,它們是互相套在一起的。

        詳細(xì)解釋如下:

        catch—程序段(4)是和try—程序段(1)配對(duì)的,catch—程序段(3)是和try—程序段(2)配對(duì)的,而try—程序段(2)和catch—程序段(3)這一對(duì)是鑲嵌在try—程序段(1)和catch—程序段(4)這一對(duì)里面的。

        我們?cè)谛薷睦?這個(gè)程序時(shí)利用了Java的一個(gè)優(yōu)點(diǎn),即:在一個(gè)成套的try—程序段和catch—程序段內(nèi)允許完整組合的try—程序段和catch—程序段套在里邊應(yīng)用。這是修改Java—程序必不可少的技巧。

        另外,在一個(gè)try—程序段內(nèi)允許完整組合的try—程序段和catch—程序段套在里邊應(yīng)用。同樣,在一個(gè)catch—程序段內(nèi)也允許完整組合的try—程序段和catch—程序段套在里邊應(yīng)用。要注意的原則是,有try—程序段的出現(xiàn),就有catch—程序段的出現(xiàn),而且一個(gè)try—程序段可以引導(dǎo)多個(gè)catch—程序段。也就是說,在一個(gè)try—程序段的后邊可以跟隨多于一個(gè)以上catch—程序段。那么,到底多少為宜,要根據(jù)具體情況以及程序的需要而確定。

        Literatur(參考文獻(xiàn)):

        [1]Dirk Louis.Jetzt lerne ich Java[M].Germany:vieweg,2001.

        [2]Christian Welff.Einfuerung in Java[M].Germany:Teubner,1999.

        [3]Gao Rong Fang(高榮芳).Grundkurs Java[M].Germany:Script,2002.

        [責(zé)任編輯 王愛萍]

        TP311

        A

        1008-4649(2010)02-0092-07

        2009-11-25

        高榮芳(1958— ),女,西安市人,德國(guó)波鴻大學(xué)教授,數(shù)學(xué)博士。

        猜你喜歡
        定義程序計(jì)算機(jī)
        計(jì)算機(jī)操作系統(tǒng)
        基于計(jì)算機(jī)自然語(yǔ)言處理的機(jī)器翻譯技術(shù)應(yīng)用與簡(jiǎn)介
        科技傳播(2019年22期)2020-01-14 03:06:34
        試論我國(guó)未決羈押程序的立法完善
        信息系統(tǒng)審計(jì)中計(jì)算機(jī)審計(jì)的應(yīng)用
        “程序猿”的生活什么樣
        英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
        成功的定義
        山東青年(2016年1期)2016-02-28 14:25:25
        創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
        Fresnel衍射的計(jì)算機(jī)模擬演示
        修辭學(xué)的重大定義
        色婷婷精品综合久久狠狠| 放荡人妻一区二区三区| 一区二区三区成人av| 精品国产一区二区三区不卡在线| 国产乱码精品一区二区三区久久| 亚洲无线码一区二区三区| 无码精品黑人一区二区三区| 欧美久久中文字幕| 蜜桃噜噜一区二区三区| 久久99精品久久久久久噜噜| 亚洲欧美日韩中文在线制服| 亚洲一区二区欧美色妞影院| 男女性生活视频免费网站| 风韵人妻丰满熟妇老熟| 久久久久久久极品内射| 国产乱沈阳女人高潮乱叫老| 太大太粗太爽免费视频| 亚洲精品女人天堂av麻| 日韩精品无码一区二区三区四区| 1000部夫妻午夜免费| 中日韩欧美成人免费播放| av毛片亚洲高清一区二区| 亚洲欧美牲交| 两个人看的www中文在线观看| 18禁黄无遮挡免费网站| 日本一二三区免费在线| 中文字幕日韩一区二区不卡| 醉酒后少妇被疯狂内射视频| 免费无遮挡无码视频在线观看| 蜜桃av噜噜噜一区二区三区| 黑人巨大精品欧美| 少妇高潮惨叫久久久久久电影| 欧美性性性性性色大片免费的| 欧美综合图区亚洲综合图区| 国产激情一区二区三区不卡av| 国产人妻熟女高跟丝袜图片| 久久网视频中文字幕综合| 国产激情久久久久久熟女老人| 亚洲精品第四页中文字幕| (无码视频)在线观看| 亚洲日韩乱码中文无码蜜桃臀|