在java中设置日期值时,try-catch有什么用途?

在java中设置日期值时,try-catch有什么用途?,java,try-catch,date-format,Java,Try Catch,Date Format,我是一名java新手,正在学习一些培训材料,这是其中一个问题 给定有效的DateFormat对象df,以及 Date d = new Date(0L); String ds = "December 12, 2012"; //Insert correct code here 用ds表示的日期更新d的值是什么 A. d = df.parse(ds); B. d = df.getDate(ds); C. try{ d = df.parse(ds); } catch

我是一名java新手,正在学习一些培训材料,这是其中一个问题

给定有效的DateFormat对象df,以及

Date d = new Date(0L);
String ds = "December 12, 2012";
//Insert correct code here
用ds表示的日期更新d的值是什么

A. d = df.parse(ds);
B. d = df.getDate(ds);
C. try{
        d = df.parse(ds);
       }
   catch(ParseException e){ };
正确答案是C。为什么会这样?A和C之间的区别是什么?

因为可以抛出A,并且它是一个已检查的异常。调用代码必须使用
try catch
块处理选中的异常,或者您的代码必须声明它可以使用throws子句抛出异常

检查异常是Java设计者认为程序绝对必须以某种方式提供的异常。每当编写可能引发已检查异常的语句时,程序必须执行以下两项操作之一:

  • 通过将语句放置在具有异常捕获块的try语句中来捕获异常

  • 在包含该语句的方法上指定一个throws子句,以指示您的方法不希望处理异常,因此它将异常传递到上一行

  • 更好的代码应该是:

    try{
        d = df.parse(ds);
       }
    catch(ParseException e){   
       e.printStackTrace();
       // log the exception
       throw new RuntimeException(e);
    }
    
    .

    因为可以抛出一个,并且它是一个已检查的异常。调用代码必须使用
    try catch
    块处理选中的异常,或者您的代码必须声明它可以使用throws子句抛出异常

    检查异常是Java设计者认为程序绝对必须以某种方式提供的异常。每当编写可能引发已检查异常的语句时,程序必须执行以下两项操作之一:

  • 通过将语句放置在具有异常捕获块的try语句中来捕获异常

  • 在包含该语句的方法上指定一个throws子句,以指示您的方法不希望处理异常,因此它将异常传递到上一行

  • 更好的代码应该是:

    try{
        d = df.parse(ds);
       }
    catch(ParseException e){   
       e.printStackTrace();
       // log the exception
       throw new RuntimeException(e);
    }
    
    .

    该方法抛出一个已检查的异常(它不是
    运行时异常),因此必须捕获它,否则它是编译器错误。

    该方法抛出一个已检查的异常(它不是
    运行时异常),因此必须捕获它,否则它是编译器错误。

    如果有问题的代码发现自己:

  • 在不声明选中的
    ParseException
    的方法中,以及
  • 在任何能抓住它的try-catch块之外
  • 然后A将给出一个编译器错误:
    未捕获异常ParseException:必须被捕获或声明为抛出

    但是,如果您将
    //在此处插入正确的代码
    替换为C下的代码,然后尝试实际读取变量
    d
    ,则会出现错误
    局部变量可能尚未初始化

    更不用说空的catch块,还有后面有趣的分号

    总之,这是一个非常糟糕的材料,您必须使用。

    如果有问题的代码发现自己:

  • 在不声明选中的
    ParseException
    的方法中,以及
  • 在任何能抓住它的try-catch块之外
  • 然后A将给出一个编译器错误:
    未捕获异常ParseException:必须被捕获或声明为抛出

    但是,如果您将
    //在此处插入正确的代码
    替换为C下的代码,然后尝试实际读取变量
    d
    ,则会出现错误
    局部变量可能尚未初始化

    更不用说空的catch块,还有后面有趣的分号

    总之,这是一种非常糟糕的材料,你必须使用它。

    import java.util.Scanner;
    导入java.util.Date;
    导入java.text.ParseException;
    导入java.text.simpleDataFormat;
    公共班机
    {
    公共静态最终字符串格式=“dd/MM/yyyy”;
    公共静态void main(字符串[]args)
    {
    扫描仪sc=新的扫描仪(System.in);
    字符串date_input=sc.nextLine();
    日期d1;
    尝试
    {
    d1=转换字符串日期(日期输入);
    System.out.println(日期输入+“是有效日期”);
    }
    捕获(解析异常)
    {
    System.out.println(日期输入+“不是有效日期”);
    }
    }
    公共静态日期转换器StringToDate(字符串str)引发ParseException
    {
    SimpleDataFormat df=新的SimpleDataFormat(格式);
    df.setLenient(假);
    日期d=df.parse(str);
    返回d;
    }
    }
    import java.util.Scanner;
    导入java.util.Date;
    导入java.text.ParseException;
    导入java.text.simpleDataFormat;
    公共班机
    {
    公共静态最终字符串格式=“dd/MM/yyyy”;
    公共静态void main(字符串[]args)
    {
    扫描仪sc=新的扫描仪(System.in);
    字符串date_input=sc.nextLine();
    日期d1;
    尝试
    {
    d1=转换字符串日期(日期输入);
    System.out.println(日期输入+“是有效日期”);
    }
    捕获(解析异常)
    {
    System.out.println(日期输入+“不是有效日期”);
    }
    }
    公共静态日期转换器StringToDate(字符串str)引发ParseException
    {
    SimpleDataFormat df=新的SimpleDataFormat(格式);
    df.setLenient(假);
    日期d=df.parse(str);
    返回d;
    }
    
    }
    使用其他培训材料。必须不惜一切代价避免某些标记正确答案的东西,包括吞咽异常。@JBNizet最后你抓住分号了吗?我的意思是,真的:)@JBNizet:我会的,但这是一个最可能包含OCJP ex问题的问题