当前位置:编程学习 > JAVA >>

有意思的面试问题:动态类加载问题讨论

上周面试时,面试官提了一个动态类加载的题目
有配置文件如此定义:
<services>
<service>
<classid>a</classid>
<extfunction>func1</extfunction>
<idfunction>getId</idfunction>
</service>
    <args>int</args>
</services>
需要找到一个类,他里面有个方法<idfunction>,返回值是<classid>,然后运行这个类中的<extfunction>
这个想了半天,不知道怎么搞,动态加载类不是必须要有类路径吗?
有高手解答一下吗?非常感谢 面试 动态类加载 --------------------编程问答-------------------- 反射么 --------------------编程问答-------------------- 类文件的所在路径是知道,只给出类名前提应该是已经知道路径

protected Class findClass( String pClassName )

           throws ClassNotFoundException {

       try {

           System.out.println( "Current dir: " + new File( mDirectory ).getAbsolutePath() );

           File lClassFile = new File( mDirectory, pClassName + ".class" );

           InputStream lInput = new BufferedInputStream( new FileInputStream( lClassFile ) );

           ByteArrayOutputStream lOutput = new ByteArrayOutputStream();

           int i = 0;

           while( ( i = lInput.read() ) >= 0 ) {

               lOutput.write( i );

           }

           byte[] lBytes = lOutput.toByteArray();

           return defineClass( pClassName, lBytes, 0, lBytes.length );

       } catch( Exception e ) {

           throw new ClassNotFoundException( "Class: " + pClassName + " could not be found" );

       }

   }


findClass方法主要的工作是在指定路径中查找我们需要的类。如果存在此命名的类,那么就将class文件加载到jvm中,再由defineClass方法(一个native方法)来生成具体的Class对象。

一般来说,经过上述方式来加载类的话,我们的类可能都在一个classloader中加载完成。但是,再强调一下,那就是如果类有不同路径或者不同包名,那就是不同类定义。

http://www.cnblogs.com/ericchen/archive/2011/01/15/1936130.html
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,