如何理解绕过编译运行

来源:6-1 Java 通过反射了解集合泛型的本质

Nomo_Air

2017-07-30 11:37

项目是先编译,在编译期间为类分配资源,编译后生成.class文件,运行是运行已经编译好的文件。 问:那如何理解绕过编译运行呢? 老师的意思并不是真正的绕过,而是,eclipse你点run的时候,是编译运行一起来,而老师的操作是,我不需要你编译了,因为第一次我就编译运行了,我现在拿编译好的.class文件,直接运行,不需要再次编译,因为编译好的文件没有泛型的概念,所以老师可以任意输入类型然后运行而没有报错。这是我自己的理解。

写回答 关注

3回答

  • qq_无所谓_46
    2018-06-06 23:43:15

    list<string>里面的string只是在编译的时候用来检测放入的数据类型是否正确,编译成class的时候已经去掉string了,你再通过反射进行添加的时候已经没有限制了。

  • 蜗牛总动员
    2017-08-09 16:59:35

    反射做了什么:反射使代码的灵活性提高了;

    就相当于人的逆向思维;

  • _夕晨踏雪
    2017-07-30 21:03:50

    我觉得不是这个意思,我idea直接运行的,其中就包括了生成字节码这一环节,总结就是,依然走正常的编译流程,通过反射的方法,只是不会再报错而已。

    Nomo_A...

    编译的过程是生成.class文件的过程,idea的运行是编译+运行。比如我们想用Util这个jar包。你会发现包下边都是.class结尾的文件,你可以用这个包下的方法,也就是说你用List,Map这些方法都是人家给你编译好的.class文件,你可以用它相关的方法,老师演示的int.class。就是这个意思,通过反射可以拿到的是这个类对应一些东西,如方法,参数这些,编译后的文件没有泛型的约束,也就是.class文件没有泛型的约束,所以,你用反射拿到这个方法对应的.class。然后运行这个.class。你就绕过了泛型约束,不知道你是怎么理解编译和运行,还有反射究竟做了什么。

    2017-08-07 00:07:23

    共 1 条回复 >

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

反射,Java高级开发必须要懂的知识点,学好Java高级课程的基础

151698 学习 · 343 问题

查看课程

相似问题