java:查找程序名,解析整数参数

Ale*_*ber 5 java static-methods exception command-line-arguments

一个简单的测试用例来演示我的两个问题:

public class Numbers {

    private static void usage() {
        System.err.println("Usage: java " + getClass().getName() + " range");
        System.exit(1);
    }

    public static void main(String[] args) throws IOException {
        try {
            int range = Integer.parseInt(args[0]);
        } catch (Exception e) {
            usage();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 无法getClass()从静态方法调用
  2. 如果在命令行中没有提供参数,我将获得ArrayIndexOutOfBoundsException消息而不是usage()输出.为什么不赶上(例外e)赶上它?

Pet*_*nov 6

1)getClass是Object类型的一个方法.在静态方法中,没有对象可以调用getClass

2)您的示例中捕获了异常 - 我刚测试过它.


cro*_*wne 3

对我有用,捕获异常。

从静态方法获取类名而不引用 是Numbers.class.getName()很困难的。

但我发现了这个

String className = Thread.currentThread().getStackTrace()[2].getClassName(); 
System.err.println("Usage: java " + className + " range");
Run Code Online (Sandbox Code Playgroud)