利用白富美接口案例,土豪徵婚使用匿名內部類對象實現。
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;
}
}