classloader-在java程序中如何加载自己写的类?

问题描述

在java程序中如何加载自己写的类?

package org.zeng.reflect;

public class TestReflection {

public static void main(String[] args) {
    try {
        //new S();
        Class.forName("S");
        ClassLoader.getSystemClassLoader().loadClass("S"); // 用AppClassLoader加载

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

}

class S {
static {
System.out.println("S is loaded!");
}

public S() {
System.out.println("S is instance!");
}

}

报java.lang.ClassNotFoundException: S 这样的错误,有大神知道吗? 另外这2个加载方法有区别吗????

解决方案

完整类名,要加包的,因为,class.forname(),要求类唯一,不写包名类名是不唯一的

解决方案二:

Class.forName(String className)使用装载当前类的类装载器来装载指定类。因为class.forName(String className)方法内部调用了Class.forName(className,true, this.getClass().getClassLoader())方法,如你所见,第三个参数就是指定类装载器,显而易见,它指定的是装载当前类的类装载器的实例,也就是this.getClass().getClassLoader();
classLoader.loadClass(StringclassName , boolean resolve);需要手动指定类装载器的实例。
所以这两种类装载方式的区别之一是一个默认使用装载当前类实例的类装载器来装载指定类,而另一个则需要手动指定一个类装载器的实例。

解决方案三:

把S那个类放在外面去,或者放在另外一个包下面试试。加载的时候把包名也写上、。

解决方案四:

JAVA程序类加载及其反射机制
Java--Java程序的加载过程
java程序加载过程
----------------------

解决方案五:

如果程序需要Class被实例化,就必须用Class.forName(name)了。S没有实例化

时间: 2024-10-09 21:52:50

classloader-在java程序中如何加载自己写的类?的相关文章

在MVC应用程序中动态加载PartialView

原文:在MVC应用程序中动态加载PartialView 有时候,我们不太想把PartialView直接Render在Html上,而是使用jQuery来动态加载,或是某一个事件来加载. 为了演示与做好这个练习,我们先在Views目录下的Home下创建_Partial1.cshtml部分视图,视图内容任你自定义,Insus.NET在本例中只让其显示一些文字与一张图片: 接下来,我们需要建立一个ActionResult()方法,在Controllers目录之下,打开HomeController.cs:

VC中动态加载ODBC解决方法

在使用 VC. VB. Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置 ODBC数据源.对于一般用户而言,配置 ODBC数据源可能是一件比较困难的工作.      而且,在实际应用中,用户往往要求在同一个应用程序中访问不同的数据源,因此采用一般的加载方法就有了无法克服的缺陷.为能在程序中完成这一工作,方便应用程序的使用,本文以 VC为开发环境介绍两种在应用程序中动态加载 ODBC系统数据源的方法. 方法一:修改注册表 设计思路 一般情况下,当用户在控制面板中配置好

Java 从Jar文件中动态加载类

由于开发的需要,需要根据配置动态加载类,所以简单测试了一下JAVA动态加载类 定义接口 package loader; public interface HelloIface {     public String hello();          public String sayHi(String name); } 实现接口 在其他插件类实现此接口,并导出为jar,如D:/tmp/test.jar package loader; public class HelloImpl impleme

怎么在 python程序编辑中自动加载库中函数或类中的成员??

问题描述 怎么在 python程序编辑中自动加载库中函数或类中的成员?? 在使用import引用系统模块时 如import(sys)中的函数 如:print(sys.path) 调用path函数 在写程序时想写sys . 后自动出现sys中所有的 成员 就像C#或java 中编辑代码一样 我用的是editPlus 编辑器 是不是要安装插件之类的 解决方案 不如直接用python tools for visual studio 解决方案二: 可以试试pycharm编辑器.功能比较强大,目前最好的编

请问:用java代码mysql如何加载到memcached中?谢谢!!

问题描述 请问:用java代码mysql如何加载到memcached中?谢谢!! 请问:用java代码mysql如何加载到memcached中?谢谢!! 解决方案 你应该是想java调用数据库等访问mysql获取到数据,然后放入memcached等做缓存.

C#中listview加载的图片,批量删除时出现异常“文件被另一个程序使用”,具体代码如下

问题描述 C#中listview加载的图片,批量删除时出现异常"文件被另一个程序使用",具体代码如下 自动加载图片: private void FrmPicListView_Load(object sender EventArgs e) { listView1.View = View.LargeIcon; listView1.MultiSelect = true; string[] files = GetImages(); if (files != null) { ImageList

antlr g文件-java中如何加载后缀为g的语法文件?

问题描述 java中如何加载后缀为g的语法文件? 我是在netbeans7.4下开发的,java版本为jdk1.7.0_51.在类文件中引用了两个类,分别是 JSHOP2Lexer和JSHOP2Parser,而这两个类是在一个JSHOP.g的文件中定义的,这个文件已经导入,但是属性显示不能识别,在我的类文件中也显示这两个类"找不到符号". 请问在netbeans中如何导入.g文件中定义的类呢? JSHOP.g文件是用基于antlr.jar写的语法文件,是JSHOP2项目的(http:/

把 treeview 保存到 txt文本文档之中 之后下次运行程序 会自动加载txt文本中的节点!!!!求各位大神帮忙 周三就要交了!!!

问题描述 把treeview保存到txt文本文档之中之后下次运行程序会自动加载txt文本中的节点!!!!求各位大神帮忙周三就要交了!!!还有就是用c#实现前进和后退功能谢谢大家了!!! 解决方案 解决方案二:你没说节点是如何保存在txt中的.怎么保存的就怎么读取啊.解决方案三:用xml保存,treeview的节点展开与xml子节点添加同步就行.解决方案四:你为什么不用XML保存呢?解决方案五://我例举一个文本框值保存到记事本中然后下次运行程序自动加载进来值if(File.Exists("../

浏览器--internet选项--程序--管理加载项中的加载项与插件是一个概念吗,有什么区别?

问题描述 问题一:浏览器--internet选项--程序-管理加载项中的加载项与插件是一个概念吗,有什么区别?问题二:我用360安全卫士的清理插件功能,找出的插件数量为什么远多于浏览器--internet选项--程序里的加载项啊?