首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ClassLoader或类以编程方式加载类

如何使用ClassLoader或类以编程方式加载类
EN

Stack Overflow用户
提问于 2016-07-16 13:46:56
回答 2查看 55关注 0票数 1

我有两节课

代码语言:javascript
复制
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.

另一个程序是

代码语言:javascript
复制
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.)来装入类

EN

回答 2

Stack Overflow用户

发布于 2016-07-16 13:51:03

除了Jim Garrison answer已经识别出的多个错误之外,您还声明了具有“默认”作用域的类。这意味着它只能通过同一个包中的类来引用。

应该是

代码语言:javascript
复制
public class eg   // <== public
{
    public void show()
    {
        System.out.println("ClassPath set to this class");
    }
}

而且不需要单独的try catches,为什么不直接从main方法抛出...如果任何一步都失败了,比如定义b,你就不能做更多的事情了……

代码语言:javascript
复制
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());
}
票数 0
EN

Stack Overflow用户

发布于 2016-07-16 13:53:02

这是一个范围问题。将bz的声明移到第一个try之外,如下所示:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38408187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档