Skip to content

Commit 644691e

Browse files
authored
Update 20、javac和javap.md
1 parent cac85ff commit 644691e

File tree

1 file changed

+60
-60
lines changed

1 file changed

+60
-60
lines changed

docs/java/basic/20、javac和javap.md

Lines changed: 60 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -125,48 +125,48 @@ java提供了JavaCompiler,我们可以通过它来编译java源文件为class
125125
task.call();
126126

127127

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+
}
144144

145145
自定义类加载器代码:
146146

147147

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+
170170
return defineClass(name,byteArrayOutputStream.toByteArray(),0,byteArrayOutputStream.size());
171171
} catch (FileNotFoundException e) {
172172
e.printStackTrace();
@@ -403,15 +403,15 @@ Xml代码
403403
}
404404

405405

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+
}
415415

416416

417417
目录结构如下:
@@ -451,19 +451,19 @@ sourcepath //此处为当前目录
451451
这里我用来实现一下这个功能,假设项目名称为project,此目录为当前目录,且在src/com目录中有一个Main.java文件。‘
452452

453453

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+
}
462462

463463

464-
465-
466-
javac -d bin src/com/Main.java
464+
465+
466+
javac -d bin src/com/Main.java
467467

468468
上面的语句将Main.class生成在bin/com目录下。
469469

@@ -487,8 +487,8 @@ sourcepath //此处为当前目录
487487
如果使用:
488488

489489

490-
491-
javac -implicit:none A.java
490+
491+
javac -implicit:none A.java
492492

493493
则不会生成 B.class。
494494

0 commit comments

Comments
 (0)