同步操作将从 kimmking/JavaCourseCodes 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
import java.io.Closeable;import java.io.IOException;import java.io.InputStream;import java.lang.reflect.Method;/*第一周作业:2.(必做)自定义一个 Classloader,加载一个 Hello.xlass 文件,执行 hello 方法,此文件内容是一个 Hello.class 文件所有字节(x=255-x)处理后的文件。文件群里提供。*/public class XlassLoader extends ClassLoader {public static void main(String[] args) throws Exception {// 相关参数final String className = "Hello";final String methodName = "hello";// 创建类加载器ClassLoader classLoader = new XlassLoader();// 加载相应的类Class<?> clazz = classLoader.loadClass(className);// 看看里面有些什么方法for (Method m : clazz.getDeclaredMethods()) {System.out.println(clazz.getSimpleName() + "." + m.getName());}// 创建对象Object instance = clazz.getDeclaredConstructor().newInstance();// 调用实例方法Method method = clazz.getMethod(methodName);method.invoke(instance);}@Overrideprotected Class<?> findClass(String name) throws ClassNotFoundException {// 如果支持包名, 则需要进行路径转换String resourcePath = name.replace(".", "/");// 文件后缀final String suffix = ".xlass";// 获取输入流InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(resourcePath + suffix);try {// 读取数据int length = inputStream.available();byte[] byteArray = new byte[length];inputStream.read(byteArray);// 转换byte[] classBytes = decode(byteArray);// 通知底层定义这个类return defineClass(name, classBytes, 0, classBytes.length);} catch (IOException e) {throw new ClassNotFoundException(name, e);} finally {close(inputStream);}}// 解码private static byte[] decode(byte[] byteArray) {byte[] targetArray = new byte[byteArray.length];for (int i = 0; i < byteArray.length; i++) {targetArray[i] = (byte) (255 - byteArray[i]);}return targetArray;}// 关闭private static void close(Closeable res) {if (null != res) {try {res.close();} catch (IOException e) {e.printStackTrace();}}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。