h.接口中甚至可以没有任何方法,就是一套标准。
Serializable, Cloneable
i.接口中可以声明变量,接口中声明的变量都是
public static final 的, 即使没有这样声明
k.接口中有非常多的方法,而我们再用的时候,每次只用个别的方法,非常麻烦
,可以写一个适配器类, 这种缺省适配器类一般都是抽象的,明确指定不需要对象
什么是抽象类: 只要是abstract声明的类就是抽象类
//感觉和C 中的函数声明似的,interface 声明, implements 函数的具体实现
interface TT{
void a();
void b();
void c();
void d();
}
abstract class TTAdapter implements TT{
public void a() {}
public void b() {}
public void c() {}
public void d() {}
}//这个类没必要有任何对象,所以适配器类可以直接声明成 abstract
class A1 extends TTAdapter{
public void a(){System.out.println("a...");}
}
java的异常 ----------------(不知道怎么用)
1. 什么是异常 你的程序可能出现意外, 内存不够,文件不能打开等
java中已经把异常or错误都分类了
首先java把错误or异常分成了两大类都是java.lang.Throwable的子类
java.lang.Error 系统级的异常,一般很难调试
java.lang.Excpetion 程序级的异常,通常代码可以处理
2. java.lang.Excpetion 它是一切程序级异常的分类
a. java 中把所有产生的程序级异常都进行了分类,我们程序中出现的任何异常
都能够在分类中找到
b.Excpetion 大的方向分成两种 :
b.1 jvm能自动捕获的异常java.lang.RuntimeException及其子类
当然也可以自己处理
b.2 jvm 不能捕获的异常必须通过程序自己处理,如果不处理程序编译不通过
3. 如何自己去处理
c中经常这样处理
test(){
openFile();
if(打开成功){
。。。。。
} else {
。。。
}
}
java中处理:
try {
业务代码(可能异常)
}catch(){
异常处理
}
try 可以多个catch:
子类一定要放在父类的前面,因为父类的引用可以引用子类的对象
java.lang.Excpetion 是一切异常的父类,它就可以处理任何异常
不管有没有异常最终都要执行的语句
try{} catch(){} finally{}
try{}finally{}
4.throw/throws
throw 在某种情况下抛出一个异常,制造一个异常
throws 是用来回避异常的
注意:当子类重写父类方法的时候,不能throws
比父类多的异常,除非多throws的异常是RuntimeExcept
原理:java中,父类可以接受任何子类对象
如果子类比父类有更多地约束,那么父类处理不了就出问题了,
所以在java中子父类进行继承,子类不能比父类有更多的约束。面向对象的
设计中有一个里氏替换原则说明的就是这个问题。
5.Exception 有几个常用的方法
getMessage() 获取异常的信息
toString()
printStackTrace();
6.自定义异常
自定义 异常需要继承已经提供的异常类
7. 有了异常之后一些细节要注意
如:如果函数有返回值,那么不管有何异常产生都要保证函数有返回值
函数中如下 try{} catch(){}finally{} return 返回值
try{ return..} catch(){return..}finally{}
是finally 先执行还是return 先执行 不管怎么写
函数遇到return就结束, 所以finally一定在return之前执行
阶段性项目:
目的:1.完成需求
2.了解简单的面向对象的设计
version1.0
1.Movie
属性:name--->电影的名称,priceCode电影的类型
电影类型用整数代替
2.Rental租赁类
属性:movie ,name
3.Customer类
package calculator; public class Calculate { public double add(double a, double b){ return a + b; } public double sub(double a, double b){ return a - b; } public double mul(double a, double b){ return a * b; } public double div(double a, double b){ return a / b; } public double cal(double num1, double num2 ,String s){ double result = 0.0; if("+".equals(s)){ result = add(num1 ,num2 ); System.out.println(num1+"+"+num2+"的结果是"+result); }else if("-".equals(s)){ result = sub(num1 ,num2 ); System.out.println(num1+"-"+num2+"的结果是"+result); }else if("*".equals(s)){ result = mul(num1,num2); System.out.println(num1+"*"+num2+"的结果是"+result); }else if("/".equals(s)){ result = div(num1,num2 ); System.out.println(num1+"/"+num2+"的结果是"+result); }else{ } return result; } } ---------------------------- package calculator; import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub //double result = 0.0; double next = 0.0; System.out.println("欢迎使用简单计算器...\n "); Calculate cal = new Calculate(); //定义Calculate的一个实例 System.out.println("请输入第一个数>>>"); Scanner num = new Scanner(System.in); double a = num.nextDouble(); //获取第一个数 System.out.println("请输入运算符+、-、*、/>>>"); String s = num.next(); //获取运算符 System.out.println("请输入下一个数>>>"); double b = num.nextDouble(); //获取第二个数 double temp = cal.cal(a, b, s); while(true){ System.out.println("请继续输入运算符+、-、*、/>>>"); s = num.next(); //获取运算符 System.out.println("请输入下一个数"); next = num.nextDouble();//获取 下一个数 temp = cal.cal(temp, next, s); } } }