IT十八掌作業_java基礎第七天_匿名內部類、異常、包和jar

  1. 利用白富美接口案例,土豪徵婚使用匿名內部類對象實現。

2.定義三角形類Trianle,裏面包含三個int類型屬性,分別表示三條邊的長度,

  構造三角形對象時,任意兩邊之和是否大於第三邊,如若不成立,拋出自定義異常。

3.Person類中增加birthday屬性,對setBirthday(int ,int , int )方法進行異常處理,

  要求年有效、月有效、日有效、年月日指定的具體日期有效,對不同情況分別拋出不同的異常。

4.將類定義到指定的包下。com.it18zhang,編譯之後,打成jar文件。

5.相互之間使用jar包,放置cp下,對class進行重用。

6.設計程序,考查修飾符。public -> protected -> default -> private(選做題)

7.預習多線程。


------------------------------------------------------------------------------------------

/**

 *1,    

 * 土豪徵婚案例,徵婚對象要求至少具備白富美三種特性,土豪徵婚使用匿名內部類對象實現.

 */

// 定義三種特性白富美

interface Iwhite 

{

    public void skinWhite();

}

interface IRich 

{

    public void walletRich();

}

interface IBeauti 

{

    public void faceBeauti();

}

// 定義一個白富美接口繼承三個接口

interface WhiteRichBeauti extends Iwhite, IRich, IBeauti 

{

}

// 定義一個男土豪類

class Tuhao 

{

    public void marry(WhiteRichBeauti woman) 

    {

        System.out.println("Find Love!");

    }

}

class TuhaoDemo

{

    public static void main(String[] args)

    {

        Tuhao th = new Tuhao();    

        th.marry(new WhiteRichBeauti(){

            public void skinWhite()

            {

                System.out.println("I'm white!!");

            }

            public void walletRich()

            {

                System.out.println("I'm rich!!");

            }

            public void faceBeauti()

            {

                System.out.println("I'm beautiful!!");

            }    

        });

    }

}

/**

 *2.定義三角形類Trianle,裏面包含三個int類型屬性,分別表示三條邊的長度,

 *構造三角形對象時,任意兩邊之和是否大於第三邊,如若不成立,拋出自定義異常。

 *

 */

class LengthToBigException extends Exception

{

    private String info;

    public LengthToBigException()

    {

    }

    public LengthToBigException(String info)

    {

        this.info = info;

    }

    public void setInfo(String info)

    {

        this.info = info;

    }

    public String getInfo()

    {

        return info;

    }

}

class Trianle

{

    int len1,len2,len3;

    public Trianle(int len1,int len2,int len3) throws LengthToBigException

    {

        if(((len1+len2)<=len3)||((len1+len3)<=len2)||((len2+len3)<=len1))

        {

            throw new LengthToBigException("非法的三角形邊長度!!");

        }else

        {

            this.len1=len1;

            this.len2=len2;

            this.len3=len3;

        }

    }

    public int getLength()

    {

        return len1+len2+len3;

    }

}

class ExceptionDemo

{

    public static void main(String[] args)

    {

        try

        {

            Trianle tr = new Trianle(3,2,6);

            System.out.println("三角形的周長爲"+tr.getLength());

        }

        catch(LengthToBigException ex)

        {

            System.out.println(ex.getInfo());

            ex.setInfo("理由:不滿足任意兩邊只和大於第三邊!!");

            System.out.println(ex.getInfo());

        }

        catch(Exception e)

        {

            e.printStackTrace();

        }

    }

}

/*3.Person類中增加birthday屬性,對setBirthday(int ,int , int )方法進行異常處理,

  要求年有效、月有效、日有效、年月日指定的具體日期有效,對不同情況分別拋出不同的異常。

  思路:定義一個BirthdayException,提供setter,getter異常信息設置獲取方法。

        定義Person類成員birthday屬性,對setBirthday傳入生日年月日參數進行判斷

            |--年是整數,限定一個範圍1916~2016

            |--月範圍是1~12月

            |--日:首先爲1~31,其次1,3,5,7,8,10,12爲31天,閏年的二月29天,平年二月28天,4,6,9,11爲30天

  */

class BirthdayException extends Exception

{

    private String info;

    public BirthdayException()

    {

    }

    public BirthdayException(String info)

    {

        this.info = info;

    }

    public void setInfo(String info)

    {

        this.info = info;

    }

    public String getInfo()

    {

        return info;

    }

}

class Person    //定義Person類,增加setBirthday方法,並對生日有效性做處理!

{

    private String birthday;

    public void setBirthday(int year,int month,int day) throws BirthdayException

    {

        if(year>2016||year<1916)

            throw new BirthdayException("非法生日年份!");

        else if(month>12||month<1)

            throw new BirthdayException("非法的生日月份!");

        else if(day>31||day<1)

            throw new BirthdayException("非法的生日天數!");

        else if(!EffientDay(year,month,day))

            throw new BirthdayException("非法的生日具體日期!");

        else

            birthday = year+"年"+month+"月"+day+"日";

    }

    public boolean EffientDay(int year,int month,int day)

    {

        if(month==2)    //判斷是否閏年

        {

            if(year%400==0)

                return day<=29;

            else if(year%4==0)

                return day<=29;

            else 

                return day<=28;

        } 

        else if(month ==4||month==6||month==9||month==11)

            return day<=30;

        else

            return day<=31;

    }

    public String getBirthday()

    {

        return birthday;

    }

}

class ExceptionDemo2

{

    public static void main(String[] args)

    {

        Person p = new Person();

        try

        {

             //p.setBirthday(1915,1,3);        //非法生日年份!

             //p.setBirthday(2016,13,3);    //非法的生日月份!

             //p.setBirthday(2008,7,32);    //非法的生日天數!

             //p.setBirthday(2000,2,29);        //2000年2月29日

             //p.setBirthday(2001,2,29);        //非法的生日具體日期!

             //p.setBirthday(2008,4,31);        //非法的生日具體日期!

             p.setBirthday(2015,7,31);        //2015年7月31日

             System.out.println("生日爲: "+p.getBirthday());

        }

        catch(BirthdayException ex)

        {

            System.out.println(ex.getInfo());

        }

        catch(Exception e)

        {

            e.printStackTrace();

        }

    }

}

// 4.將類定義到指定的包下。com.it18zhang,編譯之後,打成jar文件。

package com.it18zhang;

class PackageDemo

{

    public static void main(String[] args)

    {

        System.out.println("package lenarning!!");

    }

}

// 4.將類定義到指定的包下。com.it18zhang,編譯之後,打成jar文件。

package com.it18zhang;

class PackageDemo

{

    public static void main(String[] args)

    {

        System.out.println("package lenarning!!");

    }

}

/*當前cmd路徑:D:/java

    D:\java>md classes

編譯:D:\java>javac -d classes PackageDemo.java

打成jar文件格式一:jar cvf myjar.jar -C classes .

打成jar文件格式二:jar cvfe myjar.jar com.it18zhang.PackageDemo -C classes .

使用java -jar參數運行程序:

                            Java -jar myjar.jar            執行jar文件

                            java -jar myjar.jar com.it18zhang.A        執行jar文件當中的入口

*/

//5.相互之間使用jar包,放置cp下,對class進行重用。

/*

Person.java和StudentDemo.java文件如下所示,student類繼承了Person類。

首先將Person.class打包成jar包,jar cvf Person.jar Person.class

然後將Person.jar和Student.java放到D:\java\classes文件夾下,

編譯:      javac StudentDemo.java                      //出錯,提示找不到Person類,

將jar文件設置cp下:

            javac -cp .;Person.jar Studentdemo.java    //編譯通過,

運行:        java StudentDemo                          //運行失敗,提示找不到Person類

將Perosn.jar設置cp下:

            java -cp .;Person.jar StudentDemo          //運行成功。          

*/


//StudentDemo.java

class Student extends Person

{

    public void study()

    {

        System.out.println("學生具備學習的能力!");

    }

}

class StudentDemo

{

    public static void main(String[] args)

    {

        Student st = new Student();

        st.study();

    }

}

//person.java

class Person

{

    private String name;

    private int age;

    public void setName(String name)

    {

        this.name = name;

    }

    public String getName()

    {

        return name;

    }

    public void setAge(int age)

    {

        this.age = age;

    }

    public int getAge()

    {

        return age;

    }

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章