1.利用白富美接口案例,土豪征婚使用匿名内部类对象实现。
interface IWhite
{
abstract public void skinWhite();
}
interface IRich
{
abstract public void rich();
}
interface IBeanti
{
abstract public void beanti();
}
interface IWRB extends IWhite,IRich,IBeanti
{
}
class EarchRicher
{
public void marring(IWRB wbr)
{
wbr.skinWhite();
wbr.rich();
wbr.beanti();
System.out.println("marring");
}
}
class InterfaceDemo2
{
public static void main(String [] args)
{
EarchRicher richMan = new EarchRicher();
//匿名内部类实现接口的所有抽象方法
richMan.marring(new IWRB(){
public void skinWhite()
{
System.out.println("白");
}
public void rich()
{
System.out.println("富");
}
public void beanti()
{
System.out.println("美");
}
});
}
}
2.定义三角形类Trianle,里面包含三个int类型属性,分别表示三条边的长度,
构造三角形对象时,任意两边之和是否大于第三边,如若不成立,抛出自定义异常。
class TrianleTooSmallException extends Exception
{
private String info;
public TrianleTooSmallException()
{
}
public TrianleTooSmallException(String info)
{
this.info = info;
}
public String getInfo()
{
return info;
}
public void setInfo(String info)
{
this.info = info ;
}
}
class TrianleNotMatchException extends Exception
{
private String info;
public TrianleNotMatchException()
{
}
public TrianleNotMatchException(String info)
{
this.info = info ;
}
public String getInfo()
{
return info;
}
public void setInfo()
{
this.info = info ;
}
}
class Trianle
{
private int a;
private int b;
private int c;
public int getA()
{
return a;
}
public void setA(int a) throws TrianleTooSmallException
{
if (a > 0)
{
this.a = a;
}else
{
throw new TrianleTooSmallException("边长不能小于0");
}
}
public int getB()
{
return b;
}
public void setB(int b) throws TrianleTooSmallException
{
if (b >0)
{
this.b = b ;
}
else
{
throw new TrianleTooSmallException("边长不能小于0");
}
}
public int getC()
{
return c;
}
public void setC(int c) throws TrianleTooSmallException
{
if (c > 0)
{
this.c = c;
}
else
{
throw new TrianleTooSmallException("边长不能小于0");
}
}
public static void Checking(int a , int b , int c) throws TrianleNotMatchException
{
if (a + b <= c || a + c <= b || b + c <= a)
{
throw new TrianleNotMatchException("两边之和必须大于第三边");
}
else
{
System.out.println("是三角形");
}
}
}
class ExceptionDemo
{
public static void main(String[] args)
{
Trianle trianle = new Trianle();
try
{
trianle.setA(4);
trianle.setB(3);
trianle.setC(5);
trianle.Checking(trianle.getA(),trianle.getB(),trianle.getC());
}
catch (TrianleTooSmallException t)
{
System.out.println(t.getInfo());
System.exit(-1);
}
catch (TrianleNotMatchException t)
{
System.out.println(t.getInfo());
System.exit(-1);
}
catch (Exception e)
{
System.out.println("不是一个三角形");
System.exit(-1);
}
}
}
3.Person类中增加birthday属性,对setBirthday(int ,int , int )方法进行异常处理,
要求年有效、月有效、日有效、年月日指定的具体日期有效,对不同情况分别抛出不同的异常。
class Person
{
private String birthday;
public String getBirthday()
{
return birthday;
}
public void setBirthday(int y , int m , int d) throws InvaidException
{
if (y < 1970 || y > 2016)
{
throw new InvaidException("年代太远,请输入1970 ~~ 2016 之间的年份");
}
if (m <=0 || m > 12)
{
throw new InvaidException("非法月份");
}
else
{
switch (m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if (d <= 0 || d > 31)
{
throw new InvaidException("非法日期");
}
break;
case 4:
case 6:
case 9:
case 11:
if (d <= 0 || d > 30)
{
throw new InvaidException("非法日期");
}
break;
case 2:
if (y % 4 != 0 && d == 29 | d > 29)
{
throw new InvaidException("非法日期");
}
break;
}
}
this.birthday = y + "/" + m + "/" + d;
}
}
class InvaidException extends Exception
{
public InvaidException(String msg)
{
super(msg);
System.out.println(msg);
}
}
class BirthdayDemo
{
public static void main(String[] args)
{
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();
try
{
p1.setBirthday(1999,12,3);
p2.setBirthday(2009,1,22);
p3.setBirthday(2011,12,9);
System.out.println(p1.getBirthday());
System.out.println(p2.getBirthday());
System.out.println(p3.getBirthday());
}
catch (InvaidException e)
{
}
}
}
4.将类定义到指定的包下。com.it18zhang,编译之后,打成jar文件。
jar cvf myjar.jar -C classes/ .
jar cvfe myjar.jar com.it18zhang.A -C classes/ .
java -jar myjar.jar
java -jar myjar.jar com.it18zhang.A