为了账号安全,请及时绑定邮箱和手机立即绑定

变量 c 可能尚未初始化

变量 c 可能尚未初始化

弑天下 2022-08-17 17:03:16
我有这段代码:public static void main (String[] args) {    Config c;// = null;    try {      c = new Config();    } catch (Exception e) {        System.err.println("Error while parsing/reading file: " + e.getMessage());        System.exit(-1);    }       final NetworkReporter np = new NetworkReporter(c.getValues().serverIP, c.getValues().serverPort, (short)(c.getValues().checkInterval * c.getValues().checksPerReport));    IdleChecker idleChecker = new IdleChecker(c.getValues().checkInterval, c.getValues().checksPerReport, c.getValues().idleSensitivity, new IdleChecker.reportFunction() {        public void report() {            np.report();        }       });     idleChecker.start();}当我编译这段代码时,我得到:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project FanstisTime: Compilation failure[ERROR] /home/amitg/Programming/Projects/FantisTime/FantisTime/src/main/java/com/amitg/fantistimeclient/Client.java:[13,54] variable c might not have been initialized我确实理解这意味着什么,事实上 - 它将始终被初始化(因为如果无法初始化,程序将退出)。我必须在那里尝试捕获,因为会引发一些异常。我尝试在那里使用,它给了我这个:variable c might not have been initializenew Config()Config c = null;[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (default-cli) on project FanstisTime: An exception occured while executing the Java class. null: NullPointerException -> [Help 1]你知道我能做些什么来解决这个问题吗?谢谢!
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

System.exit(-1)

不保证您的程序会停止。如果您有某种关机挂钩,或者您正在进行流操作,则可以阻止它。因此,编译器会引发错误。


您可能希望让 逃逸当前图层。Exception


Config c;


try {

    c = new Config();

} catch (final Exception e) {

    System.err.println("Error while parsing/reading file: " + e.getMessage());

    throw new YourCustomRuntimeException(e);

}


c.whatever();


查看完整回答
反对 回复 2022-08-17
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

编译器不知道如果程序无法初始化,它将退出。只需将其余代码移动到 try 中即可。


public static void main (String[] args) {

    try {

      Config c = new Config();

      final NetworkReporter np = new NetworkReporter(c.getValues().serverIP, c.getValues().serverPort, (short)(c.getValues().checkInterval * c.getValues().checksPerReport));

      IdleChecker idleChecker = new IdleChecker(c.getValues().checkInterval, c.getValues().checksPerReport, c.getValues().idleSensitivity, new IdleChecker.reportFunction() {

        public void report() {

            np.report();

        }   

      }); 

      idleChecker.start();

    } catch (Exception e) {

        System.err.println("Error while parsing/reading file: " + e.getMessage());

        System.exit(-1);

    }

}


查看完整回答
反对 回复 2022-08-17
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

“事实上 - 它将始终被初始化(因为如果无法初始化,程序将退出)。

编译器如何知道这一点?此外,如果它总是被初始化,那么为什么要费心使用a呢?你的逻辑有一个缺陷。try-catch

您可以将其余代码移动到块内。这样就行了。try


查看完整回答
反对 回复 2022-08-17
  • 3 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信