java a 3_Java学习笔记三.3

9、异常处理:Java中的异常处理对象就是将以前的if语句进行的判断进行抽象化,并形成的一套错误处理体系。最顶端是Throwable,接着是Error,Exception,其中Exception又明显分为两类:RunTimeException和其他。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public classExceptions {2 public static int function(int[] arr,int index) throws FuShuIndexException //自定义错误类声明抛出

3 {4 /*注意Java自带错误处理类不需要throws关键字进行声明抛出就可以使用,5 * 是因为这些类继承自RunTimeException,该异常及其子类编译时不被检测6 * 但是运行时会报错,并且直接中断程序运行7 */

8 if(arr==null){9 throw new NullPointerException("传入数组为空指针!");10 }11 if(index>arr.length-1){12 throw new ArrayIndexOutOfBoundsException("哥们,数组角标越界了!");13 }14 if(index<0){15 throw new FuShuIndexException("不能使用负数角标");16 }17 returnarr[index];18 }19 public static void main(String[] args) throws FuShuIndexException //调用处抛出

20 {21 int[] arr={1,2,3,4};22 /*经过catch的处理就相当于解决异常,后续操作可以继续执行23 * 并且如果一段代码可以检测多个异常,则需要多个catch语句,但是只能接受第一个错误24 * catch语句如果接受Exception类型的对象,由于多态特性(子类可以替代父类使用)25 * 此时,该语句可以接受任意类型的异常,所有如果有该句应该放在最后26 */

27 try{28 int a=function(null,2);29 System.out.println(a);30 }catch(FuShuIndexException F){31 System.out.println("负数角标异常!");32 System.out.println("message:"+F.getMessage());33 //sop会将内容转换为字符串在输出,对象也不例外,所以会自动执行toString()操作

34 System.out.println("string:"+F.toString());35 /*getStackTrace()方法可以获取错误的详细信息36 * printStackTrace()是将错误信息打印到控制台上,这是jvm默认使用的方法37 */

38 F.printStackTrace();39 }catch(NullPointerException N){40 System.out.println("传入数组为空指针!");41 }catch(Exception E){42 System.out.println("其他错误");43 }44 //finally语句总会执行,所有通常用于关闭/释放资源

45 finally{46 System.out.println("over");47 }48 System.out.println("end");49 }50 }51 /*Java中错误最顶端是Throwable类 ,所有的可用方法都在其中定义了,子类可以直接使用。52 * 自定义错误类必须继承异常体系(通常是Exception/RuntimeExcetion),以便可以抛出,53 * 并且按照规范应该以父类作为类名的结尾,提高阅读性54 * 自定义的错误类如果想要被Java处理,必须使用两种操作:55 * 1、声明抛出:就是在需要抛出错误的函数参数后用 throws关键字+自定义错误类名 作为声明抛出,注意可以多抛出56 * ()57 * !!!注意这里的抛出和Java处理机制中的抛出一样,调用处也需要抛出。58 * 2、使用try{}catch(异常类型 变量){}finally{}结构处理59 * 上面两种方式如果自己能处理就用2,不能处理就抛出60 * !!!注意:错误处理类一般不用进行太多操作,而且超累已经进行了封装,所以可以直接调用就行,61 * !!!创建自定义的错误处理类是方便将错误进一步分类62 */

63 class FuShuIndexException extendsException{64 FuShuIndexException(){65

66 }67 FuShuIndexException(String msg){68 super(msg);69 }70 }

异常

1、

7d27bccd3180639f5ede8cb25764b4eb.png

2、

b3db3056ee903234f0b7e9476e9dc25b.png

3、

2b010bd54c37a69e95089ab94613c687.png

4、

ee59e381b2b654d2117940f2bb071bad.png

10、Object对象简介:这个对象是所有对象的父类,所包含的方法是所有对象抽象出来的,所以其中方法每个对象都可以使用

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public classObjectSuper {2 public static voidmain(String[] args){3 ObjectSuperDemo o1=newObjectSuperDemo();4 ObjectSuperDemo o2=newObjectSuperDemo();5 System.out.println(o1==o2);6 //其实equals方法就是将o1==o2操作给封装了

7 System.out.println(o1.equals(o2));8 /*Class对象:java中一切皆对象(类也一样,因为包含相同的内容被抽取为类对象)9 * 类/接口在加载后会生成一个class文件(即字节码文件),也会在内存中生成一个相应的字节码文件对象(Class对象)10 * 注意:一个类在内存中只会存在一份字节码文件对象,new的时候是根据这个对象生成新对象的。11 * 使用对象的getClass()可以获取这个对象,也叫运行时Class对象12 */

13 /*toString():下面的println()的参数是字符串类型,所以所有类型都会进行转换14 * 其中基本类型直接转换,而对象类型是调用toString()实现的。和equals()一样,15 * Object对象对该方法进行了实现,但是子类可以对其进行覆盖16 */

17 System.out.println(o1.getClass());18 }19 }20 classObjectSuperDemo{21

22 }23 classObjectSuperDemo1{24 ObjectSuperDemo1(intnum){25 setNum(num);26 }27 private intnum;28 public intgetNum() {29 returnnum;30 }31 public void setNum(intnum) {32 this.num =num;33 }34 /*覆盖Object的equals()的操作是常见操作,因为其是根据地址来进行判断35 * 而在实际中往往需要判断对象特有内容是否相同,此时不必重建新方法,而是重写equals()36 * 由于多态和类型转换问题,需要进行健壮性判断37 * 总会被重写,而Object中仍有equals方法是因为它是所有对象的父类,如果没有实现(是抽象方法)38 * 以后每个类中,不管是否有其他功能,都有先实现该功能,不方便39 */

40 public booleanequals(Object obj){41 if(!(obj instanceofObjectSuperDemo1)){42 //return false;

43 throw new ClassCastException("类型不匹配");44 }45 ObjectSuperDemo1 o=(ObjectSuperDemo1)obj;46 return this.num==o.num;47 }48 public inthashCode(){49 returnnum;50 }51 }

Object对象

ab6a448291ab365a76a74ad5b28754cc.png

11、包package:使用编译器(如eclipse等)时,当建立一个类,会提示选择包对类进行管理,在windows系统中是以文件夹形式体现的。如果没有使用编译器手动建立Java文件,其中使用package时应该建立相应的文件夹(可以使用javac.exe中的命令/手动建立),并将class文件移入文件夹中才能运行。

128e917d66b77cdd3fb954f42f71f5b7.png

使用包之后的注意点:

1、注意类名前应该加包名,

2、注意路径为包的路径,

3、想要被包外的类访问,必须将类的权限设置为public;并且其中的方法必须是public才能被其他包访问

使用包的一个问题就是写类时需要加上包名,不方便。Java中可以使用import关键字导入这个包.类文件,然后就可以直接使用类名访问。

jar包:是将Java中的包文件进行压缩形成的jar文件,jar文件不需要解压就可以被用来访问其中的包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值