Java 了解Try-Catch块行为
我在try-catch中遇到了一个奇怪的问题,这让我怀疑自己对异常处理基本原理的认识。按照基本语法Java 了解Try-Catch块行为,java,try-catch,Java,Try Catch,我在try-catch中遇到了一个奇怪的问题,这让我怀疑自己对异常处理基本原理的认识。按照基本语法 try{ code to be checked } catch(Exception e){} finally{} 然而,下面的代码给了我一个空指针异常,我认为应该捕获它 class Ideone { public static void main (String[] args) throws java.lang.Exception { try{
try{
code to be checked
}
catch(Exception e){}
finally{}
然而,下面的代码给了我一个空指针异常,我认为应该捕获它
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
try{
for(Model m: Null Collection coming from DB)
System.out.println("Inner Block");
System.out.println("Outer Block");
}catch(Exception e){}
}
}
我还没有初始化
public class Ideone{
public static void main (String[] args) throws java.lang.Exception
{
int i = 0;
try{
if(i<2)
System.out.println("Inner Block");
System.out.println("Outer Block");
}catch(Exception e){}
}
}
公共类Ideone{
公共静态void main(字符串[]args)引发java.lang.Exception
{
int i=0;
试试{
如果(i你确定你的问题吗?我相信你的捕获中有一些清理代码尚未初始化-因此出现异常。如果你发布你的实际代码会有所帮助。
以下工作如预期:
import java.util.List;
public class Main {
public static void main(String[] args) {
List i=null;
try{
for(Object o: i) {
System.out.println("Inner Block");
}
System.out.println("Outer Block");
}catch(Exception e){}
}
}无法复制。
我试过这个
public static void main (String[] args) throws java.lang.Exception
{
Collection c = null ;
try{
for(Object i:c)
System.out.println("Inner Block");
System.out.println("Outer Block");
}catch(Exception e){}
}
它工作得很好。下面的代码片段显示“异常!”
列表字符串=null;
试一试{
用于(字符串s:字符串){
系统输出打印项次;
}
}捕获(例外e){
System.out.println(“异常!”);
}
正如其他人所指出的,你自己也说过
您是否尝试过从头开始重新编译您的所有代码?在我的团队(250.000行代码库)中,使用eclipse时,我们有时会遇到错误编译的问题,这些错误编译可能会产生无法解释的问题。我们通常通过完全重新编译来解决这些问题
了解Try-Catch块行为
使用try-catch
块的主要原因是处理代码出现问题或在正常情况下意外发生的事情,然后以某种方式抛出异常并在catch
块中进行处理,最后的块几乎用于关闭任何打开的流,并关闭它即使try
或catch
返回任何值(系统终止除外),每次都将在代码中运行
在您的代码中,似乎有一些东西是从数据库中获取的,它是null
或尚未初始化,或者它已经从空值数据库中返回,现在您不能使用null
对象,如果它尚未初始化!您必须确保它是否为null
,然后像这样使用它:
class Ideone {
public static void main(String[] args) throws java.lang.Exception {
try {
if(Null Collection coming from DB != null){
for(Model m: Null Collection coming from DB)
System.out.println("Inner Block");
}
System.out.println("Outer Block");
} catch (Exception e) {}
}
}
is扩展了RuntimeException,当您尝试使用null对象时会抛出它。集合为null
。您不能在null对象上迭代collection@VinodMadyalkar问题是为什么它没有被捕获Block@amanshivhare-你怎么知道它没有被抓住?@VinodMadyalkar,因为我犯了个错误此时?进程:com.example.aman.navtest2,PID:6207 java.lang.NullPointerException为什么不在catch块中设置一个sysout来检查它是否被捕获?或者通过代码进行调试?如果更改了i=12,您知道会发生什么吗?尝试更改}catch(NullPointerException e){System.out.println(“nulls exist”};无论i
是否初始化,此代码都不会给出NullPointerException,因为i
是原始的。无论是否引发异常,它都会在控制台中打印“error”。它不会给我一个null指针异常,我删除最后一行可能尝试放置System.out.println(“error”);
在catch
块中,您将看到异常。我知道您的意思。但它确实可以捕获异常,而不是将其抛出。是的,如果出现异常,它将捕获异常。您关于它不提供空指针异常的声明完全是错误的:将抛出NPE,但您在没有给出任何指示的情况下将其吞下发生了什么。Runnsjo令人惊讶地解决了问题。(重建项目)
class Ideone {
public static void main(String[] args) throws java.lang.Exception {
try {
if(Null Collection coming from DB != null){
for(Model m: Null Collection coming from DB)
System.out.println("Inner Block");
}
System.out.println("Outer Block");
} catch (Exception e) {}
}
}