变量 c 可能尚未初始化

我有这段代码:


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]

你知道我能做些什么来解决这个问题吗?谢谢!


弑天下
浏览 116回答 3
3回答

慕侠2389804

System.exit(-1)不保证您的程序会停止。如果您有某种关机挂钩,或者您正在进行流操作,则可以阻止它。因此,编译器会引发错误。您可能希望让 逃逸当前图层。ExceptionConfig 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();

海绵宝宝撒

编译器不知道如果程序无法初始化,它将退出。只需将其余代码移动到 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);    }}

扬帆大鱼

“事实上 - 它将始终被初始化(因为如果无法初始化,程序将退出)。编译器如何知道这一点?此外,如果它总是被初始化,那么为什么要费心使用a呢?你的逻辑有一个缺陷。try-catch您可以将其余代码移动到块内。这样就行了。try
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java