有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用字节时的java类加载行为。班

当我在Java中进行大量类型检查时,如下所示:

if (clazz.equals(Byte.class) <dosomething>
if (clazz.equals(Integer.class) <dosomething>
...

JVM是否加载所有这些类(字节、整数?)如果是这样的话,有没有其他方法可以在不加载一堆我甚至不需要的类的情况下进行类类型检查


共 (4) 个答案

  1. # 1 楼答案

    在另一个类中显式引用的任何类都将由类加载器加载。还有这个。。。这些类显式引用的任何类都将由类加载器加载。所以,基本上没有。如果你引用它,它会被加载

  2. # 2 楼答案

    通过测试以下内容,您可以轻松获得此问题的答案:

    if (c.equals(No.such.class)) ....
    
  3. # 3 楼答案

    我真的不在乎,但如果你真的担心,你可以这样做:

    if (clazz.getName().equals("java.lang.Integer")) // do something
    
  4. # 4 楼答案

    是的,使用.class将加载该类,但不要担心这些问题java.lang中的所有内容都将在程序运行之前加载,因为这些类要么由JVM本身使用,要么由预加载的其他API类使用

    如果想在不加载类的情况下检查类,可以执行以下操作

    if (clazz.getName().equals("com.foo.MyClass")) ...
    

    但这相当脆弱;除非有很好的理由,否则我会避免

    无论如何,找个时间从-verbose:class开始Java,查看为您预加载的所有类