在去年的年底的时候,我就开始自学Java。学习了Java语言基础、Java面向对象、JavaSE核心类库、MySQL数据库开发。由于我有学习C#的基础,所以理解起来也不是特别的困难。不过我这次自学也只是熟悉一下代码,对代码也没有去系统的记忆。在这次的学习过程中,我觉得最困难的就是对链、栈、堆的理解有点困难。因为这全都是凭借自己的想象来完成,没有实际过程让你看。不过通过了这次学习,我发觉学习Java代码倒是其次,主要的还是学习它的编程思想,以及编程思路,将有限的代码发挥出无限的作用。
以前写代码的时候,只知道一个类对应一个功能,完全不知道一个类其实可以多次利用。而且以前写代码根本就不会考虑使用的效率,现在发觉我们写代码其实就是为了提高效率。
下面就是测试类的加载全过程的代码
package com.bjsxt.test;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class FileSystemClassLoader extends ClassLoader{
private String rootDir;
public FileSystemClassLoader(String rootDir) {
this.rootDir = rootDir;
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
Class<?> c = findLoadedClass(name);
if(c != null) {
return c;
}else {
ClassLoader parent = this.getParent();
c = parent.loadClass(name);
if(c != null) {
return c;
}else {
byte[] classData = getClassData(name);
if(classData == null) {
throw new ClassNotFoundException();
}else {
c = defineClass(name, classData, 0, classData.length);
}
}
}
return c;
}
private byte[] getClassData(String classname) {
InputStream is = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
byte[] buffer = new byte[1024];
int temp = 0;
while((temp = is.read(buffer))!=-1) {
baos.write(buffer, 0, temp);
}
return baos.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
return null;
}finally {
try {
if(is!=null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(baos!=null) {
baos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return baos.toByteArray();
}
}