ASP.Net+Android+IO开发S、.Net培训、期待与您交流!交通灯管理系统:
dao -->data access object ---->crud(对数据库的增删改查)
1、java的泛型类:
如果一个类的实例对象中的度要使用同一个泛型参数,即类中定义的方法使用同一种类型,并且这一个类型在类定义时指明
定义格式为class GenericDao<T>{
public void add(T t){}
public T getById(int id){}
public void deleteById(int id){}
public void update(T t){}
public List<T> findById(int id){}
}
这样我们在使用该类对象时,我们就可以通过改变T的类型的就可以使用该类;注意:泛型类型不能用在静态方法中,但是可以public static <T> getById(int id)();
GenericDao<People> dao = new GenericDao<People>;
2、类加载器:java vm提供了三个类加载器,可以看我附加的图片可以看到这三个加载器的关系,这三个类加载器符合树状结构,同时可以知道每个加载类的都有自己的管辖范围。类加载器有将类的字节码加载到内存中的功能。
类加载器的委托机制:当某个加载器加载类时,如果它有父类的加载器时,它不会先找是否找到时,它会将请求委托给父类,父类如果还有父类时,它会在委托给上级,当上级找不到时,它会交给子类,一直退回到发起者时,这是还没找到时,就会抛出异常
自己的类加载器的说明:要编写一个类加载器时,就必须实现ClassLoader类,有构造函数可知我们可以现指定该类的一个父类(类加载器),同时还要重写它的一个方法findClass,因为ClassLoad类使用模板方法设计模式实现的,所以我们只要提供如何找到对应的字节码就可以传递参数来实现,并由父类的方法实现委托机制
模板方法设计模式:父类中提供一个loadClass,父类中定义好执行流程,而局部流程父类不知道,由子类来完成,这就是模板方法设计模式
下面编写的类加载器主要功能就是将通过自定义的类加载器将类的字节码文件找到并通过解迷算法获得类的真实字节码,将真实字节码加载到内存中去
@SuppressWarnings("deprecation")
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
String classFileName = classDir+File.separator+name+".class";
try {
FileInputStream fis = new FileInputStream(classFileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
cypher(fis, bos);
fis.close();
byte[] bytes = bos.toByteArray();
return defineClass(bytes, 0, bytes.length);//将解密的字节码写入字节码中
}catch(Exception e)
{
throw new Exception(e);
}
return super.findClass(name);//调用上一级类加载器
}
3、代理,java中的代理就是通过代理,并对原有的功能进行提升,当用户使用代理就可获得功能更强的类。AOP面向方面的编程。在java虚拟机中只能生产有接口的类的子类,如果一个类没有实现接口,我们可以用CGLIB库实现。代理我们可以在源代码前,代码后,代码前后,或者在异常处理中