Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java反射中找不到类_Java_Reflection - Fatal编程技术网

在java反射中找不到类

在java反射中找不到类,java,reflection,Java,Reflection,我正在学习java反射。我正在使用以下代码。但当我运行时,它给出了错误 未报告的异常类NotFoundException;必须被抓住,否则 宣布被抛出 Class className=Class.forName(“第一”) 也许我哪里出了问题。请帮帮我。代码如下: import java.lang.reflect.Method; public class First{ public void print(){} public void ready(){}

我正在学习java反射。我正在使用以下代码。但当我运行时,它给出了错误

未报告的异常类NotFoundException;必须被抓住,否则 宣布被抛出 Class className=Class.forName(“第一”)

也许我哪里出了问题。请帮帮我。代码如下:

import java.lang.reflect.Method;
public class First{   
        public void print(){}
        public void ready(){}
    }

public class test{
    public static void main(String args[])
    {
        Class className=Class.forName("com.Test.First");
        Method[] methods=className.getMethods();
        System.out.println("First method is" + methods[0]);
    }
}

它的意思是Class.forName抛出这个(非运行时)异常,所以您必须以某种方式处理它。这里有两种方法可以做到这一点

public class test{
    public static void main(String args[]) throws ClassNotFoundException
    {
        Class className=Class.forName("com.Test.First");
        Method[] methods=className.getMethods();
        System.out.println("First method is" + methods[0]);
    }
}

public class test{
    public static void main(String args[])
    {
        try {
          Class className=Class.forName("com.Test.First");
          Method[] methods=className.getMethods();
          System.out.println("First method is" + methods[0]);
       }
       catch (ClassNotFoundException ex) {
         ex.printStackTrace();
       }
    }
}

这条线就是问题所在

Class className=Class.forName("com.Test.First"); 

Class.forName(“com.Test.First”)
中,您可以用任何乱七八糟的语言替换
com.Test.First
,编译器应该不会太在意为您验证它。编译器只知道有可能不存在类
com.Test.First
,因此您负责处理
ClassNotFoundException

它的意思就是它所说的。您必须将
抛出ClassNotFoundException
添加到
main
方法中,或者需要将生成编译错误的语句包含在
try
块中,该块后跟
catch(ClassNotFoundException e)
。感谢VGR。知道了。