我从C ++来到Java。 在C ++世界里,我们注意到exception的安全性,并且注意到,在mutator本身或者委托给它的方法(最小,强壮,无丢包)的情况下,mutators可以提供不同的保证。 实现具有强大exception保证的方法要求保证一些基本的操作不会抛出exception。 JLS声明哪些操作可以抛出哪种exception,但是VirtualMachineError错误会出现问题。 JLS : 内部错误或资源限制阻止Java虚拟机实现Java编程语言的语义; 在这种情况下,引发VirtualMachineError的子类的一个实例。 JLS没有多说VirtualMachineError 。 “内部错误”意味着JVM中的一个错误,所以我对这种情况不感兴趣:面对JVM中的错误,所有的投注都closures。 但是“资源限制”情况呢? 是否有任何保证永远不会因为资源限制而失败的操作?
TL; DR Matcher API的devise决定是什么? 背景 Matcher有一个我没有想到的行为,我找不到一个好的理由。 API文档说: 一旦创build,一个匹配器就可以用来执行三种不同的匹配操作:[…]这些方法中的每一个都会返回一个表示成功或失败的布尔值。 通过查询匹配器的状态可以获得关于成功匹配的更多信息。 API文档进一步说的是: 匹配器的显式状态最初是未定义的; 在成功匹配之前尝试查询它的任何部分将导致引发IllegalStateException。 例 String s = "foo=23,bar=42"; Pattern p = Pattern.compile("foo=(?<foo>[0-9]*),bar=(?<bar>[0-9]*)"); Matcher matcher = p.matcher(s); System.out.println(matcher.group("foo")); // (1) System.out.println(matcher.group("bar")); 这段代码抛出一个 java.lang.IllegalStateException: No match found 在(1) 。 为了解决这个问题,有必要调用matches()或其他方法,使Matcher进入允许group()的状态。 以下工作: String s = "foo=23,bar=42"; Pattern p = Pattern.compile("foo=(?<foo>[0-9]*),bar=(?<bar>[0-9]*)"); Matcher matcher = p.matcher(s); matcher.matches(); // (2) System.out.println(matcher.group("foo")); System.out.println(matcher.group("bar")); […]
我需要获取有关HTML页面中应用的CSS样式的信息。 我用AxWebBrowser和迭代IHTMLDOMNode。 我能够获取所需的所有数据,并将代码移到我的应用程序中。 问题是,这部分运行在后台工作人员,我试图实例化控制exception。 AxWebBrowser browser = new AxWebBrowser(); ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a single-threaded apartment. 有没有办法如何解决这个或其他选项比AxWebBrowser?
我们正在努力处理在我们的应用程序中正确处理exception的策略。 这是我们的目标(总结): 只处理特定的exception。 只处理可以纠正的exception 只logging一次。 我们已经提出了一个解决scheme,涉及一个通用的特定于应用程序的例外,并在一段代码中这样工作: try { // Do whatever } catch(ArgumentNullException ane) { // Handle, optinally log and continue } catch(AppSpecificException) { // Rethrow, don't log, don't do anything else throw; } catch(Exception e) { // Log, encapsulate (so that it won't be logged again) and throw Logger.Log("Really bad thing", e.Message, e); throw […]
什么是第一次机会例外? .NET程序是如何以及从哪里来的? 那为什么叫这个特殊的名字(我们在谈论什么“机会”)?
在我的一个控制器动作中,我返回一个非常大的JsonResult来填充网格。 我收到以下InvalidOperationExceptionexception: 在使用JSON JavaScriptSerializer进行序列化或反序列化时出错。 string的长度超过maxJsonLength属性中设置的值。 不幸的是,将web.config的maxJsonLength属性设置为更高的值并不会显示任何效果。 <system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="2147483644"/> </webServices> </scripting> </system.web.extensions> 我不想把它作为一个string,就像在这个答案中提到的那样。 在我的研究中,我遇到了这个博客文章,写一个自己的ActionResult (例如LargeJsonResult : JsonResult )被推荐来绕过这个行为。 这是唯一的解决scheme吗? 这是ASP.NET MVC中的错误? 我错过了什么吗? 任何帮助将不胜感激。
有什么区别 try { } catch { throw; } 和 try { } catch(Exception e) { throw e;} ? 而我应该什么时候使用一个或另一个?
更具体地说,当exception包含可能或不可以序列化的自定义对象时。 以这个例子: public class MyException : Exception { private readonly string resourceName; private readonly IList<string> validationErrors; public MyException(string resourceName, IList<string> validationErrors) { this.resourceName = resourceName; this.validationErrors = validationErrors; } public string ResourceName { get { return this.resourceName; } } public IList<string> ValidationErrors { get { return this.validationErrors; } } } 如果这个exception被序列化和反序列化,那么这两个自定义属性( ResourceName和ValidationErrors )将不会被保留。 该属性将返回null 。 […]
当我尝试除以0时,以下代码不会捕获exception。我是否需要抛出exception,或者计算机在运行时是否自动抛出一个exception? int i = 0; cin >> i; // what if someone enters zero? try { i = 5/i; } catch (std::logic_error e) { cerr << e.what(); }
在servlet中遇到这个exception有哪些常见的可能性 – 响应已经提交?