当前位置: 首页 > 面试题库 >

Java:startingPath作为“公共静态最终”异常

宋嘉禧
2023-03-14
问题内容

[已更新,对更改感到抱歉,但现在是真正的问题] 对于getCanonicalPath()方法中的异常,我无法在其中包括try-catch-
loop。我试图通过方法来解决问题,然后在其中声明值。问题是它是最终版本,我无法更改。因此,如何将startingPath作为“ public staticfinal”。

$ cat StartingPath.java 
import java.util.*;
import java.io.*;

public class StartingPath {
 public static final String startingPath = (new File(".")).getCanonicalPath();

 public static void main(String[] args){
  System.out.println(startingPath);
 }
}
$ javac StartingPath.java 
StartingPath.java:5: unreported exception java.io.IOException; must be caught or declared to be thrown
 public static final String startingPath = (new File(".")).getCanonicalPath();
                                                                           ^
1 error

问题答案:

这个名字很好。您忘记声明类型了。

public static final String startingPath;
//                  ^^^^^^

解决这个问题,您当然会意识到如何应对可能性IOExceptionstartingPath存在的难题final。一种方法是使用static初始化程序:

JLS8.7静态初始化器

初始化 类时,将执行在类中声明的任何 静态初始化 器,并且可以将其与任何用于类变量的字段初始化器一起用于初始化该类的类变量。

 public static final String startingPath;
 static {
    String path = null;
    try {
      path = new File(".").getCanonicalPath();
    } catch (IOException e) {
      // do whatever you have to do
    }
    startingPath = path;
 }

另一种方法是使用一种static方法。这种方法实际上可以提高可读性,并且是Josh Bloch在
Effective Java中 推荐的方法。



 类似资料:
  • 问题内容: 我一直想知道Java中的单例。按照惯例,单例设置如下: 最近,我切换到使用以下内容: 由于没有空检查,因此它更短,更快捷,而且打字对我来说比打字好。有什么理由不能使第二种方法成为主流呢? 问题答案: 第一个版本在第一次实际需要时创建实例,而第二个版本(较短的版本)在初始化类后立即运行构造函数 类或接口类型T将在以下任何一种首次出现之前立即初始化: T是一个类,并创建T的实例。 T是一个

  • 问题内容: 给定下面的Java代码,您可以在Ruby类中最接近地表示这两个变量吗?而且,在Ruby中是否可以像Java中那样区分和变量? 问题答案: Ruby中确实没有等效的构造。 但是,您似乎犯了一个经典的移植错误:您有一种使用语言A 的 解决方案 ,然后尝试将其翻译为语言B,这时您真正应该做的就是找出 问题 ,然后找出解决方法使用语言B。 我不能完全确定您要从那个小的代码段中解决什么问题,但是

  • 问题内容: 我碰巧在工作场所遇到了Java代码。这是场景:有2个类- 和。 除了4个公共静态最终字符串值外,没有任何内容。它的目的是使用类似的值(不要问我为什么,这不是我的代码)。 进口。我在其中编辑了字符串值并对其进行了编译。当我运行时,我可以看到它正在使用旧值- 而不是新值。我不得不重新编译以使其使用来自的新值!(我不得不重新编译其他导入的类!) 这是仅因为JDK 1.6还是我早就应该知道重新

  • 问题内容: 和之间有什么区别? 例如 : 要么 问题答案: 尽管您 确实 希望遵守约定,但在功能上没有什么区别(字节码将 完全相同 ),请访问JLS-8.3.1。场修饰符: __ 这将是奇怪的,看.. 我也建议您访问checkstyle。 编辑: 从同一页面链接到该部分: http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls

  • 问题内容: 有效的Java说: //潜在的安全漏洞! 静态公共最终Thing [] VALUES = {…}; 有人可以告诉我什么是安全漏洞吗? 问题答案: 声明字段通常是类常量的标志。对于原始类型(int,double等)和不可变的类(例如字符串和),这是非常好的选择。对于数组,问题在于,即使数组引用是恒定的,数组的元素仍然可以更改,并且因为它是一个字段,所以更改不受保护,不受控制并且通常是不受

  • 我最近和一个朋友讨论了枚举和公共静态最终常量。我告诉他公共静态最终常量比枚举更容易维护,有时更快(Android开发者文档证实了这一点),也更方便。我还说当你使用枚举时,你也会失去功能: 不能扩展枚举 然后他说,如果需要实例化或扩展枚举,就不应该使用枚举。然后我回答说,这就是为什么我们应该只使用常量,因为它更易于维护;如果在项目中期我们需要实例化一个枚举或扩展它呢?那我们就必须改变一切。 我举了一