1

私は2つのクラスを持っています

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でそれを学ぼうとしましたが、それに関する他の関連するスタックオーバーフローの質問を見ました。 Javaでクラスを動的にロード する また、ディレクトリのファイル名 (例: C:\NNK\pack2\eg) を使用してクラスをロードする方法はありますか?

4

2 に答える 2

0

Jim Garrison の回答ですでに特定されている複数のエラーに加えて、「デフォルト」スコープでクラスを宣言しました。これは、同じパッケージ内のクラスを介してのみ参照できることを意味します。

する必要があります

public class eg   // <== public
{
    public void show()
    {
        System.out.println("ClassPath set to this class");
    }
}

また、別の try キャッチは必要ありません。メイン メソッドから単にスローしないのはなぜですか... 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-16T05:51:03.057 に答える
0

これはスコープの問題です。次のように、 firstの宣言とその外側に移動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があります

于 2016-07-16T05:53:01.980 に答える