如何在Java中获取当前类名,包括包名?

Posted

技术标签:

【中文标题】如何在Java中获取当前类名,包括包名?【英文标题】:How to get current class name including package name in Java? 【发布时间】:2012-04-01 12:28:33 【问题描述】:

我正在做一个项目,一个要求是如果 main 方法的第二个参数以“/”(对于 linux)开头,它应该将其视为绝对路径(不是问题),但如果它不以“/”开头,它应该获取类的当前工作路径,并将给定的参数附加到它。

我可以通过几种方式获取类名:System.getProperty("java.class.path")new File(".")getCanonicalPath(),等等...

问题是,这只给了我存储包的目录 - 即,如果我有一个存储在“.../project/this/is/package/name”中的类,它只会给我“/project/”并忽略包名实际的.class files 生活。

有什么建议吗?

编辑: 这是从练习描述中摘录的解释

sourcedir 可以是绝对的(以“/”开头)或相对于我们运行程序的位置

sourcedir 是 main 方法的给定参数。我怎样才能找到那条路?

【问题讨论】:

如果代码打包在 JAR 中(或者不像您假设的那样在文件夹/文件结构中),您会怎么做?这是一个危险的假设;这可能适用于小型实验、课堂作业或其他一次性情况,但请不要养成对生产质量代码做出这种假设的习惯。 找不到类文件的路径是没有意义的。练习描述也没有提到如果你仔细阅读它(我们从哪里运行程序是指用户调用程序的当前路径)。 也许你可以帮助我更好地理解需求?我需要检查以“/”开头的参数(在描述中提到)。如果是这样,请将其用作绝对值。照原样。但如果不是,我应该如何对待它? 【参考方案1】:

使用this.getClass().getCanonicalName() 获取完整的类名。

请注意,包/类名(“abC”)与 .class 文件(a/b/C.class)的路径不同,使用包名/类名派生路径通常是不好的做法。类文件/包集可以在多个不同的类路径中,可以是目录或jar文件。

【讨论】:

谢谢,但它在main方法中,'this'不能用在静态方法中。有什么解决办法吗? ***.com/questions/936684/…【参考方案2】:

有一个类,Class,可以做到这一点:

Class c = Class.forName("MyClass"); // if you want to specify a class
Class c = this.getClass();          // if you want to use the current class

System.out.println("Package: "+c.getPackage()+"\nClass: "+c.getSimpleName()+"\nFull Identifier: "+c.getName());

如果c 代表包MyClass 中的类mypackage,则上面的代码将打印:

包裹:我的包裹 班级:我的班级 完整标识符:mypackage.MyClass

您可以获取此信息并根据需要对其进行修改,或转到check the API 了解更多信息。

【讨论】:

请注意,Class.forName("MyClass") 只有在默认包中才有效(即没有包声明)。 @TheNail true,getName() 返回包名和类名,现在编辑。 使用getSimpleName()只获取类名而不获取包名。 您应该使用MyClass.class 而不是Class.forName("MyClass"),除非您出于其他原因确实需要运行时发现。【参考方案3】:

完全限定名称的获取方式如下:

String fqn = YourClass.class.getName();

但是您需要读取类路径资源。所以使用

InputStream in = YourClass.getResourceAsStream("resource.txt");

【讨论】:

【参考方案4】:

使用this.getClass().getName() 获取packageName.className 并使用this.getClass().getSimpleName() 仅获取类名

【讨论】:

以上是关于如何在Java中获取当前类名,包括包名?的主要内容,如果未能解决你的问题,请参考以下文章

如何找到给定类名的包名?

如何从android中的包名中获取类名?

如何在 android 2.3 及更高版本中获取当前启动器的包名?

android 获取当前类的包名与类名

android 获取当前类的包名与类名

android 获取当前类的包名与类名