当前位置: 首页 > 编程日记 > 正文

java异常类 Object类

1.Object类
Object类是所有类的父类,是最顶层的父类.

当一个类没有直接继承其它父类时,这个类的直接父类就是Object类.
class Person {
...
}

等价于

class Person extends Object {
...

}

Object 里的equals方法:

boolean equals(Object obj):判断当前对象与obj对象的地址是否一样,如果一样就返回true,否则返回false;

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


因为object类自带的equals方法不能满足需求,所以重写equals方法;
重写的目标:
1.如果两个对象的地址一样就返回true;
2.否则 如果两个对象中数据都一样也返回true;
3.否则 返回false;

使用eclipse快捷生成代码 Shift+Alt+S

Object 里的 String toString()方法:
是用来返回对象的字符串表示;

Object类中的toString方法默认 返回对象的地址;

 public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}
想要打印对象的内容 就需要重写toString 方法

使用eclipse快捷生成代码 Shift+Alt+S


2.异常

java代码中出现的不正常的情况;

Throwable类是异常类的继承结构中最顶层的异常类;


Throwable
|--Error:错误,java代码中出现非常严重的问题,不修改代码问题解决不了,就象人患了癌症,不动手术活不下去;
|--Exception:异常,java代码中出现一般的问题,只要处理一下就解决了.就象人患了感冒,发烧,只要吃点药就可以了.
|-运行时异常:RuntimeException:NullPointerException,ArrayIndexOutOfBoundsException;
|-编译时异常:FileNotFoundException,IOException;

通常说的异常值的是Exception,不是Error.

怎么区分是Error还是Exception?
异常的名字如果是以Error结尾的,表示这个异常是一个错误: java.lang.OutOfMemoryError
异常的名字如果是以Exception结尾的,表示这个异常是一个普通的异常:java.io.FileNotFoundException

常见的异常:
1.空指针异常:NullPointerException;
2.数组索引越界的异常:ArrayIndexOutOfBoundsException;
3.文件找不到的异常:FileNotFoundException;
4.类型转换异常:ClassCastException;
5.IO异常:IOException;

` 1.JVM处理异常的过程:
1.程序执行到出错的那一行代码时,JVM创建了一个异常对象:new ArrayIndexOutOfBoundsException(5);
2.JVM会把异常对象抛出给这一行代码所在的方法:printArray(int[] iArray);
3.由于printArray方法没有处理异常,所以这个方法会把异常抛给方法的调用者main方法;
4.main方法接收到异常对象后也没有处理,所以main方法把异常对象抛给它的调用JVM;
5.JVM接收到异常之后,打印异常信息,结束程序的运行;


2.自己在程序中创建异常对象并抛出

1.确定出错的那一行代码;
2.在满足某个条件后,创建异常对象:
new 异常类名(异常的描述信息);
3.使用throw关键字把刚才创建的异常对昂向外抛出:
throw new 异常类名(异常的描述信息);





4.处理异常

第一种处理方法:

捕获式处理:

使用try{}catch{}代码块包裹住可能会出现异常的代码.

    格式1:
/*
* 第一种处理方式的格式:
* try{
* 可能会出现异常的代码;
*   }catch(异常类名 异常的对象名){
*      处理异常的代码;
*   }

*/
 
示例代码:
public static void printArray(int[] iArray){

System.out.println(iArray[0]);
// 捕获处理异常
try{
// 可能会出现异常的代码
   System.out.println(iArray[5]);
   System.out.println("我是也是try里面的代码....");
}catch(ArrayIndexOutOfBoundsException e){
// 处理异常的代码;
System.out.println("数组的长度不能小于6!");
}

// try..catch语句之后的代码,在捕获住异常之后,会继续被执行
System.out.println("程序要没有结束..try..catch语句之后的代码..");
}


 
格式2:
/*
* 第二种处理方式的格式:
* try{
* 可能会出现异常的代码;
*   }catch(异常类名 异常的对象名){
*      处理异常的代码;
*   }finallay{
 
    不管程序是否抛出异常,都必须要执行的代码写在这个位置;
     }
}

*/
 
 
  不管try代码块中的程序是否抛出异常,finally代码块中的程序都会被执行;
  
示例代码:
public static void main(String[] args) {
FileWriter fw = null;
try{
// 可能会出现异常的代码
fw = new FileWriter("D://a.txt");
// 如果上面一行抛出异常,下面这行代码将不会被执行
fw.write("hello");
}catch(IOException e){
System.out.println("文件找不到或者写入数据错误!");
}finally{
// 不管try代码块中的程序是否抛出异常,finally代码块中的程序都会被执行;
System.out.println("finally代码块...");
try {
fw.close();
}catch (NullPointerException e) {
System.out.println("空指针异常!");
}catch (IOException e) {
System.out.println("IOException!");
}
}
// 上面的异常如果被捕获住了,下面的代码会继续被执行
System.out.println("try...catch..finally语句之后的代码....");
}


捕获处理的好处:

可以自己捕获和处理异常,并让try...catch..语句之后的代码继续执行;




第二种处理方式:
声明式处理:

在方法的小括号后面使用throws 关键字,把方法中可能会抛出的异常类名列出来,多个异常类名之间用逗号隔开;

格式:

修饰符 返回值类型 方法名(参数列表) throws 异常名1,异常名2...{
方法体;
}

意思是告诉这个方法的调用者必须处理声明出来的异常;

示例代码:
public static void method03() throws IOException,NullPointerException{

FileWriter fw = null;
fw = new FileWriter("S://a.txt");
fw.write("hello");
fw.close();
}


3.自定义常


因为JDK中提供的异常类不能满足我们的需要,或者异常的类名太长,或者不好学习,所以我们要自定义异常类;
 
如何自定义异常呢?

jdk定义异常的特点:
1.写一个类,继承异常类(既可以是Throwable类,也可以是它的子类);
2.在类中定自己的构造方法;
3.在自己的构造方法中调用父类的构造方法;


自定义异常,按照jdk的定义方式:
1.写一个类,继承异常类(既可以是Throwable类,也可以是它的子类);
2.在类中定自己的构造方法;
3.在自己的构造方法中调用父类的构造方法;

示例代码:
//1.写一个类,继承异常类(既可以是Throwable类,也可以是它的子类);
public class NoAgeException extends RuntimeException{


// 2.在类中定自己的构造方法;
public NoAgeException(){


//3.在自己的构造方法中调用父类的构造方法;
super();
}

public NoAgeException(String message){
//3.在自己的构造方法中调用父类的构造方法;
super(message);
}
}

使用自定义异常:

1.创建异常对象;
2.使用throws关键字抛出;

示例代码:

public class Person {
....

public void setAge(int age) {

if(age > 150 || age < 0){
throw new NoAgeException("年龄不能大于150,不能小于0!");
}
this.age = age;
}

....


}


相关文章:

『TensorFlow』卷积层、池化层详解

一、前向计算和反向传播数学过程讲解 这里讲解的是平均池化层&#xff0c;最大池化层见本文第三小节 二、测试代码 数据和上面完全一致&#xff0c;自行打印验证即可。 1、前向传播 import tensorflow as tf import numpy as np# 输入张量为33的二维矩阵 M np.array([[[1], [-…

个人计算机用户隐私保护全接触(2)

在第一部分中&#xff0c;我们已经详细讨论了有关如何加固系统和应用数据加密来保护用户隐私的方式&#xff0c;现在&#xff0c;就跟雪源梅香一起了解其它保护用户隐私的方法。1、清除计算机当中的用户操作痕迹我们应当在使用完计算机后&#xff0c;对操作所产的痕迹进行全面清…

java日期相关的类正则表达式

常用的API Date、Math、DateFormat、Calendar、正则表达式 Data类 public class DateDeom {public static void main(String[] args) {//创建日期类的对象Date datenew Date();// 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。long timedate.getTim…

M_Map画南海水深地形图

数据来自Etopo1全球地形和水深数据。 其分为两个版本&#xff0c;Ice Surface和Bedrock&#xff0c;两个版本基本一致。不同之处在于在处理南极洲和Greenland地形时&#xff0c;前者给出的是加上冰盖层之后的高程&#xff0c;后者给出的是岩床的高程。 在每个子版本下又有多种数…

blackberry Jvm error 104 错误(Device Simulator)

把模拟器目录下的这个文件 **-fs.dmp 删掉或者搬个家就成啦&#xff0c;然后重启模拟器 每次启动它都会生成这个文件&#xff0c;具体原因还待研究 8300 GSM GPRS EDGE8310 8300 GPS8320 8300 Wi-Fi8330 8310 CDMA Ev-DO Video Recording (!)转载于:https://www.c…

关于Map的key值的问题

HashMap<StringBuffer,String> strmap new HashMap<>();StringBuffer snew StringBuffer("1");strmap.put(s,"1");s.append("2");System.out.println(strmap.get("1")); null 与之前研究的value值的问题一样&#xff0c;…

田志刚:要你共享,但不告诉你共享什么

案例所述的问题很典型&#xff0c;是国内各类机构做知识管理的一个典型&#xff1a;我需要你共享&#xff0c;但不告诉你共享什么。问题是&#xff0c;我也不知道你该共享什么。这样的结果就是共享出来的东西都没用也都有用&#xff0c;因为你根本没有标准&#xff0c;所以我说…

Oracle Data Guard 理论知识

RAC&#xff0c; Data Gurad&#xff0c; Stream 是Oracle 高可用性体系中的三种工具&#xff0c;每个工具即可以独立应用&#xff0c;也可以相互配合。 他们各自的侧重点不同&#xff0c;适用场景也不同。 RAC 它的强项在于解决单点故障和负载均衡&#xff0c;因此RAC 方案常用…

JavaScript脚本文件学习总结

javaScript 学习总结 什么是JavaScript和javaScript的特点 是一种解释型脚本语言&#xff08;代码不进行预编译&#xff09;&#xff0c;不需要进行编译&#xff0c;直接嵌套在HTML页面&#xff0c;将静态的页面转变成支持用户交互的动态页面。 文件类型是.js 特点 解释性&…

Git note

feat&#xff1a;新功能&#xff08;feature&#xff09; fix&#xff1a;修补bug docs&#xff1a;文档&#xff08;documentation&#xff09; style&#xff1a; 格式&#xff08;不影响代码运行的变动&#xff09;注意不是 css 修改 refactor&#xff1a;重构&#xff08;即…

说客是一种俗文化

说客是一种俗文化阿祥中国移动旗下的139.com社区改版&#xff0c;没有张扬&#xff0c;也没有滥发广告&#xff0c;还是引起了业内人士的广泛减少。为什么&#xff1f;以笔者之见&#xff0c;这个改版后的社区打出“说客”这张牌&#xff0c;是互联网文化的一个全新的创意&…

leetcode 203 Remove Linked List Elements

&#xfeff;&#xfeff;Remove all elements from a linked list of integers that have valueval. ExampleGiven: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val 6Return: 1 --> 2 --> 3 --> 4 --> 5 我的解法&#xff1a; // Linklist.cpp …

eclipse实用快捷键

eclipse的快捷键非常的多&#xff0c;全部记录一遍也不利于查看&#xff0c;记录一些比较实用的更加方便。 ctrl / 注释单行/取消注释 ctrl Z 回退一步 ctrl Y &#xff08;回退后&#xff09;前一步 ctrl S 保存 ctrl D 删除行 alt / 补全提示 ctrl …

集合 泛型 迭代器

什么是集合 集合与数组的区别 数组的长度是固定的&#xff0c;集合的长度是可变的数组中可以存储任何类型的元素&#xff08;基本类型和引用类型&#xff09;&#xff0c;集合只能存储引用类型的。 集合 在java中提供了很多的集合&#xff0c;因为用户要求存储不同接口的数据…

《监控》再起风云,连同创作中的《监控2》成功牵手影视公司

“监控”&#xff0c;辞海上的解释为&#xff1a;监测并进行控制。 “监控”&#xff0c;百度百科解释为&#xff1a;监控&#xff0c;职场谍战小说。 从2个月内超过230万人阅读的天涯热帖&#xff0c;到上市两月即获重印的畅销图书&#xff0c;神秘作者搏击带着他的《监控》在…

跟我学交换机配置(四)

以下内容摘自笔者最新图书《Cisco/H3C交换机配置与管理完全手册》。本书在51CTO上的样章试读地址为&#xff1a;http://book.51cto.com/art/200908/142118.htm 8.5.4 创建PVLAN 在IOS和CatOS系统交换机中都可以配置PVLAN&#xff0c;所以下面也分别予以介绍。 1. IOS系统交换机…

使用nc传输文件和目录【转】

方法1&#xff0c;传输文件演示&#xff08;先启动接收命令&#xff09; 使用nc传输文件还是比较方便的&#xff0c;因为不用scp和rsync那种输入密码的操作了把A机器上的一个rpm文件发送到B机器上需注意操作次序&#xff0c;receiver先侦听端口&#xff0c;sender向receiver所在…

假如有Thread1、Thread2、ThreaD3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?...

有两种方法&#xff1a; 第一种方法&#xff1a; 一般情况&#xff0c;我们实现多线程都是Thread或者Runnable(后者比较多)&#xff0c;但是&#xff0c;这两种都是没返回值的&#xff0c;所以我们需要使用callable(有返回值的多线程)和future(获得线程的返回值)来实现了。 /**…

ORA-00907:缺少右括号

在创建以下表的时候出现ORA-00907&#xff1a;缺少右括号的错误&#xff0c;最后发现是字符串类型写错了&#xff0c;VARCHAR2写成了VARCAHR2&#xff0c; /**//* DBMS name: ORACLE Version 9i2 *//* Created on: 2010-4-23 12:28:27 …

Java Web项目第二次总结

学生管理系统 问题 jQuery 不熟悉El需要复习servlet的内置对象 新认识的知识 利用servlet的 Session对象实现权限的验证。它的作用是:只能通过登录后才能进入主界面&#xff0c;否则不能进入。没有加权限验证前是可以根据页面的完整路径进入主界面&#xff0c;可以不输入密…

软件项目中的需求分析具体方法探讨之一

这家单位&#xff0c;我进去没多久&#xff0c;满打满算也就刚两月多一周而已。我也不是开发部的人&#xff0c;但是&#xff0c;看到了一些事情&#xff0c;纯为有感而发。领导想做个CRM&#xff0c;于是&#xff0c;开发部的人写了&#xff0c;当然&#xff0c;正式的需求分析…

portscaner 多线程、多协程并发端口扫描

import socket,time,re,sys,os,threading import gevent from gevent import monkey monkey.patch_all()socket.setdefaulttimeout(2)#该方法用来处理用户数据的port范围&#xff0c;并计算范围内的port&#xff0c;将其添加到列表中&#xff0c;将列表返回 def handle_port(in…

POJ 2828 Buy Tickets | 线段树的喵用

题意: 给你n次插队操作,每次两个数,pos,w,意为在pos后插入一个权值为w的数; 最后输出1~n的权值 题解: 首先可以发现,最后一次插入的位置是准确的位置 所以这个就变成了若干个子问题, 所以用线段树维护一下每个区间剩余多少位置可选 对于一个pos 如果左儿子的剩余超过当前位置,就…

Ext结合DWR的关键代码(运行成功的DWRProxy)

关键代码如下&#xff1a;Store为&#xff1a;var ds new Ext.data.Store({ proxy: new Ext.data.DWRProxy({ callback: Folder.getMessageList, params: { start: 0, limit: PAGE_SIZE } }), // proxy: new…

serlvet 九大内置对象

隐式对象 说明 request 转译后对应HttpServletRequest/ServletRequest对象 response 转译后对应HttpServletRespons/ServletResponse对象 session 转译后对应HttpSession对象 application 转译后对应ServletContext对象 out 转译后对应JspWriter对象&#xff0c;其…

网路游侠:某软件版WEB应用防火墙试用

去年的这个时候&#xff0c;游侠(www.youxia.org)认为WAF都是硬件的&#xff0c;后来在网上看到这个在国内做的不错的牌子。居然是软件的WAF&#xff0c;这样的话&#xff0c;一些服务器在机房托管的用户就特别需要这样的产品&#xff0c;因为1U的设备在电信机房的托管费用都有…

P2172 [国家集训队]部落战争 二分图最小不相交路径覆盖

二分图最小不相交路径覆盖 #include<bits/stdc.h> using namespace std; const int MAXN 5550; const int MAXM 1000005; const int INF 1000000050; int Head[MAXN], cur[MAXN], lev[MAXN], to[MAXM << 1], nxt[MAXM << 1], f[MAXM << 1], ed 1, …

IO流 字符流 字节流 缓冲流 文件的复制

IO流 IO概述 IO流就是一个管道&#xff0c;是用来在设备之间传输数据 input&#xff1a;相对于内存/程序 往进走输入流 output&#xff1a;相对于内存/程序 往硬盘写入 分类 根据数据进出方式 1、输出流&#xff1a; FileWriter 字符输出流BufferedWriter 字符缓冲输出…

强烈推荐:240多个jQuery插件

http://www.cnblogs.com/Terrylee/archive/2007/12/09/the-ultimate-jquery-plugin-list.html转载于:https://www.cnblogs.com/HughTan/archive/2010/05/14/1735376.html

FreeBSD Ports加速的方法

使用代理。 在/etc/make.conf中设置&#xff1a;FETCH_ENV "HTTP_PROXYIP[:端口]"如果需要&#xff0c;在FETCH_ENV值后面加入空格&#xff0c;HTTP_PROXY_AUTHbasic:*:user:password利用其他机器下载的文件... 首先&#xff0c;请确保2台机器cvsup的一致&#xff0…