搜索
简帛阁>技术文章>黑马程序员_学习笔记1泛型及动态代理类的总结

黑马程序员_学习笔记1泛型及动态代理类的总结

---------------------- android培训、java培训、期待与您交流! ----------------------

        由于我是先看的学习视频,后报名黑马,因此写的日记只能记录现在的学习状态了。

       在报名黑马之前,我已经看过了张孝祥老师的绝大部分视频,非常感谢各位老师能免费公布学习视频。最近一直在看中文第四版的(即《thinking in java》)和《深入理解java虚拟机》,看书的过程中发现书中的很多例子在张老师的视频中都有所体现,而张老师的视频更侧重实际中的应用。

      这几天一直在看关于泛型和初始化过程的知识。以前只知道加载类,并不知道加载类这么一个步骤居然分了4个步骤,初始化也在这几个步骤中分步进行。这使我明白了各个不同的修饰符对初始化的影响。例如 static Object obj =  new Object();static final  Object obj =new Object();这两句代码在初始化的时候是不同的。第一句被分成了两步进行,一次是在对静态变量初始化,一次是对类进行实例化,对应编译后的一个方法属性。而第二句对应了编译后的一个constontvalue属性,是一次初始化中完成的。

泛型是对编译后的类不起作用,类型参数在编译后的文件中被擦除。这导致一般情况下无法使用类型参数信息。通过张老师的视频知道了一种例外,就是通过将泛型信息放入一个类的方法参数中,然后通过这个方法的反射调用可以得到这个方法的类型参数信息。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率

总体而言,泛型方便了编程人员查找错误,是程序数据的使用更加安全,较少的出现意外信息。泛型可以通过使用通配符来界定类到底能接收什么样的类型信息。

泛型通配符:

 1、如果只指定了,而没有extends,则默认是允许Object及其下的任何Java类了。也就是任意类。

 2、通配符泛型不单可以向下限制,如,还可以向上限制,如,表示类型只能接受Double及其上层父类类型,如Number、Object类型的实例。

 3、泛型类定义可以有多个泛型参数,中间用逗号隔开,还可以定义泛型接口,泛型方法。这些都泛型类中泛型的使用规则类似。 

java.lang.reflect.Proxy:这是 Java 动态代理机制的主类,它提供了一组静态方法来为一组接口动态地生成代理类及其对象

 方法 1: 该方法用于获取指定代理对象所关联的调用处理器

1,static InvocationHandler getInvocationHandler(Object proxy)

 方法 2:该方法用于获取关联于指定类装载器和一组接口的动态代理类的类对象

2,static Class getProxyClass(ClassLoader loader, Class[] interfaces)

方法 3:该方法用于判断指定类对象是否是一个动态代理类

3,static boolean isProxyClass(Class cl)

 4,方法 4:该方法用于为指定类装载器、一组接口及调用处理器生成动态代理类实例

static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)

java.lang.reflect.InvocationHandler:这是调用处理器接口,它自定义了一个 invoke 方法,用于集中处理在动态代理类对象上的方法调用,通常在该方法中实现对委托类的代理访问。
InvocationHandler 的核心方法Object invoke(Object proxy, Method method, Object[] args) 该方法负责集中处理动态代理类上的所有方法调用。第一个参数既是代理类实例,第二个参数是被调用的方法对象,第三个方法是调用参数。调用处理器根据这三个参数进行预处理或分派到委托类实例上发射执行

java.lang.ClassLoader:这是类装载器类,负责将类的字节码装载到 Java 虚拟机(JVM)中并为其定义类对象,然后该类才能被使用。Proxy 静态方法生成动态代理类同样需要通过类装载器来进行装载才能使用,它与普通类的唯一区别就是其字节码是由 JVM 在运行时动态生成的而非预存在于任何一个 .class 文件中。

每次生成动态代理类对象时都需要指定一个类装载器对象(参见 Proxy 静态方法 4 的第一个参数)

通过以下步骤使用动态代理:

1,通过实现 InvocationHandler 接口创建自己的调用处理器;

,2,通过为 Proxy 类指定 ClassLoader 对象和一组 interface 来创建动态代理类;

,3,通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;

,4,通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入。

 

    不过最近几天觉得学习这些知识有些吃力,好像也没什么实用价值。虽然解决了心中的疑问,可似乎又觉得没这个必要学这些东西。不知道如何是好。

   这些天一直在论坛逛,希望能弄多点技术分,可是发现论坛里大部分的问题都是很抽象的问题。刚开始学习的人为什么不多写点代码,直接把代码中的问题写出来呢?我看视频的时候写过俄罗斯方块,在写的过程中发现最多的问题是经常出现不符合预期的效果。我和一个参加工作一段时间的java程序员聊过,他说实际工作中最重要的是解决实际问题的能力。单纯的学习并不能提高能力。

    希望日后进入黑马后能多遇到点实际项目,多遇到点问题。

 

   

---------------------- android培训、 java培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net/heima
ndroid培训、java培训、期待与您交流!由于我是先看学习视频,后报名黑马,因此写日记只能记录现在学习状态了。在报名黑马之前,我已经看过了张孝祥老师绝大部分视频,非常感谢各位老师能免费公
indowsPhone7手机开发、Net培训、期待与您交流!什么是?泛型是NET20引入一个概念。泛型不仅是C语言一部分,而且与程序集中IL代码紧密继承。有了我们就可以创建于独立于被包
android培训、java培训、期待与您交流!基本应用泛型是java15中的一个新特性。没有使用泛型时,只要是对象,不管是什么类型对象,都可以存储进同一个集合中。使用集合,可以讲一个集合
android培训、java培训、java学习技术博客、期待与您交流!加载器:加载工具,一个中出现了一个名字,java虚拟机首先把该类字节码加载进内存,Java虚拟机可以安装多个类加载
络编程相关知识整理01网络编程概述(了解)A:计算机网络是指将地理位置不同具有独立功能多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件网络通信协议管理和协调下,实现
android培训java培训2011年8月7日星期日其实这是我今天凌晨两点多才看完,所以日记就写了今天日期,心情是越来越好了,就快要完成任务。其实很累但也感受到收获喜悦,是值得。我看了加载
WindowsPhone7手机开发、Net培训、期待与您交流!CSDN终于可以发帖了,把前几天补上4月12日今晚网速很慢,下黑马视频很卡,我下了一本《C基础教程》电子书来学习,做笔记如下:一、IL
avaScript和Dom关系好比C和NETFramework关系。内容:使用JavaScript操作Dom进行DHTML开发。Alert都不是JavaScript中定义东西,它是Dom方法;
——android培训、java培训、期待与您交流!———概述:JDK15版本以后出现新特性。用于解决安全问题,是一个类型安全机制。好处1将运行时期出现问题ClassCastException
——android培训、java培训、期待与您交流!———2基本使用练习:比较字符串长度,按字符串长度排序!分析:字符串本身是具备比较性intcompareTo(Stringstr);但是这里