Java基础10天 学习笔记_面向对象(异常 finally关键字)

来源:互联网 发布:广电网络机顶盒 编辑:程序博客网 时间:2024/06/17 20:55

01 finally关键字存放的是一定会执行的东西。

有一种情况是在catch语句中出现了return则调用函数退出,就不会执行到try catch以后的语句了,而在finally块中的语句是无论如何都可以执行到的。

 

实例,连接数据库

1.连接,

2.操作

3.断开

无论能不能连接,有没有操作,断开操作一定会执行

所以释放资源的操作,finally非常重要!!!

异常中finally对于资源的处理是很重要的+

 

finally的作用

定义了一定执行的代码,通常用于关闭资源


异常的切换!重要的。

让调用者用他们理解的人类的语言,看的懂异常~

每个人都有自己的Scope

问题需要内部处理,

问题有关联性!解决本层的问题,而将不能解决的暴露出去

try{

throw new Exception();

}

catch(Exceptione)

{

 

}

编译通过,问题被解决问题可以不用声明 相当于内部消化了

异常在子父类覆盖中的体现:

1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能:抛出父类的异常或者异常的子类。(也就是父类异常体系下的异常)

2.子类抛出的异常是父类异常的子集

3.如果父类或者接口的方法没有异常抛出,那么子类在覆盖方法时,也不能抛出异常

如果子类方法发生了异常,那就必须进行try处理,绝对不能抛。

4异常练习

有一个圆形和长方形,

都可以获取面积,如面积出现非法值 0 或者负数,视为获取面积出现了问题

 

1.先设计

求面积:是个扩展功能,接口

是个基本功能,类。

 

要避免:正常流程代码和问题处理代码,结合的太紧密了,阅读性差,而且不灵活。

一般我们只保留正常的流程代码,然后在问题发生时再看问题的处理代码

 

异常的作用来了:它降低了正常流程代码和问题处理代码的耦合性!

throw关键字有跳转功能~

Rec(-3,4)

本身就不存在,所以程序应该停止,

有一类异常的目的就是让程序停止 RuntimeException

 

合法化数值的检测抛异常一般在构造函数时就要做了,而不是定义在具体的方法上,

如果连矩形的边长都为负数了,那么其功能,如求面积,求周长都是没有意义的了。

所以构造函数报了异常,后面的步骤都没有办法继续,这样才合理。

 

没有办法继续,我们想到了runtimeex,这个特殊的异常类。

 

要避免:正常流程代码和问题处理代码,结合的太紧密了,阅读性差,而且不灵活。

一般我们只保留正常的流程代码,然后在问题发生时再看问题的处理代码

其格式

if (条件)

{

throw new xxxException("xxxx");

}

 

回顾下:

RuntimeException类和其子类,在函数内定义了则不用在函数上声明,是非常特殊的异常。

运行时的异常。调用时也不需要try catch因为会中断程序



全局静态共享定义

 

碰到可能会产生的问题,全部用异常描述并且封装成对象

 

一般异常而言:函数内有抛有声明,调用者有抛就有接(声明异常,也可以是父类),

Runtime异常:函数内有抛无声明,调用者也可以不接

不声明就不需要try catch


throws xxxException需要声明在可能出现问题的类上,而不是类上。

/*有一个圆形和长方形,都可以获取面积,如面积出现非法值 , 0 或者负数,视为获取面积出现了问题*/interface AreaCal{void area();}class NoValueException extends RuntimeException{NoValueException(String msg){super(msg);}}class Square implements AreaCal {private int a, b;Square(int a, int b ) //throws NoValueException{if (a<=0 || b<=0){throw new NoValueException("Illegal Value");}this.a=a;this.b=b;}public void area(){System.out.println(a*b);}}class Circle implements AreaCal {private int r;public static final double PI=3.14;Circle(int r ) //throws NoValueException{if (r<=0){throw new NoValueException("Illegal Value");}this.r=r;}public void area(){System.out.println(r*r*PI);}}class  ShapeDemo{public static void main(String[] args) {Square fang= new Square(-5,6);fang.area();Circle c= new Circle(-10);c.area();System.out.println("Over");}}

异常的基本格式和知识点






System.exit(0);

这样读不到Finally中的内容虚拟机结束



这个挺重要的




006面向对象练习4

1.try + finally ,没有catch,依然要在函数上声明异常,因为在函数内并没有解决

2.考察子类的实例化过程


07package

 

对类文件进行分类管理

给类提供多层命名空间

 

pack\packageDemo

javac -d. Package.java

做项目是先写包再写类!

-d后面可以跟任意的目录 +但是要注意设置classpath = $目录

 

08不同包中的类的互访

pack----DemoA

packa----DemoB(main)

 

Main调用DemoA中的方法,要加包名

pack.newDemoA(). show ()

 

cmd中调用主函数是也要加

javapack.DemoB

 

protected保护权限(给不同包中的子类给的权限)

package也是封装的一种形式




mport简化:不用在调用的类上加上package名了,有的时候多层的package调用起来好麻烦

import导入的是包中的类,而不是包

如果导入了重名的类时,调用类时必须加包名

 

一定要建立不重名的包名可以用url来定义

packagecn.jerryjava.demo

packagecn.jerryjava.test

 

010 Jar


0 0
原创粉丝点击