java基础加强--要点总结4
2011-03-19 18:39
453 查看
java基础加强
49.泛型的实际参数应该是引用类型,不能是基本数据类型。
50.利用泛型进行数组和集合之间相互拷贝的相关程序
54.根据反射来获得泛型的实际参数类型
59.自制类加载器,包括加密解密
66.将InvocationHandler中我们自己的代码抽取出来,以一个对象的方式传递进去,有助于代码良好的封装。让下面的代码来说明一切吧!
68.java基础加强部分终于看完了,博客中的所有代码都是我在看完视频后亲手演练的。这几天虽然很累,但也收获了不少东西,编码能力也有所加强。明天继续努力,争取尽早看完所有视频。
49.泛型的实际参数应该是引用类型,不能是基本数据类型。
50.利用泛型进行数组和集合之间相互拷贝的相关程序
public class GenericDAO<T>{ private T field; public void save(T boj){} public T getById(int id){} }
54.根据反射来获得泛型的实际参数类型
package jiami; import java.io.*; public class JiamiTest { public static void main(String[] args)throws Exception { // TODO Auto-generated method stub String srcpath = "C://Documents and Settings//kaikai//桌面//java//Practice//bin//jiami//SrcFile.class"; String despath = "C://SrcFile.class"; FileInputStream fi = new FileInputStream(srcpath); FileOutputStream fo = new FileOutputStream(despath); jiami(fi,fo); fi.close(); fo.close(); } public static void jiami(InputStream in, OutputStream out)throws Exception { int b=-1; while((b=in.read())!=-1) { out.write(b^0xff); } } } ***************************************** package jiami; import java.util.Date; public class SrcFile extends Date { @Override public String toString() { return "heill,kenny!"; } public static void main(String[] args) { } }
59.自制类加载器,包括加密解密
package proxytest; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.Collection; public class ProxyTest { public static void main(String[] args)throws Exception { // TODO Auto-generated method stub Collection proxy = (Collection)Proxy.newProxyInstance(Collection.class.getClassLoader(), new Class[]{Collection.class}, new InvocationHandler() { ArrayList target = new ArrayList(); @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { long start = System.currentTimeMillis();//代理程序添加的代码 Object retVal = method.invoke(target, args);//执行目标程序的方法 long end = System.currentTimeMillis();//代理程序添加的代码 System.out.println(method.getName()+":"+(end-start));//代理程序添加的代码,打印执行时间 return retVal; } } ); //System.out.println("xxx2"); proxy.add("fsda"); //System.out.println("xxx"); proxy.add("gdsf"); proxy.add("fdsaf"); System.out.println(proxy.size()); } }
66.将InvocationHandler中我们自己的代码抽取出来,以一个对象的方式传递进去,有助于代码良好的封装。让下面的代码来说明一切吧!
package proxytest; import java.io.*; import java.util.Properties; import java.util.*; public class BeanFactory { Properties pro = new Properties(); public BeanFactory(InputStream in) { try { pro.load(in);//加载配置文件 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) throws Exception{ InputStream in = BeanFactory.class.getResourceAsStream("config.properties");//得到配置文件的输入流 Object bean = new BeanFactory(in).getBean("classname");//配置文件的属性名 System.out.println(bean.getClass().getName()); /*Collection proxy = (Collection)bean; proxy.add("fsda"); proxy.add("gdsf"); proxy.add("fdsaf"); System.out.println(proxy.size());*///如果使用了代理类,并且target是ArrayList的话可以用这段代码检验一下 } public Object getBean(String name)throws Exception { String clazzname = pro.getProperty(name);//得到属性值 Object bean = null; try { Class clazz = Class.forName(clazzname); bean = clazz.newInstance();//实例化 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if(bean instanceof ProxyTest) { //System.out.println("fda");//如果是属于代理的话执行下面的代码 ProxyTest proxyTest = (ProxyTest)bean; Advice advice = (Advice)Class.forName(pro.getProperty((name+".advice"))).newInstance(); Object target = Class.forName(pro.getProperty((name+".target"))).newInstance(); proxyTest.setAdvice(advice); proxyTest.setTarget(target); Object proxy = proxyTest.getProxy();//因为ProxyTest使用到了Advice和target,所以需要得到这两个的实例对象 return proxy; } return bean; } } ********************************* package proxytest; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.Collection; public class ProxyTest { private Object target; private Advice advice; public Object getProxy() { Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { advice.beforeMethod(method);//将我们添加的代码用对象的形式传进来,有助于良好的封装性 Object retVal = method.invoke(target, args); advice.afterMethod(method);//将我们添加的代码用对象的形式传进来,有助于良好的封装性 return retVal; } } ); return proxy; } public Object getTarget() { return target; } public void setTarget(Object target) { this.target = target; } public Advice getAdvice() { return advice; } public void setAdvice(Advice advice) { this.advice = advice; } } ***************************************** config.properties文件和其他类在同一个包中,下面是有关内容: #使用普通类 #classname = java.util.ArrayList #使用代理类 classname = proxytest.ProxyTest #下面的两条属性是proxytest用到的,如果是普通类的话不会使用 classname.advice = proxytest.MyAdvice classname.target = java.util.ArrayList
68.java基础加强部分终于看完了,博客中的所有代码都是我在看完视频后亲手演练的。这几天虽然很累,但也收获了不少东西,编码能力也有所加强。明天继续努力,争取尽早看完所有视频。
相关文章推荐
- java基础加强--要点总结2
- 黑马程序员--Java基础加强--11.【MyEclipse使用快捷键提取方法的要点】【个人总结】
- java基础加强--要点总结3
- java基础加强--要点总结1
- 黑马程序员--Java基础加强--10.【PropertyDescriptor操作JavaBean VS 反射操作Java类】【个人总结】
- 黑马程序员--Java基础加强--02.代码简化 书写规律I_原始数据类型【重载】【多态】【泛型】【泛型限定】【个人总结】
- 黑马程序员——java基础加强高薪技术总结
- java基础5--多线程--要点总结
- Java基础加强总结——注解(Annotation)
- Java基础加强总结(一)——注解(Annotation)
- Java基础加强总结(一)——注解(Annotation)
- java的基础要点总结_17
- Java基础要点总结
- 黑马程序员----【java基础加强】张孝祥视频总结1
- 黑马程序员--Java基础加强--16.利用反射操作泛型V【通过Constructor反射解析泛型构造方法】【通过Field反射解析泛型成员变量】【个人总结】
- Java基础加强总结(1)
- 黑马程序员----【java基础加强】张孝祥视频总结2
- Java基础加强总结(5)(代理)
- 黑马程序员--Java基础加强--04.代码简化 书写规律III_数组参数【重载】【数组】【可变参数数组】【泛型可变参数数组】【个人总结】