我在捕获异常时遇到了一个小问题。我有这样的代码:
Role r=new Role("default");
r.setId(Role.DEFAULT_ID);
u.getRoles().add(r); // u is instance of entity which is in relation manytomany with r
try{
em.persist(u);
}catch(Exception e){
System.out.println(e.getClass().getName()+" - default role not found, creat
我在Precise Rethrow的文档中读到了,
基本上,您可以在方法的抛出子句中列出特定的异常,即使它们没有被catch块显式处理,如果:
try块实际上在某个时间点抛出了特定的异常。
之前的catch块在任何一点上都没有处理特定的异常
方法签名的抛出子句中指定的异常必须位于至少一个由catch块(子类型或超级类型)处理和重新引发的异常的类层次结构中。
看一看代码(注意main的抛出子句)
class OpenException extends Exception {}
class CloseException extends Exception {}
public class
我想知道您对应用try-catch块来捕获异常的正确方式的看法。
假设我有4个层次结构方法,它们的调用方式如下:
method1(){
method2(){
method3(){
method4()
}
morecode that depend of what happend in method3
}
morecode that depend of what happend in method2
}
因此,我所做的是从内到外包装将呈现异常的可能方法,并且由于我的代码依赖于这些方法中发生的不同级别,所以我使用“抛出”
Java在处理类型转换、返回类型的过载方法以及抛出和捕获异常时,清楚地解释了对象的一致性。但是现在我有点困惑于异常,这段代码背后隐藏的概念是什么..
void getNames() throws SQLClientInfoException { /*throws Subclass object to caller*/
try{
// throwing Subclass object to catch block but up-casting to Exception
throw new SQLClientInfoException();
} c
我使用try/catch和throw来处理异常。因此,我使用的是try/catch,捕获错误,其中包括文件不可用等问题,然后在text包含错误值时使用throw。
我的Main()的基本布局如下:
while ((line = sr.ReadLine()) != null)
{
try
{
//get the input from readLine and saving it
if (!valuesAreValid)
{
当我试图在实例初始化(而不是类初始化)块中抛出异常时,我得到了错误:
initializer must be able to complete normally
为什么它不被允许,尽管Java自己做了?
下面的示例创建四个类。由于ArithmeticException,类A在实例化期间失败。这可以通过catch来处理。对于使用NullPointerException失败的B也是如此。但是,当我尝试像在C中那样抛出一个NullPointerException时,程序不能编译。当我尝试在D中定义我自己的RuntimeException时,我得到了同样的错误。所以:
我怎样才能像Java一样做同样的
我有一个类,它使用RAII进行清理,以防出现问题。这意味着类包含一个标志,告诉它工作是否已经完成,如果在调用构造函数时没有设置这个标志,它将执行清理任务并生成日志消息。现在我希望这个类变得更聪明一些,也就是说,如果发生了错误,它应该找出错误,因为工作被放弃了(例如,抛出了异常并调用了析构函数),或者因为有人错过了使用这个类,并且从未真正完成工作。这意味着我必须在析构函数中找出异常是否处于活动状态。如果发现异常,我会生成一条日志消息,可能会打印异常的内容,然后重新抛出它。我猜是这样的。
Foo::~Foo () {
try { /* do not know what to put here
我有以下Java方法:
public Class createClass(Class class) {
try {
// retrieve the professor of the class and check if he exists
Professor professorFound = professorRepository.findById(class.getProfessorId());
if (professorFound != null) {
// if the professor exists, th
相对最近,我开始学习java,这是我独立学习的第一种计算机语言,我想看看我的方法是否有效。在我正在学习的书中,有一个练习告诉我要读一个文件,然后把它写成一个单独的文件,每一行都有编号。
这是我的解决办法
public class FileStuff
{
public static void main (String [] args)
{
System.out.println("Which file do you want to read");
Scanner in = new Scanner(System.in);
我希望下面的代码会在throw t;上引发编译时错误,因为main没有被声明为抛出Throwable,但是它成功编译(在Java1.7.0_45中),并产生如果编译时错误被修复了的输出。
public class Test {
public static void main(String[] args) {
try {
throw new NullPointerException();
} catch(Throwable t) {
System.out.println("Caught "+
我有下面的C++代码,它给了我一个惊喜。问题是,如果我在catch块中抛出了一些东西,除了重新抛出,程序将通过调用abort而终止,并在GCC4中给出错误消息"terminate called throwing an int‘“。如果我只是在catch块中使用"throw;“重新抛出,一切都会好起来的。
#include <iostream>
#include <exception>
#include <stdexcept>
using namespace std;
int main()
{
try{
throw
我很难正确地控制代码中的流。我有一个函数GetVoucherNumberAndApplyToDatabase(),它调用一个单独的函数doPatientEncounterCreate()。如果内部函数抛出异常,我希望外部函数停止它在那里的操作,因为它取决于返回的值。
下面是一些清晰的代码:
//outer function
private int GetVoucherNumberAndApplyToDatabase(int Mode)
{
int ProviderID = 0;
int PracticeMRNumber = 0;
我有一个关于在Java中抛出异常的问题,这似乎是我这边的一种误解,我想自己澄清一下。
我一直在读到处理异常代码的两种基本方法是:
1.)在try-block中抛出一个异常,并在catch-block中立即捕获它--这就是所谓的try- so catch机制。
2.)使用“抛出新的...”在方法中抛出异常然后在方法的头中声明这个方法可能抛出一个异常"throws ...“--所谓的”pass- the -buck“。
我最近读到“抛出一个异常,然后用同样的方法捕获它是没有任何意义的”,这让我思考我是以错误的方式理解了这件事,还是写这篇文章的人有别的想法。处理异常的第一种方法不就是这样做的