class-直接输出异常类对象是异常信息,而直接输出普通类对象却是存储地址?

问题描述

直接输出异常类对象是异常信息,而直接输出普通类对象却是存储地址?

1、Exception e
System.out.print(e);

2、class A{...}
A a = new A();
System.out.print(a);

为什么 1 会输出具体的异常信息,而 2 却输出的是存储地址?

解决方案

打印对象实际上调用对象的toString()方法
Exception类中的toString()方法public String toString()返加的是以下字符串的串联:
此对象的类的 name +": "(冒号和一个空格)+调用此对象 getLocalizedMessage() 方法的结果 ;
普通类中的toString()方法public String toString()返回的是该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。

解决方案二:

因为System.out.print(object a);会默认调a的toString()方法:
1.excepiton继承Throwable,Throwable中有重写过toString()方法 所以会打印出异常信息
2.a对象默认继承object,object中的toString()方法就是打印地址 return getClass().getName() + "@" + Integer.toHexString(hashCode());

解决方案三:

输出什么是由对象中的toString()方法决定的,在你直接输出对象的时候,会自动调用对象的toString()方法,要想改变直接输出对象的内容,在对象类中重写这个方法就可以了。

解决方案四:

没有重写对象的toString()方法,就会变成该对象的储存地址

时间: 2024-10-06 00:37:19

class-直接输出异常类对象是异常信息,而直接输出普通类对象却是存储地址?的相关文章

C++运行时获取类型信息的type_info类与bad_typeid异常_C 语言

type_info 类type_info 类描述编译器在程序中生成的类型信息.此类的对象可以有效存储指向类型的名称的指针. type_info 类还可存储适合比较两个类型是否相等或比较其排列顺序的编码值.类型的编码规则和排列顺序是未指定的,并且可能因程序而异. 必须包含 <typeinfo> 标头文件才能使用 type_info 类. type_info 类的接口是: class type_info { public: virtual ~type_info(); size_t hash_cod

Java_异常类(错误和异常,两者的区别介绍)_java

在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出).Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性. Throwable 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类. ①.Exception(异常)是应用程序中可能的可预测.可恢复问题.一般大多数异常表示中度到轻度的问题.异常一般是在特定环境下产生的,通常出现在代码的特定方法和操作中.在 Ech

java-怎么抛出自定义异常类中内部异常类?

问题描述 怎么抛出自定义异常类中内部异常类? 问题在代码中已标出,请大婶解疑,能不能这样做,这样做能不能实现 import javax.swing.JOptionPane; public class PasswdException extends Exception { PasswdException(int i) { if (i < 6) { System.out.println("密码不能小于六位"); } if (i > 6) { System.out.println

编写高质量代码改善C#程序的157个建议[用抛异常替代返回错误、不要在不恰当的场合下引发异常、重新引发异常时使用inner Exception]

原文:编写高质量代码改善C#程序的157个建议[用抛异常替代返回错误.不要在不恰当的场合下引发异常.重新引发异常时使用inner Exception] 前言 自从.NET出现后,关于CLR异常机制的讨论就几乎从未停止过.迄今为止,CLR异常机制让人关注最多的一点就是"效率"问题.其实,这里存在认识上的误区,因为正常控制流程下的代码运行并不会出现问题,只有引发异常时才会带来效率问题.基于这一点,很多开发者已经达成共识:不应将异常机制用于正常控制流中.达成的另一个共识是:CLR异常机制带来

JAVA运行时异常及检查式异常

java运行时异常是可能在java虚拟机正常工作时抛出的异常.java提供了两种异常机制.一种是运行时异常(RuntimeExepction),一种是检查式异常(checked execption). 检查式异常:我们经常遇到的IO异常及sql异常就属于检查式异常.对于这种异常,java编译器要求我们必须对出现的这些异常进行catch 所以 面对这种异常不管我们是否愿意,只能自己去写一堆catch来捕捉这些异常. JDK1.7中有: EOFException 文件已结束异常 FileNotFou

电脑出现应用程序发生异常未知的软件异常怎么办

电脑出现应用程序发生异常未知的软件异常怎么办   应用程序发生异常未知的软件异常的原因分析 1.应用程序的组件丢失造成,至于应用程序文件为什么会丢失,有时候是用户自己误删除导致,更多时候则是由病毒木马造成的,在当今网络时代,有些病毒作者为了获取不正当利益,常在一些应用程序的某个组件上捆绑病毒,并在一些网站上提供这些有毒的应用程序给网友免费下载,当把用户下载了这些软件并安装到自己电脑上面时,安全软件会检测到这些感染了病毒木马的应用程序组件并将其杀掉.这就造成应用程序文件缺失,从而导致在运行程序时发

servlet SearchVisit 的某一服务方法创建了未捕获到的异常。创建的异常:java.lang.NullPointerException

问题描述 RT:本地tomcat无问题.[15-3-49:45:13:731GMT+08:00]00000032servletEcom.ibm.ws.webcontainer.servlet.ServletWrapperserviceSRVE0068E:应用程序中servletSearchVisit的某一服务方法创建了未捕获到的异常.创建的异常:java.lang.NullPointerExceptionatSearchVisit.performTask(SearchVisit.java:217

应用程序发生异常 未知的软件异常 (0xc06d0017e)解决方法

[科普]应用程序-操作系统-内存 今天微问推荐给我回答这样的问题"应用程序发生异常 未知的软件异常 (0xc06d0017e),位置为0x7c812fd3.是什么意思",回忆了一下,似乎以前有不少人问过我,包括我的亲人在内.再一看提问的人来自浙江丽水,好吧,认真回答一下再转到我的博客上面.我想说,对于这种问题,并不是我不用心帮忙解决,真的是不容易处理. 这些16进制数表示内存地址,这些地址在不同时间可能被不同的程序占用着.对于普通用户来说,想通过这样的错误信息来判断哪个程序出了什么样的

《数据结构与算法:Python语言描述》一2.5类定义实例:学校人事管理系统中的类

2.5类定义实例:学校人事管理系统中的类 作为本章内容的总结,现在考虑一个综合性的实例:为一个学校的人员管理系统定义所需的表示人员信息的类,它们都是数据抽象. 2.5.1问题分析和设计 学校里有两大类人员,即学生和教职工,他们都是需要在系统里表示的对象.分析这两类人员需要记录的信息,可以看到这里有一些值得注意的情况:与两类人员有关的信息中存在一些公共部分,又有各自的特殊情况: 首先,作为人员信息,无论学生或教职工都有姓名.性别.年龄等公共信息.另外,为了便于学校管理,学生应该有一个学号,教职工也