我有两节课
package pack2;
import java.lang.*;
import java.io.*;
class eg
{
public void show()
{
System.out.println("ClassPath set to this class");
}
}这在C:\NNK\pack2中。全限定名为pack2.eg.
另一个程序是
import java.io.*;
import java.lang.*;
import java.net.*;
class classload
{
public static void main(String args[])
{
//have to load the eg class here. Dont know what i have done below is right or wrong
try
{
Class b=Class.forName("pack2.eg");
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
try
{
eg z=(eg) b.newInstance();
}
catch(InstantiationException l)
{
l.printStackTrace();
}
z.show();
System.out.println("b.getName()="+b.getName());
}
}这个程序在C:\NNK,我必须在这里加载eg.程序。我试着在Oracle中学习它,看到了它的其他相关堆栈溢出问题。它不起作用,我一直收到错误,b是未知的,z是未知的Dynamically loading a class in Java。还有一种方法可以使用目录文件名(例如:C:\NNK\pack2\eg.)来装入类
发布于 2016-07-16 13:51:03
除了Jim Garrison answer已经识别出的多个错误之外,您还声明了具有“默认”作用域的类。这意味着它只能通过同一个包中的类来引用。
应该是
public class eg // <== public
{
public void show()
{
System.out.println("ClassPath set to this class");
}
}而且不需要单独的try catches,为什么不直接从main方法抛出...如果任何一步都失败了,比如定义b,你就不能做更多的事情了……
public static void main(String[] args) throws Exception {
Class b = Class.forName("pack2.eg");
eg z = (eg)b.newInstance();
z.show();
System.out.println("b.getName()=" + b.getName());
}发布于 2016-07-16 13:53:02
这是一个范围问题。将b和z的声明移到第一个try之外,如下所示:
public static void main(String args[])
{
//have to load the eg class here. Dont know what i have done below is right or wrong
Class b;
eg z;
try
{
b=Class.forName("pack2.eg");
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
try
{
z=(eg) b.newInstance();
}
catch(InstantiationException l)
{
l.printStackTrace();
}
z.show();
System.out.println("b.getName()="+b.getName());
}您可能还必须创建pack2.eg public
https://stackoverflow.com/questions/38408187
复制相似问题