`

java反射实验01

    博客分类:
  • JAVA
阅读更多

论坛上看到的一个帖子,我给回复了

 

package org.coffeesweet.test01;

import java.util.ArrayList;

public class Test01 {   
    public static void main(String[] args) throws Exception{   
        ArrayList<Integer> arr1=new ArrayList<Integer>();   
        ArrayList<String> arr2=new ArrayList<String>();   
        //下面打印出来true,证明泛型只是编译器级别的一个东西,加载到内存还是一样的   
        System.out.println(arr1.getClass()==arr2.getClass());   
        //那么可以用跳过编译器用反射直接加入不通类型的东西,测试打印出"dodo"字符串   
        arr1.add(55);   
        arr1.getClass().getMethod("add", Object.class).invoke(arr1, "dodo");   
        System.out.println(arr1.get(1));   
        //既然如此那么下面这个也应该能正确打印,但是报异常异常为: java.lang.ClassCastException   
        arr2.add("why");
        arr2.getClass().getMethod("add", Object.class).invoke(arr2, 33);   
//        System.out.println(arr2.get(1));//这里其实和add的道理一样,还是没有绕过编译时泛型的检查
        //如果你add的时候用反射绕过了,get的时候为什么不绕呢??
        
        //arr1之所以可以是因为编译器自动将Integer看作Object自动调用了println(Object obj)方法,其实还是没有
        //绕过编译时的泛型定义,只是有对应的println方法罢了,还是检查了<Integer>了的。pringln的时候会
        //直接调用println(Object obj)
        //arr2同样会检查泛型类型,一看是<String>,那么就会找println(String s)方法,因为存在这个方法,所以
        //直接调用了println(String s)该方法,这就是为什么arr2的out.pringln会调用打印String的方法,而不是
        //打印Object的方法了,而调用String的pringln的方法必然会作(String)强转了。
        
        //下面是get的时候也通过反射来绕过编译时泛型检查,肯定是没问题的。
        //呵呵,没有任何矛盾,不明白请跟帖,我回回复。
        Object obj1=arr2.getClass().getMethod("get", int.class).invoke(arr2, 1);
        System.out.println(obj1);
        
    }   
  
}  

 

分享到:
评论

相关推荐

    Java实验2 反射.doc

    本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)实验报告,基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java...

    java反射机制以及试验例子

    有大量的实验例子和反射的各种方法说明,有大量的实验例子和反射的各种方法说明。

    Java反射机制学习总结

    Java反射机制是Java编程语言中一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于java.lang.reflect包中的API,主要包括Class类、Constructor类、Method类和Field类。以下是...

    java实验报告.docx

    【实验十三】讲解了Java反射和注解,反射允许程序在运行时动态获取类的信息并操作类的对象,注解提供了元数据,为编译器或运行时环境提供了额外的信息。 【实验十四】涵盖了Java数据库程序设计,可能包括JDBC API的...

    java2实验教程第6版实验指导书

    - Java反射机制,运行时动态操作类和对象。 这些章节覆盖了Java编程的基础到核心部分,通过实际操作和实验,读者可以巩固理论知识,提升编程能力。在学习过程中,应结合代码示例进行实践,以便更好地理解和掌握...

    java反射技术分析类结构实验

    运行程序,指定一个要分析的类名称,如java.lang.Double,输出类中声明的属性、方法、构造函数等。

    Java补充实验.doc

    【Java 实验报告概述】 Java 是一种广泛使用的高级编程语言,尤其在软件开发领域具有重要地位。本实验报告涵盖了Java程序设计的基础与进阶知识,旨在帮助初学者掌握Java编程的核心概念和技术。基础篇主要涉及以下几...

    JAVA实验典型举例

    "JAVA实验典型举例"这个资源提供了一系列的Java实例,旨在帮助学习者深入理解和应用Java的核心概念。通过分析这些代码,我们可以强化理论知识,提高解决问题的能力。 首先,Java是一种面向对象的编程语言,它的主要...

    华科Java实验报告.7z

    【标题】: "华科Java实验报告" 是一份由华中科技大学学生编写的关于Java编程的实验报告。这份报告可能涵盖了Java语言的基础知识、进阶概念以及实际编程实践的总结。 【描述】: "华科Java实验报告.7z" 重复三次,...

    Java实验报告及源码

    9. **反射机制**:Java的反射机制允许程序在运行时动态地获取类的信息并调用其方法,实验可能涉及Class类、Constructor、Method等的使用。 10. **网络编程**:Java提供了Socket和ServerSocket类进行网络通信,实验...

    JAVA反射知识点总结

    本文介绍了JAVA反射类的基本概念,欢迎阅读学习,一起进步。 文章目录一.反射的基本概念二.反射常用类三.使用反射的基本步骤四.Class类讲解(1)Class类是反射机制的起源和入口(2)Class类存放类的结构信息(3)...

    中南大学Java实验报告六

    【Java 实验报告】 在Java编程的学习过程中,实验报告是重要的组成部分,它旨在深化学生对理论知识的理解,并通过实际操作提升编程技能。本实验报告针对的是中南大学的学生,主要聚焦于Java语言的实践应用。实验...

    Java 实验教程

    Java实验教程旨在通过实际操作帮助学习者深入理解Java编程语言的核心概念。这是一份详细的指导文档,涵盖了多个关键知识点,旨在提升编程技能和问题解决能力。以下是对这些实验案例中的重要概念和技术的深入探讨: ...

    东北大学Java实验报告2018.rar

    10. **反射**:Java反射机制可以在运行时动态获取类的信息并操作对象,是高级编程的重要工具。 11. **JavaFX或Swing**:用于开发图形用户界面(GUI)的应用程序,提供丰富的组件库。 12. **JDBC**:Java数据库连接...

    java实验的题目

    Java实验题目通常涵盖了许多核心Java概念,旨在帮助学习者深入理解和掌握编程技能。在这个实验科目中,你可能会遇到各种挑战,这些挑战将涉及到以下几个关键知识点: 1. **基础语法**:Java的基础语法包括变量声明...

    大三java课程要求10个小实验

    实验10可能是对Java高级特性的探索,例如反射、泛型或者注解。这些特性在实际开发中有着广泛应用,能够增强代码的灵活性和可维护性。 这些实验文档提供了源代码和截图,为学习者提供了直观的参考,使他们能够更好地...

    Java大学实用教程实验指导[耿祥义编著][习题解答]

    《Java大学实用教程实验指导》是由耿祥义编著的一本专为大学生设计的Java编程学习书籍,旨在帮助学生深入理解和掌握Java编程语言。这本书包含了丰富的实验内容和习题解答,是学习Java语言的重要参考资料。 Java是一...

    java 实验参考 没有答案

    Java实验参考指南主要针对的是Java教学的教师,用于提供结业考试或项目设计的题库。这个资源的特点在于它只包含题目,不提供答案,旨在让教师根据学生的实际水平和课程内容灵活设置挑战,激发学生独立思考和解决问题...

    java 高级开发的课后实验报告

    6. **反射**:Java反射机制允许在运行时动态访问类的信息,创建对象,调用方法。在实验中,反射可能会用于实现动态代理、配置文件解析等功能。 7. **泛型**:泛型提高了代码的类型安全性,减少了强制类型转换。实验...

    云大java实验,试验1-12,

    9. **反射机制**:探索Java的反射API,了解如何在运行时动态地获取类的信息并操作对象。 10. **集合高级特性和泛型**:学习Set、Queue、Deque等集合接口,以及泛型的使用,提升代码的类型安全性和可读性。 11. **...

Global site tag (gtag.js) - Google Analytics