A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Queen123 中级黑马   /  2014-6-19 15:56  /  506 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对于泛型,反射感觉很难理解,看看 大家是怎么消化的?

2 个回复

倒序浏览
泛型,就是对集合中可以存储各种类型的对象的一种要求,加了泛型,就是把集合中的元素规范为某一种特定的类型。而,反射,我感觉,是站在二进制的字节码上,去获取源代码中的各种成分。
回复 使用道具 举报
  泛型:      
       (1)泛型是把明确数据类型的工作推迟到了创建对象或者调用方法时才去明确的一种特殊数据类型。
        (2)泛型的格式:
                <数据类型>
        (3)泛型的好处:
                A:优化了程序设计,解决了黄色警告线的问题。
                B:把运行时期异常提前到了编译期。
                C:避免了强制类型转换。
        (4)什么时候用泛型?
                看API,如果类或者接口后面有<>,说明这里用泛型。
                一般来说,集合中用。
反射:

     就是把Java类中的各种成分映射成相应的java类,例如,一个java类中用一个Class类的对象来表示,一个类中

组成部分:

      成员变量,方法,构造方法,包等信息也用一个个的java类来表示。表示java类的Class类提供一

     系列的方法来获取变量,方法构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,

    它们是Field、Method、Constructor、Package等

一个类中每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对象后   

案例:

import java.lang.reflect.Constructor;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;



public class ReflectDemo {

public static void main(String[] args) throws ClassNotFoundException,

NoSuchMethodException, SecurityException, InstantiationException,

IllegalAccessException, IllegalArgumentException,

InvocationTargetException {

// 获取字节码文件对象

Class c = Class.forName("cn.itcast_01.Person");



// 通过无参构造器创建对象

Constructor con = c.getConstructor();

Object obj = con.newInstance();



// 获取的是无参无返回值的方法show

Method m = c.getMethod("show");

// obj.m(); 理解

// public Object invoke(Object obj,Object... args)

m.invoke(obj); // obj对象调用m方法。



System.out.println("----------------------------");



// function(String name)

Method m2 = c.getMethod("function", String.class);

m2.invoke(obj, "张三");



System.out.println("----------------------------");



// String getString(String name, int age)

Method m3 = c.getMethod("getString", String.class, int.class);

Object oo = m3.invoke(obj, "java", 20);

System.out.println(oo);



System.out.println("----------------------------");



// hello()

// NoSuchMethodException -- 由于hello()方法是私有的,必须通过getDeclaredMethod获取。

Method m4 = c.getDeclaredMethod("hello");

// 暴力访问

m4.setAccessible(true);

// 值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。

m4.invoke(obj);

}

}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马