Java e.getMessage()和e.getLocalizedMessage()之间的差异 我使用这两种方法来获取catch抛出的消息 执行错误处理时阻塞 他们两个都从错误处理中得到了信息,但是什么呢 这两者究竟有什么不同 我在互联网上搜索了一下,从网上找到了这个答案

Java e.getMessage()和e.getLocalizedMessage()之间的差异 我使用这两种方法来获取catch抛出的消息 执行错误处理时阻塞 他们两个都从错误处理中得到了信息,但是什么呢 这两者究竟有什么不同 我在互联网上搜索了一下,从网上找到了这个答案,java,android,Java,Android,Java异常继承它们的getMessage和getLocalizedMessage 来自Throwable的方法(请参阅相关链接)。区别在于 子类应该重写getLocalizedMessage以提供 特定于语言环境的消息。例如,你正在适应的图像 从讲美国英语的公司/集团到 英国英语小组。您可能需要创建自定义异常类 它覆盖getLocalizedMessage以更正拼写和语法 对于将要使用您的代码的用户和开发人员来说 期待。这也可用于异常的实际翻译 信息 问题: 这是否意味着特定于语言的实现?

Java异常继承它们的getMessage和getLocalizedMessage 来自Throwable的方法(请参阅相关链接)。区别在于 子类应该重写getLocalizedMessage以提供 特定于语言环境的消息。例如,你正在适应的图像 从讲美国英语的公司/集团到 英国英语小组。您可能需要创建自定义异常类 它覆盖getLocalizedMessage以更正拼写和语法 对于将要使用您的代码的用户和开发人员来说 期待。这也可用于异常的实际翻译 信息


问题

  • 这是否意味着
    特定于语言的
    实现?就像我使用
    e.getLocalizedMessage()
    示例我的应用程序在
    英语中
    -如果我 在
    西班牙语中使用我的应用程序-然后在
    西班牙语中抛出错误

  • 需要一些关于何时何地可以使用这些方法的明确解释吗 对我有用


不。它绝对不是指特定语言的实现。它意味着使用国际化(aka i18n)机制的实现。有关什么是资源束以及如何使用它们的更多详细信息,请参阅

要点是将任何文本放在资源文件中,其中有很多(每个语言环境/语言等一个),代码使用一种机制在正确的资源文件中查找文本(我提供的链接将详细介绍)

至于何时何地使用,完全取决于你。通常,只有当您想向可能不太懂英语的非技术用户提供一个例外情况时,您才会关心这个问题。例如,如果您只是在写日志(通常只有技术用户才能阅读,因此不是常见的i18n目标),您应该:

try {
   somethingDangerous();
} catch (Exception e) {
   log.error("got this: "+e.getMessage());
}
但是,如果您打算在屏幕上显示异常消息(例如,作为一个小对话),那么您可能希望以本地语言显示该消息:

try {
   somethingDangerous();
} catch (Exception e) {
   JOptionPane.showMessageDialog(frame,
    e.getLocalizedMessage(),
    "Error",  <---- also best be taken from i18n
    JOptionPane.ERROR_MESSAGE);
}
试试看{
危险的事;
}捕获(例外e){
JOptionPane.showMessageDialog(框架,
e、 getLocalizedMessage(),

“Error”,据我所知,getMessage返回异常的名称。getLocalizedMessage以用户的本地语言(中文、日语等)返回异常的名称。为了使其正常工作,您在其上调用getLocalizedMessage的类必须已重写getLocalizedMessage方法。如果未重写,则调用其超类之一的方法,默认情况下该方法仅返回getMessage的结果

因此,在大多数情况下,结果是相同的,但在某些情况下,它将以运行程序的区域的语言返回异常名称

这是否意味着特定语言的实现?比如如果我使用 e、 getLocalizedMessage()例如,我的英语应用程序-错误为 用英语抛出,如果我用西班牙语使用我的应用程序,那么错误将是 西班牙语

创建此可丢弃项的本地化描述。子类可能 重写此方法以生成特定于区域设置的消息。对于 不重写此方法(默认实现)的子类 返回与getMessage()相同的结果

在你的情况下,e只是例外的对象

getLocalizedMessage() u need to override and give your own message i.e 
the meaning for localized message. 
例如…如果存在空指针异常

getLocalizedMessage() u need to override and give your own message i.e 
the meaning for localized message. 
通过打印e,它将显示null

e.getMessage() ---> NullPointerException 
e.getMessage() ---> NullPointerException

返回此可丢弃文件的详细信息字符串

public String getLocalizedMessage() 
创建此可丢弃项的本地化描述。子类可能 重写此方法以生成特定于区域设置的消息。对于 不重写此方法(默认实现)的子类 返回与
getMessage()
相同的结果

在你的情况下,e只是例外的对象

getLocalizedMessage() u need to override and give your own message i.e 
the meaning for localized message. 
getLocalizedMessage()
您需要覆盖并提供您自己的消息,即 本地化消息的含义

例如…如果存在空指针异常

getLocalizedMessage() u need to override and give your own message i.e 
the meaning for localized message. 
通过打印e,它将显示null

e.getMessage() ---> NullPointerException 
e.getMessage() ---> NullPointerException

这真是令人惊讶——检查类的openJDK 7代码

getLocalizedMessage
的实现是-

390     public String getLocalizedMessage() {
391         return getMessage();
392     }
getMessage
的实现是-

376     public String getMessage() {
377         return detailMessage;
378     }


这两种方法的实现都没有变化,只是文档有变化。

据我所知,
getMessage
返回异常的名称

getLocalizedMessage
以用户的本地语言(中文、日文等)返回异常的名称

为了实现这一点,您正在调用的
getLocalizedMessage
类必须重写
getLocalizedMessage
方法


如果没有,则调用它的一个超类的方法,该方法在默认情况下只返回
getMessage

的结果,正如上面提到的那样--


据我所知,
getMessage()
返回异常的名称。
getLocalizedMessage()
以用户的本地语言(中文、日语等)返回异常的名称。为了实现这一点,您调用的类
getLocalizedMessage()
on必须重写了
getLocalizedMessage()
方法。如果没有重写,则调用它的一个超类的方法,默认情况下该方法只返回getMessage的结果

除此之外,我还想放一些代码段来解释如何使用它

如何使用它

J
key1=this is key one in English
public class ExceptionGenerator {

    public void generateException() throws MyLocalizedThrowable {
        throw new MyLocalizedThrowable("key1");
    }
}
public static void main(String[] args) {
    //Locale.setDefault(Locale.FRANCE);
    ExceptionGenerator eg = new ExceptionGenerator();

    try {
        eg.generateException();
    } catch (MyLocalizedThrowable e) {
        System.out.println(e.getLocalizedMessage());
    }
}
/**
 * Returns the detail message string of this throwable.
 *
 * @return  the detail message string of this {@code Throwable} instance
 *          (which may be {@code null}).
 */
public String getMessage() {
    return detailMessage;
}

/**
 * Creates a localized description of this throwable.
 * Subclasses may override this method in order to produce a
 * locale-specific message.  For subclasses that do not override this
 * method, the default implementation returns the same result as
 * {@code getMessage()}.
 *
 * @return  The localized description of this throwable.
 * @since   JDK1.1
 */
public String getLocalizedMessage() {
    return getMessage();
}