我有两节课

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中学习它,看到它的其他相关堆栈溢出问题。
Dynamically loading a class in Java
但是它没有用,但我不断收到错误b是未知,而z是未知符号。
还有一种使用目录文件名的方法(例如:C:\ NNK \ pack2 \ eg)来加载类

最佳答案

这是一个范围问题。将bz的声明移到第一个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

07-25 20:37