BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #61560同步于 2019/3/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

关于java反射

jxsrlsl1234
2019/3/20镜像同步8 回复
问个问题:java反射的实际意义在哪里,平时编程过程中有哪些场景会用到? 另一个问题:IDE是否让程序员变傻了?IDE中写代码过程中对于某些对象的属性及方法提示,IDE是怎样实现的。 反射是在运行过程中对于任意一个类我们很明确类的所有属性和方法,IDE这一点是在运行前就知道了,因此不是反射机制实现的?
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
Kniost33机器人#1 · 2019/3/20
说说我粗浅的理解,很多注解就是用反射写的,在你不知道一个对象长什么样子的时候反射就派上用场了。IDE只是辅助记忆,当你习惯写代码以后自动提示只是起到纠正的作用,多刷刷题,多练练不用ide写代码就不会觉得自己记不住api了,再说实际编程环境中本来就可以查的。IDE的实现方式我倒是不了解,但是大概是用了编译器的解析代码的技术。你看java的提示很完善,因为是强类型语言,有固定的解析方式,当你写python的时候,ide很多情况下不知道你会写什么。
nanguohao机器人#2 · 2019/3/20
第一个问题: 实现代码解耦,比如说spring的依赖注入需要借助反射来查找类、实例化类对象; 实现SPI,比如Java通过JDBC规范接口定义了数据库的连接接口,在应用时需要查找类并实例化对象; tomcat等servlet服务器实现Java web服务,同样需要反射。 第二个问题: IDE能够实现代码原理我不清楚,但是我猜是少不了编译前端的内容,词法解析、语法解析等。 Java的反射是动态#运行时#信息,IDE的代码提示我觉得是静态代码分析为主,不是反射,譬如IDE没法提前知道我动态运行时悄悄给某个类添加一个字段。 附加问题: IDE会不会让人变傻? 要一分为二的看待问题,学习初期,IDE提供的各种便捷功能能够让人首先专注于语言本身,提振信心,而不是用一些配置把人搞得手忙脚乱。 语言学习渡过之后看需求,如果觉得足够用了那我觉得用IDE未尝不可。如果想深入了解,随着碰到的问题越来越多可能自己就慢慢会绕开 IDE去研究,比如很经典的一个问题是:JAVA的CLASSPATH究竟是什么?平时在IDE里一键就运行了,现在不用IDE的话能不能用命令行把这些 启动参数都配齐了(我配不齐)。 随着越来越深入可能就不再会执著用不用IDE,开发的时候用IDE能提高效率,这是不二之选。但是你心里可能很清楚一键启动背后那些工具都bang 我们做了什么,即使没有IDE你也可以用命令行自己配置好。 再附加一个: 我觉得最经典的莫过于金刚经中的一句话:“汝等比丘,知我说法,如筏喻者;法尚应舍,何况非法”,世尊说所有佛法就像船一样,是帮助大家过河(佛教中的到达智慧彼岸)的,不要执着于什么佛法不佛法的,佛法只是一个工具,不要执着。
jxsrlsl1234机器人#3 · 2019/3/20
谢谢 【 在 nanguohao (南郭昊) 的大作中提到: 】 : 第一个问题: : 实现代码解耦,比如说spring的依赖注入需要借助反射来查找类、实例化类对象; : 实现SPI,比如Java通过JDBC规范接口定义了数据库的连接接口,在应用时需要查找类并实例化对象; : ...................
jxsrlsl1234机器人#4 · 2019/3/20
谢谢 【 在 Kniost33 (kniost33) 的大作中提到: 】 : 说说我粗浅的理解,很多注解就是用反射写的,在你不知道一个对象长什么样子的时候反射就派上用场了。IDE只是辅助记忆,当你习惯写代码以后自动提示只是起到纠正的作用,...
omiga机器人#5 · 2019/3/28
动态代理
RuiDu93机器人#6 · 2019/3/29
1. 增加语言动态性,例如一些类的热加载,rpc实现 2. 变傻看你怎么衡量,面试时刷题白板编程感觉自己用久了ide啥都不会,工作时永vin撸c艹才发现ide带来的效率提升不是一点半点…
cc19931002机器人#7 · 2019/3/29
其实反射这个名字取得很形象,就像人如果没有镜子你就不知道你自己长什么样子,是不是有两个眼睛一个鼻子。程序代码里面没有反射,就不知道现在的一个对象里面有些什么字段和方法。所以 @南郭昊 同学说的那几个东西,其实应该跟反射关系不是特别大,那一块更多的是类加载的东西。 ide提高编程效率,但是入门不建议ide,路都不会走,还是先不要跑,不然跑着跑着发现是被人背着跑回头路也不会走
rancho机器人#8 · 2019/3/29
说明你平时接触的代码每一个对象都是自己写出来的,但是还有很多时候你没法知道自己要初始化什么对象。比如对象是其他人提供的,通过序列化传递给你,虚拟机根本没编译过这个类,虚拟机都不知道这个类长啥样,你怎么把它还原到堆栈里面?