一.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. SQL 优化总结(三) SQL子句

    SQL子句 尽可能编写优化器可以优化的语句. 1. SELECT子句 (1) 在查询Select语句中用Where字句限制返回的行数,避免表扫描,如果返回不必要的数据,浪费了服务器的I/O资源,加重了 ...

  2. 并查集基础 模板题 hdu1232 畅通工程

    模板题 引入并查集——一则有趣的故事 为了解释并查集的原理,我将举一个更有趣的例子.话说江湖上散落着各式各样的大侠,有上千个之多.他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的 ...

  3. win 10 无线标志都不出现

    http://jingyan.baidu.com/article/e75057f2fdd2f1ebc91a89f1.html ipconfig /flushdns netsh winsock rese ...

  4. dede问答汉字变星号

    在ask模块里面,question.php中,发现了2行代码 $data['title'] = preg_replace("#{$GLOBALS['cfg_replacestr']}#&qu ...

  5. CodeForces 489C Given Length and Sum of Digits... (dfs)

    C. Given Length and Sum of Digits... time limit per test 1 second memory limit per test 256 megabyte ...

  6. The Truth About GCHandles

    I've heard several people asking why GCHandle doesn't implement IDisposable, considering it wraps an ...

  7. dialog 设置maxHeight 最大高度

    WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);Displ ...

  8. 无监督学习:Deep Generative Mode(深度生成模型)

    一 前言 1.1 Creation 据说在费曼死后,人们在他生前的黑板上拍到如图画片,在左上角有道:What i cannot create ,I do not understand. Generat ...

  9. 容易忘记的css属性和动画属性

    动画属性 @keyframes 关键帧 --> animation 活泼 (配合使用) transform 变换 --> transition 过渡 (配合使用) 1.animation ...

  10. ue4 2游戏构架相关

    官网:游戏性指南 https://docs.unrealengine.com/latest/CHN/Gameplay/index.html 深入UE4剖析源码,浅出GameEngine设计理念,比较好 ...