美文网首页
java反射的学习

java反射的学习

作者: 迷了jiang | 来源:发表于2016-12-22 22:37 被阅读7次

java也是一门编译型语言,但凡的是编译型语言,都有着不灵活的一面,不能像js这样的解释性语言的动态化,但是编译型语言都有强大的运行时,而反射就是java的运行时的体现。

下面看一个简单的Demo

public static void printClassMethodMessage(Object obj){   
 Class s = obj.getClass();    
System.out.println(s.getName());   
 //获取所有的方法数组    
Method[] ms = s.getMethods();   
 for (int i=0;i<ms.length;i++){        
//获取该方法的返回值类型        
Class returnType = ms[i].getReturnType();        
//返回值类型的名字       
 System.out.print(returnType.getName()+ " ");        
//方法名        
System.out.print(ms[i].getName()+"(");        
//获取该方法所有的参数        
Class[] paramTypes = ms[i].getParameterTypes();        
for (Class class1: paramTypes             ) {           
 //获取每个参数的类名           
 System.out.print(class1.getName()+",");       
 }        
System.out.println(")");   
 }
}

最后看一下编译和运行时的差异

  public static void main (String[] args) {  
//普通数组    
  ArrayList list = new ArrayList();      
//只能保存字符串的数组
  ArrayList<String> list1 = new ArrayList<String>();       
 list1.add("hello");//可以添加
 // list1.add(20);  //编译错误  
Class c1 = list.getClass();       
 Class c2 = list1.getClass();      
  System.out.println(c1==c2);       
 try {           
 Method m = c2.getMethod("add", Object.class);     //利用反射获取数组 add 方法     
  m.invoke(list1,20); //方法调用 
   System.out.println(list1.size());   //大小为2 
   System.out.println(list1);      
 for (Object ob: list1  ) {               
 System.out.println(ob); //正常
}          
 for (String str: list1  ) {  
  System.out.println(str);// 报错    
 }       
 }catch (Exception e){           
 e.printStackTrace();       
 }   
 }

上面的例子说明了,编译时和运行时的差别,运行时是有黑魔法的,它可以绕过编译去进行一些编译器不允许的操作。
反射的使用场景在spring框架是很广泛的,例如AOP面向切面编程和动态代理...

相关文章

  • [JAVA学习笔记] 反射机制

    [JAVA学习笔记] 反射机制 Java的反射通过Class类和java.lang.reflect类库实现。通过它...

  • Java中反射的用途

    Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框...

  • 【转】Java编程学习之反射技术及其应用

    【转】Java编程学习之反射技术及其应用 (原文链接:java编程学习之反射技术及其应用) 说明:原文中给出的代码...

  • java基础之反射机制,学习spring框架进阶必学!

    理解反射对学习Java框架有很大的帮助,如Spring框架的核心就是使用Java反射实现的,而且对做一些Java底...

  • java反射实例

    理解反射对学习Java框架有很大的帮助,如Spring框架的核心就是使用Java反射实现的,而且对做一些Java底...

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

    理解反射对学习Java框架有很大的帮助,如Spring框架的核心就是使用Java反射实现的,而且对做一些Java底...

  • 博客地址

    java注解-01、java注解-02、Git面试资源java反射-01、java反射-02、java反射-03为...

  • Java学习:反射

    反射 使用反射可以直接获取class字节码文件中的类型、属性、方法。 演示代码: 新建一个名为User的类作为反射...

  • java反射的学习

    java也是一门编译型语言,但凡的是编译型语言,都有着不灵活的一面,不能像js这样的解释性语言的动态化,但是编译型...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

网友评论

      本文标题:java反射的学习

      本文链接:https://www.haomeiwen.com/subject/fkjgmttx.html