一.Object类
     Object类是最顶端的类,其它类都是它的子类,它的方法可以被继承.如果定义的类没有继承别的类,那它的直接父类就是Object.如果方法参数类型为object类型,

则调用方法可以传递任意类型的值(相当于多态);同理,如果方法返回值为Object类型,那么给方法的返回数据值为任意类型.
     两种常用方法:toString()/equals()

(1)toString方法

源码:

public String toString(){
         return getClass().getName() + "@" + Integer.toHexString(hashCode());
     }

覆写前直接打印对象p1,与p1.toString()打印的结果都是地址值,所以需要重写toString方法,使其能够输出所有成员变量的值.

(2)equals方法

源码:

public boolean equals(Object obj) {
         return (this == obj);
     }

对于原始方法来说比较的是两个对象的地址.

代码:

  1 //覆写toString()
2 class Person{
3 private String name;
4 private int age;
5
6 public Person(String name, int age){
7 this.name = name;
8 this.age = age;
9 }
10
11 public String getName(){
12 return this.name;
13 }
14
15 public int getAge(){
16 return this.age;
17 }
18
19 @Override
20 public String toString(){
21 StringBuilder sb = new StringBuilder();
22 sb.append("name:").append(this.name).append("\t").append("age:").append(this.age);
23 return sb.toString();
24 }
25
26 @Override
27 public boolean equals(Object obj){
28 //首先判断地址值,地址值相等则一定是同一对象
29 if(this == obj){
30 return true;
31 }
32
33 //然后判断是否是同一类,若不是同一类,则必定不相等
34 if(!(obj instanceof Person)){
35 return false;
36 }
37
38 //如果是同一类,则比较其属性,属性相同,则为同一事物
39 Person p = (Person) obj;
40 if(this.name == p.name && this.age == p.age){
41 return true;
42 }else{
43 return false;
44 }
45
46 }
47 }
48
49
50 public class PersonDemo{
51 public static void main(String[] args){
52 Person p = new Person("zhangsan",20);
53 Person p1 = new Person("zhangsan",20);
54 Person p2 = new Person("zhangsan1",20);
55 System.out.println(p);
56 System.out.println(p.equals(p1));
57 System.out.println(p.equals(p2));
58 }
59 }
60

二.try--catch--finally

(1)异常概念及种类
     异常是程序中出现的问题,可以把异常封装成java中的类.java中异常的根类是Throwable.下面分为两个子类:Error和Exception.

Error:严重问题,需修改代码才能解决.一般指与虚拟机相关的问题,如系统崩溃/虚拟机错误/动态链接失败等

Exception:一般问题,可能会出现.一旦出现简单处理即可(??).如IOException.一般说的异常指Exception,包括Checked异常和Runtime异常.
     目前遇到的异常有如下几种:
         NumberFormatException  数字格式化异常
         ArithmeticException 算术异常
         ArrayIndexOutOfBoundsException  数组超出绑定异常:没有输入参数,或输入的参数不够
         NullPointerException 空指针异常:使用了未实例化的对象
         NoSuchMethodError:main  找不到主方法
         ClassCastExeption:A 类转换异常
         IllegalThreadStateException:非法的线程状态异常
         IOException: IO流异常

(2)异常的处理方式
     异常处理方式:捕获处理:try--catch--finally 和 声明抛出处理 throws

(3)jvm处理异常的过程
     jvm处理异常的过程:
         1.程序出错,创建异常对象
         2.抛出异常
         3.处理异常:捕获处理和声明抛出处理

(4)抛出异常-throw:

throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行.

格式: throw new 异常类名(参数);

代码:

  1 class ArrayTools{
2 public static int getElement(int[] arr, int index){
3
4 if(arr == null){
5 throw new NullPointerException("arr指向的数组不存在");
6 }
7
8 if(index < 0 || index >= arr.length){
9 throw new ArrayIndexOutOfBoundsException("错误的角标"+index+"索引在数组中不存在");
10 }
11
12 int element = arr[index];
13
14 return element;
15 }
16 }
17
18 public class ExceptionDemo{
19 public static void main(String[] args){
20 int[] arr = {1,2,3};
21 //int num = ArrayTools.getElement(null,2);//ExceptionDemo.java:21
22 int num1 = ArrayTools.getElement(arr,5);//ExceptionDemo.java:22
23 //System.out.println("num="+num);
24 System.out.println("num1="+num1);
25 }
26 }
27

控制台显示:

[Exception in thread "main" java.lang.NullPointerException: arr指向的数组不存在
     at ArrayTools.getElement(ExceptionDemo.java:5)
     at ExceptionDemo.main(ExceptionDemo.java:21)]

[Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 错误的角标5索引在数组中不存在
     at ArrayTools.getElement(ExceptionDemo.java:9)
     at ExceptionDemo.main(ExceptionDemo.java:22)]

(5)声明异常(throws):定在方法声明的后面,告诉方法的调用者去处理异常,一般用于Checked异常

如果方法内抛出了Checked异常,而没有捕获处理,那么必须通过throws进行声明,让调用者去处理.

格式: 修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2

代码:

  1 //import java.io.*;
2 import java.io.FileReader;
3 import java.io.FileNotFoundException;
4 import java.io.IOException;
5
6 public class ExceptionTest{
7 public static void main(String[] args) throws FileNotFoundException,IOException{
8 FileReader fr = new FileReader("a.txt");//ExceptionTest.java:8
9 int c = fr.read();
10 System.out.println(c);
11 }
12 }
13

控制台显示:

[Exception in thread "main" java.io.FileNotFoundException: a.txt (系统找不到指定的文件。)
     at java.io.FileInputStream.open0(Native Method)
     at java.io.FileInputStream.open(FileInputStream.java:195)
     at java.io.FileInputStream.<init>(FileInputStream.java:138)
     at java.io.FileInputStream.<init>(FileInputStream.java:93)
     at java.io.FileReader.<init>(FileReader.java:58)
     at ExceptionTest.main(ExceptionTest.java:8)]

(6)捕获异常:
     eclipse快捷键 alt shift z

格式:
         try{
             可能会出现异常的代码
         }catch(异常类名 异常对象名){
             处理异常的代码一;
             使用异常对象打印异常信息;
         }finally{
             绝对执行的代码块;
             (一般用来释放资源)
         }

代码:

  1 import java.io.IOException;
2 import java.io.FileReader;
3
4 public class TryTest{
5 public static void main(String[] args){
6 FileReader fr = null;
7 try{
8 int c = fr.read(); //TryTest.java:8
9 System.out.println(c);
10 }catch(IOException e){
11 System.out.println("读取文件时出现了异常");
12 }finally{
13 if(fr != null){
14 try{
15 fr.close();
16 }catch(IOException e){
17 System.out.println("关闭流时出现了问题");
18 }
19 }
20 }
21
22 }
23 }
24

控制台显示:

[Exception in thread "main" java.lang.NullPointerException
     at TryTest.main(TryTest.java:8)]

(7)异常注意事项:
     1)try中创建的变量只能在try代码块中使用,出try后面的代码块即无效,局部变量.
     2)捕获代码后,finally花括号后的代码将继续执行.
     3)打印异常方法:e.printStackTrace().
     4)方法中已经出现返回语句返回值A,再在finally中修改A值,则最终的返回值仍为修改前A的值。但在该方法中A的值已经被修改了.
     代码:

5)一次捕获一次处理 catch大异常/一次捕获多次处理  多个catch/多次捕获多次处理 多个try-catch
     6)先处理小异常,再处理大异常
     7)除非在try或catch块中执行了退出虚拟机的方法(System.exit(1):非零为非正常退出),否则,无论try或catch中执行怎样的代码,finally中的语句一定会执行.
     8)关于return:
     当java程序执行到try/catch块中的return或throw语句时,会先去寻找finally块中是否也含有return或throw等结束方法的语句,如果有则执行finally
     块中的return或throw语句,并且终止方法,不再执行任何语句;
     如果finally块中没有结束方法的语句,刚程序返回try/catch块中执行其return等语句,并终止方法.

三.自定义异常
     1.让自定义的类继承异常类(是Throwable或其子类)
         如果继承的父类是编译时异常,则抛出后需要调用方法处理.
         如果继承的父类是运行时异常,不需要处理
     2.在自定义的类里添加构造方法,在构造方法调用父类的构造方法.

//自定义异常举例

  1 class NoAgeException extends Exception{
2 NoAgeException(){
3 super();
4 }
5
6 NoAgeException(String message){
7 super();
8 }
9 }
10
11 class Person{
12 private String name;
13 private int age;
14
15 Person(String name, int age) throws NoAgeException{
16 if(age < 0 || age > 200){
17 throw new NoAgeException("年龄数值非法");
18 }
19
20 this.name = name;
21 this.age = age;
22 }
23
24 public String toString(){
25 return "name="+name+"age="+age;
26 }
27 }
28
29 public class ExceptionDemoTest{
30 public static void main(String[] args){
31 try{
32 Person p = new Person("xiaoming", 20);
33 System.out.println(p);
34 }catch(NoAgeException ex){
35 System.out.println("年龄异常");
36 }
37 System.out.println("over");
38 }
39 }
40

Object类-try-catch-finally-throw-throws-自定义异常的更多相关文章

  1. java:异常机制(try,catch,finally,throw,throws,自定义异常)

    * String类中的格式化字符串的方法: * public static String format(String format, Object... args):使用指定的格式字符串和参数返回一个 ...

  2. 顺平讲try catch finally throw throws(精华)

    try catch finally  有点像if else语句 还有像javascript的服务器执行成功后的回调函数,success:function(){ 进行处理 }; throws的意思是将异 ...

  3. Java基础-异常处理机制 及异常处理的五个关键字:try/catch/finally/throw /throws

    笔记: /** 异常处理机制: 抓抛模型 * 1."抛", 一旦抛出,程序终止! printStackTrace()显示异常路径! * 2."抓", 抓住异常 ...

  4. 【java】对象变成垃圾被垃圾回收器gc收回前执行的操作:Object类的protected void finalize() throws Throwable

    package 对象被回收前执行的操作; class A{ @Override protected void finalize() throws Throwable { System.out.prin ...

  5. -1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常

      异常   异常:异常就是Java程序在运行过程中出现的错误. 异常由来:问题也是现实生活中一个具体事务,也可以通过java 的类的形式进行描述,并封装成对象. 其实就是Java对不正常情况进行描述 ...

  6. java异常处理之throw, throws,try和catch

    转自 http://blog.csdn.net/zhouyong80/article/details/1907799  程序运行过程中可能会出现异常情况,比如被0除.对负数计算平方根等,还有可能会出现 ...

  7. Java throw throws try...catch区别

    java里的异常多种多样,这是一种非常有用的机制,它能帮助我们处理那些我们未知的错误,在java里,关于异常的有throw throws,还有一个try catch 程序块.接下来我们挨个看看这几个的 ...

  8. 【Java】异常 —— throw, throws, try catch 相关内容

    嗯……面试考到了这个,又是一个如无意外 那么接下来就总结吧 一.什么是异常 程序运行过程中发生的异常事件. RuntimeException通常是因为编程员因为疏忽没有检查而引起的错误. 二.Exce ...

  9. 各种异常 及异常类和Object类

    Day05 异常 Object类 equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较.Object类中的equals方法内部使用的就是==比较运算符. 2. 描述人这个 ...

  10. 各种异常 及异常类和Object类 Math类

    Day05 异常 Object类 equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较.Object类中的equals方法内部使用的就是==比较运算符. 2. 描述人这个 ...

随机推荐

  1. 在python 3.6下用pip 安装第三方库,比如pip install requests,老是报错 Fatal error in launcher: Unable to create process using '"'

    解决办法:我把python.exe 修改为了python3.exe ,为了兼容python2, 后来把python2从环境变量里删除,把python3.exe修改为了python.exe 就解决了,再 ...

  2. # program once 用途 及与 ifndef使用异同

    在头文件中用这种写法就是为了该头文件被重复包含时不会出现符合重定义的错误. 效果等同于     #ifndef __xxx__     #define __xxx__     ...    #endi ...

  3. view如何从action中取得数据和 Html辅助方法

    方式:1使用弱类型取,2,使用强类型,两者的差别在于view页面最上方声明的方式   如果使用弱类型接受来自控制器的数据,在view页面里完全不需要有任何的生命,数据可以从ViewData,ViewB ...

  4. OVS调试介绍

    基本概念 基本命令 ovs-vsctl # ovs-vsctl show 96a55a7e-f49c-4dbe-b359-bafdff2ccad7 Manager "ptcp:6640:92 ...

  5. Apt本地源制作

    方法一 缓存deb包 # apt install XXX # mkdir -p /usr/local/mydebs # find /var/cache/apt/archives/ -name *.de ...

  6. 根据rowid删除最新数据(rowid最大为最新数据)(转)

    https://blog.csdn.net/liuyuehui110/article/details/43524379

  7. 检查浏览器是否有此插件如flash

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 基于canvas绘图 缩放 做标记

    技术要点: 1.img 绘制到canvas 2.绘制完成以后进行拖拽,缩放 3.使用canvas画图,在绘制的img上进行标记划线,当然可以实现跟过功能,例如百度地图的功能,做单个标记,区域标记等. ...

  9. json 打印

    JsonObject jsonObj = new JSONObject(); jsonObj.put("success",true); jsonObj.put("msg& ...

  10. java基础第六篇之常用思想、封装、继承和多态

    a.累加求和思想:求1~100的和,求数组/集合中元素的和,求偶数的数,求总分 int sum=0//循环外部定义sum变量,循环里面对每个元素累加 for (; ; ) { //sum+=数据 } ...