Java学习笔记

源代码在线查看: java(day08).txt

软件大小: 190 K
上传用户: Rosa_
关键词: Java
下载地址: 免注册下载 普通下载 VIP

相关代码

				                                       Java第八天      2007年5月8日
				一、复习
				接口
				是个特殊的抽象类,属性:公开静态常量,方法:公开抽象方法
				没有构造方法
				接口之间可以多继承,一个类在继承另外一个类的同时,和可以实现多个接口
				
				优点:
				1、实现多继承,不会破坏类之间的单继承简单的树状关系。区分主类型和次要类型。
				2、标准,解耦合工具
				   标准的使用者和标准的实现者通过借口隔离开,使得接口实现者的改变对使用者没有影响
				
				接口的回调:
				有了接口之后,先有接口使用者,后有接口的实现者,把接口实现者对象传给接口使用者,接口使用者通过接口,调用接口实现这中的方法
				
				二、Object
				java中所有的类的父类或直接或间接的或隐含的都是Object类。
				java不允许循环继承,也就是互相继承是不可以的。
				
				主要方法:
				(1)finalize():对象被垃圾收集的时候最后调用的方法
				      不能把释放资源的代码写在其中,程序员不能控制调用时机
				(2)equals(): 对象内容的比较
				      Object类中的boolean equals(Object o)方法是用来比较对象的内容是否相等,其返回值是boolean类型的值,相同为真,不同则为假。
				      实际上还是比较对象地址是否相同。String类覆盖了equals()方法,他比较是对象中的内容是否相同。
				      子类中也推荐覆盖Object类中继承的equals()方法,自己制定比较规则
				
				      自反性:s.equals(s)  true
				      对称性:s1.equals(s2) true
				             s2.equals(s1) true
				      传递性:s1.equals(s2) true
				             s2.equals(s3) true
				             则 s1.equals(s3) true
				      覆盖equals()方法的步骤
				           boolean equals(Object o){
				                if(this==o) return true;//1,看看是不是一个对象
				                if(o==null) return true;//2,看看对象是不是空
				                if(!(o instanceof 本类类名)) return false;//看看是不是本类对象
				                ......//根据本类设计。 
				            }
				(3)toString():返回对象的字符串表现形式
				      Object类中的toString()方法他返回的是类名加上他的地址的一个字符串。在子类中推荐覆盖toString()方法。
				      System.out.println(person);实际上打印的是person对象toString方法的返回值.
				      
				
				练习:
				Employe类 属性:name,age,salary
				把equals().toString()方法覆盖
				
				
				三、封装类
				JAVA为每一个简单数据类型提供了一个封装类,使每个简单数据类型可以被Object来装载。
				除了int(Integer)和char(Character),其余类型首字母大写即成封装类类型名。
				
				转换字符的方式:
				int I=10;
				String s=I+” ”;
				String s1=String.valueOf(i);
				
				Int I=10;
				Interger I_class=new integer(I);
				
				封装类.字符串.基本类型
				
				int--------------------(Integer(x.toString))---------------->Integer
				String -----------------(Integer.valueOf() )---------------->Integer
				Integer-----------------(x.toString() )--------------------->String
				int----------------------(100+””)------------------------->String
				String------------------(Integer.parseInt() )--------------->int
				Integer-----------------(Integer.intValue() )--------------->int
				
				四、异常
				帮错误发生的时候减少损失,提高容错性
				
				1、常的分类
				Throwable有两个子类:Error和Exception。
				一个Error对象表示一个程序错误,指的是底层的、低级的、不可恢复的严重错误。此时程序一定会退出,因为已经失去了运行所必须的物理环境。
				对于Error错误我们无法进行处理,因为我们是通过程序来应对错误,可是程序已经退出了。
				我们可以处理的Throwable类中只有Exception类的对象(例外/异常)。
				
				                       Throwable
				                          |
				                  ------------------
				                  |                 |
				              Error             Exception
				                                    |
				                             --------------
				                            |              |
				                  RuntimeException      非Runtime异常
				                  未检查异常             已检查异常
				                  由于程序员疏忽造成的    不可避免的
				                  可避免的               必须处理
				                  可处理,可不处理
				
				2、异常的产生和传递
				  throw  new一个异常对象;   ---表示抛出一个异常
				  throw new NullPointerException();
				  相当于return,函数返回上一级
				
				 传递:
				 沿着方法调用链反向传递!
				 当一个方法中出现异常,而没有作处理,则以异常对象为返回值返回调用处(逐级传递)
				 异常返回给虚拟机时,虚拟机终止退出,程序结束
				
				3、异常的处理
				  (1)声明抛出  
				       是方法声明的第五部分  throws+异常名字(多个异常用“,”分隔) 
				       出现异常,不处理,抛给上一级处理
				       并且子类抛出异常的范围不能比父类抛出异常的范围更宽。
				  (2)捕获异常
				       try - catch 
				       try - catch - finally
				       try - finally     //不捕获异常,当异常发生,返回上一级之前,要运行finally中的代码
				       以上语句可以嵌套
				
				       返回类型 方法名(参数){
						try{
							可能出错语句
							正常语句
						}catch(异常类 e){  //某种异常的引用
							对异常的处理
						}
						正常语句		
					}
				
				       捕获多个异常:
				       程序任何时刻只发生一个异常
					可对产生的每个异常分别捕捉,也可由同一异常进行处理,前提是这个共用的异常应该是所有这些该被捕获的异常的父类,但是,对于非受查异常不成立
					当try后面有多个语句块时,注意catch异常的顺序,子类必须放在父类的前面
				
				       finally关键字
					无论异常是否发生,一定会执行的代码,可放在finally块内。
					要点:没有异常产生时:正常执行try{}catch(){} —> 进入finally语句块 —> 方法中剩余代码
					     有异常产生时(捕找到) —> 进入catch处理 —> 进入finally语句块 —> 方法中剩余代码
					     有异常产生时(没捕找到)—> 进入finally语句块 —> 离开方法
				       一般写一些释放资源的代码
				       在try - catch 块中遇到System.exit(0);则不会执行finally中的代码
				
				       Throwable有一个message属性。在使用catch的时候可以调用:
				       Catch(IOException e){System.out.println(e.getMessage())};  //打印出来的是创建(throw new)异常对象的时候,给定的参数
				       Catch(IOException e){e.printStackTrace()};                 //打印堆栈追踪信息
				       以上两条语句都是可以打印出错的过程信息。告诉我们出错类型所历经的过程,在调试的中非常有用。
				
				开发中的两个道理:
				①如何控制try的范围:根据操作的连动性和相关性,如果前面的程序代码块抛出的错误影响了后面程序 代码的运行,那么这个我们就说这两个程序代码存在关联,应该放在同一个try中。
				②对已经查出来的例外,有throw(消极)和try catch(积极)两种处理方法。
				对于throws把异常抛到try catch能够很好地处理异常的位置(即放在具备对异常进行处理的能力的位置 )。如果没有处理能力就继续上抛。
				
				4、自定义异常
				   (1)继承Exception类
				   (2)构造方法:
					不带参数的构造方法
					带参数的构造方法:参数指出错误性质,super(message);把参数传递给父类构造异常
						
				作业
				(1)为Account类及其子类添加toString方法和equals方法
				(2)(Exception)
				为BAM添加几个异常类
				
				BalanceNotEnoughException :用于取钱的时候余额不足的情况(包括账户余额超过透支额的情况)
				RegisterException:用于开户异常的情况,例如密码两次输入不一致等情况
				LoginException:用户登录异常的情况,例如id错误,密码错误
				LoanException:贷款额不能为负数,如果用户试图将贷款额置为负数,则会抛出这个异常
				
				以上四个异常类有一个共同的父类 BusinessException
				并妥善的处理这些异常			

相关资源