为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
反射——Java高级开发必须懂的_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

反射——Java高级开发必须懂的

Cedar
难度入门
时长 1小时20分
  • int a =5 静态 不是对象
    查看全部
    0 采集 收起 来源:Class类的使用

    2017-04-13

  • 动态加载,可以在 class使用到的时候才进行加载,防止因为一个类有错误导致多个类跑不起来的问题。--动态加载
    查看全部
  • 1,基本的数据类型,关键字都存在类类型。 例子:int.class String.class Double.class Class c = obj.getClass(); 方法也是对象: Method类:方法对象 Method[] ms = c.getMethods();//获取所有public方法,包括父类继承的方法 ms.getName();//方法的名称 Class returnType = ms.getReturnType(); returnType.getName();//返回值类型 Class[] paramTypes = ms.getParameterTypes();//参数的类类型数组
    查看全部
  • 已完成
    查看全部
  • 获取方法:getMethod(方法名,参数列表) 参数列表为:参数类型.class,也可以写成数组new Class[]{参数类型.class}
    查看全部
  • 基本数据类型、返回值类型void都存在类类型,如:int.class,void.class,double.class
    查看全部
  • new对象是编译时加载(静态),forName是运行时加载(动态) 短期类升级或者功能型的类要使用动态加载
    查看全部
  • 6.通过反射了解集合泛型的本质 import java.lang.reflect.Method; import java.util.ArrayList; /** * 通过反射了解集合泛型的本质 * @author shm * */ public class MethodDemo02 { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("hello"); list.add(20); ArrayList<String> list1 = new ArrayList<String>(); list1.add("hello"); //list1.add(20);//这个加入是错误的:The method add(int, String) in the type ArrayList<String> is not applicable for the arguments (int) Class c1 = list.getClass(); Class c2 = list1.getClass(); System.out.println(c1==c2); //反射的操作都是编译后的操作 /** * c1=c2结果返回TRUE说明编译后集合的泛型是去泛型化的 * java中集合的泛型,是防止错误输入的,只在编译阶段有效,绕过编译后就无效了 * 验证:我们可以通过反射操作来绕过编译 */ try { Method method = c2.getMethod("add", Object.class); method.invoke(list1, 20); System.out.println(list1); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
    查看全部
  • 5.方法的反射 (1)如何获取某个方法 方法的名称和方法的参数列表才能唯一决定某个方法 (2)方法的反射的操作 mentod.invoke(对象,参数列表) eg: A a1= new A(); Class c = a1.getClass(); Method method = c.getMethod("print",int.class,int.class); method.invoke(a1);//等同于a1.print();的效果
    查看全部
  • 4.打印类成员变量信息 /** * 打印类成员变量信息 * java.lang.reflect.Field * getFields() 获取所有public成员变量信息 * getDeclaredFields() 获取该类自己的声明的信息 * @param obj */ public static void printFieldMessage(Object obj) { Class c = obj.getClass(); //Field[] field = c.getFields(); Field[] fields = c.getDeclaredFields(); for (Field field : fields) { //得到成员变量的类型的类类型 Class fieldType = field.getType(); System.out.print("成员变量类型:"+fieldType.getName()); //得到成员变量名称 String fieldName = field.getName(); System.out.print(" 成员变量名称:"+fieldName); System.out.println(); } }
    查看全部
  • 1,集合的泛型,是防止错误输入的,只在编译阶段有效 可以用反射的方法绕过泛型,向集合中添加元素 List<String> list; list.add(100); m.invoke(list,100);
    查看全部
  • Important
    查看全部
  • ...
    查看全部
  • 方法的反射 1,方法的名称和参数列表才能决定某个方法 2,方法的反射操作method.invoke(对象,参数列表) Class c = new Class(); c.print(); Method m = c.getMe......; m.invoke();
    查看全部
  • 1,基本的数据类型,关键字都存在类类型。 例子:int.class String.class Double.class Class c = obj.getClass(); 方法也是对象: Method类:方法对象 Method[] ms = c.getMethods();//获取所有public方法,包括父类继承的方法 ms.getName();//方法的名称 Class returnType = ms.getReturnType(); returnType.getName();//返回值类型 Class[] paramTypes = ms.getParameterTypes();//参数的类类型数组
    查看全部

举报

0/150
提交
取消
课程须知
童鞋们,学习本课程前需要熟悉Java面向对象的思想,并能掌握Java IO输入输出流、集合和泛型等知识。可参考慕课网Java入门的一、二、三季以及我的文件我做主——Java IO流课程。
老师告诉你能学到什么?
1、能够理解并应用反射机制。 2、能够了解反射机制在集合泛型中的应用。 3、有利于更好的学习框架等Java高级技术。
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!