@@ -125,48 +125,48 @@ java提供了JavaCompiler,我们可以通过它来编译java源文件为class
125
125
task.call();
126
126
127
127
128
-
129
- // 通过反射得到对象
130
- // Class clazz = Class.forName("com.tommy.core.test.reflect.Test");
131
- // 使用自定义的类加载器加载class
132
- Class clazz = new MyClassLoader(baseOutputDir).loadClass("com.tommy.core.test.reflect.Test");
133
- // 得到构造器
134
- Constructor constructor = clazz.getConstructor(String.class);
135
- // 通过构造器new一个对象
136
- Object test = constructor.newInstance("jack.tsing");
137
- // 得到sayHello方法
138
- Method method = clazz.getMethod("sayHello", String.class);
139
- // 调用sayHello方法
140
- String result = (String) method.invoke(test, "jack.ma");
141
- System.out.println(result);
142
- }
143
- }
128
+
129
+ // 通过反射得到对象
130
+ // Class clazz = Class.forName("com.tommy.core.test.reflect.Test");
131
+ // 使用自定义的类加载器加载class
132
+ Class clazz = new MyClassLoader(baseOutputDir).loadClass("com.tommy.core.test.reflect.Test");
133
+ // 得到构造器
134
+ Constructor constructor = clazz.getConstructor(String.class);
135
+ // 通过构造器new一个对象
136
+ Object test = constructor.newInstance("jack.tsing");
137
+ // 得到sayHello方法
138
+ Method method = clazz.getMethod("sayHello", String.class);
139
+ // 调用sayHello方法
140
+ String result = (String) method.invoke(test, "jack.ma");
141
+ System.out.println(result);
142
+ }
143
+ }
144
144
145
145
自定义类加载器代码:
146
146
147
147
148
-
149
- public class MyClassLoader extends ClassLoader {
150
- private String baseDir;
151
- public MyClassLoader(String baseDir) {
152
- this.baseDir = baseDir;
153
- }
154
- @Override
155
- protected Class<?> findClass(String name) throws ClassNotFoundException {
156
- String fullClassFilePath = this.baseDir + name.replace("\\ .","/") + ".class";
157
- File classFilePath = new File(fullClassFilePath);
158
- if (classFilePath.exists()) {
159
- FileInputStream fileInputStream = null;
160
- ByteArrayOutputStream byteArrayOutputStream = null;
161
- try {
162
- fileInputStream = new FileInputStream(classFilePath);
163
- byte[ ] data = new byte[ 1024] ;
164
- int len = -1;
165
- byteArrayOutputStream = new ByteArrayOutputStream();
166
- while ((len = fileInputStream.read(data)) != -1) {
167
- byteArrayOutputStream.write(data,0,len);
168
- }
169
-
148
+
149
+ public class MyClassLoader extends ClassLoader {
150
+ private String baseDir;
151
+ public MyClassLoader(String baseDir) {
152
+ this.baseDir = baseDir;
153
+ }
154
+ @Override
155
+ protected Class<?> findClass(String name) throws ClassNotFoundException {
156
+ String fullClassFilePath = this.baseDir + name.replace("\\.","/") + ".class";
157
+ File classFilePath = new File(fullClassFilePath);
158
+ if (classFilePath.exists()) {
159
+ FileInputStream fileInputStream = null;
160
+ ByteArrayOutputStream byteArrayOutputStream = null;
161
+ try {
162
+ fileInputStream = new FileInputStream(classFilePath);
163
+ byte[] data = new byte[1024];
164
+ int len = -1;
165
+ byteArrayOutputStream = new ByteArrayOutputStream();
166
+ while ((len = fileInputStream.read(data)) != -1) {
167
+ byteArrayOutputStream.write(data,0,len);
168
+ }
169
+
170
170
return defineClass(name,byteArrayOutputStream.toByteArray(),0,byteArrayOutputStream.size());
171
171
} catch (FileNotFoundException e) {
172
172
e.printStackTrace();
@@ -403,15 +403,15 @@ Xml代码
403
403
}
404
404
405
405
406
-
407
-
408
- public class B
409
- {
410
- public void print()
411
- {
412
- System.out.println("old");
413
- }
414
- }
406
+
407
+
408
+ public class B
409
+ {
410
+ public void print()
411
+ {
412
+ System.out.println("old");
413
+ }
414
+ }
415
415
416
416
417
417
目录结构如下:
@@ -451,19 +451,19 @@ sourcepath //此处为当前目录
451
451
这里我用来实现一下这个功能,假设项目名称为project,此目录为当前目录,且在src/com目录中有一个Main.java文件。‘
452
452
453
453
454
-
455
- package com;
456
- public class Main
457
- {
458
- public static void main(String[ ] args) {
459
- System.out.println("Hello");
460
- }
461
- }
454
+
455
+ package com;
456
+ public class Main
457
+ {
458
+ public static void main(String[] args) {
459
+ System.out.println("Hello");
460
+ }
461
+ }
462
462
463
463
464
-
465
-
466
- javac -d bin src/com/Main.java
464
+
465
+
466
+ javac -d bin src/com/Main.java
467
467
468
468
上面的语句将Main.class生成在bin/com目录下。
469
469
@@ -487,8 +487,8 @@ sourcepath //此处为当前目录
487
487
如果使用:
488
488
489
489
490
-
491
- javac -implicit: none A.java
490
+
491
+ javac -implicit:none A.java
492
492
493
493
则不会生成 B.class。
494
494
0 commit comments