反射中的一个问题点:利用Method执行main方法特殊的地方
2017-05-12 17:47
155 查看
利用Method执行main方法
------------main方法很特殊,以下普通的就不会:
原型:
--------------
输出:
拓展:
反射可以访问私有方法,是不是和Java的思想冲突呀?
一点都不违背,java思想是从现实中来的,你想一下现实中,举例:社会不允许杀人,但是你硬要杀人还是没有办法阻止的。
问题: 启动Java程序的main方法的参数是一个字符串数组,即public static void main(String[] args),通过反射方式来调用这个main方法时, 如何为invoke方法传递参数呢?按jdk1.5的语法,整个数组是一个参数,而按jdk1.4的语法,数组中的每个元素对应一个参数,当把一个字符 串数组作为参数传递给invoke方法时,javac会到底按照哪种语法进行处理呢?jdk1.5肯定要兼容jdk1.4的语法,会按jdk1.4的语法进行处理, 即把数组打散成为若干个单独的参数。所以,在给main方法传递参数时,不能使用代码mainMethod.invoke(null,new String[]{“xxx”}), javac只把它当作jdk1.4的语法进行理解,而不把它当作jdk1.5的语法解释,因此会出现参数类型不对的问题。 解决办法: mainMethod.invoke(null,new Object[]{new String[]{"xxx"}}); mainMethod.invoke(null,(Object)new String[]{"xxx"}); ,编译器会作特殊处理,编译时不把参数当作数组看待, 也就不会数组打散成若干个参数了
------------main方法很特殊,以下普通的就不会:
原型:
--------------
输出:
拓展:
反射可以访问私有方法,是不是和Java的思想冲突呀?
一点都不违背,java思想是从现实中来的,你想一下现实中,举例:社会不允许杀人,但是你硬要杀人还是没有办法阻止的。
相关文章推荐
- 黑马程序员—反射调用main方法的问题总结(涉及可变参数)(反射参数是一个数组的函数要小心)
- 解决WebService[WebMethod]方法返回一个SqlDataReader出错问题
- 利用反射技术动态执行方法时如何取引用类参数的值
- Java利用反射来获取一个方法的 范型化参数 Vector<Integer>的类型
- Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射
- 如何利用反射去访问一个私有的方法
- 执行SQL语句时出现问题操作必须使用一个可更新的查询错误的解决方法
- java利用反射来调用一个类的私有方法
- Java利用反射来获取一个方法的 范型化参数 Vector<Integer>的类型
- java利用反射实例化类、使用类中普通方法、使用类main(静态)方法
- 深度复制一个对象方法。利用反射机制,不使用Serialization,也不使用ICloneable接口
- 黑马程序员-Java反射--用反射方式执行某个类中的main方法
- 利用反射机制得到一个类的方法,变量,以及构造函数
- Java利用反射来获取一个方法的 范型化参数 Vector<Integer>的类型
- "执行SQL语句时出现问题操作必须使用一个可更新的查询"错误的解决方法
- 所有的页面都继承自定义的BasePage,而有一个特殊页面要继承BasePage,但不想执行父类构造函数调用的某些方法,怎么办?
- 利用反射动态实例化类执行方法并传值
- (原创)利用扩展方法,给 IEnumerable<T> 增加一个生成 Html 的 CheckBox 标签的方法,不用 C# 中的反射技术
- linux中Cron执行shell的一个问题(子shell的调用方法)
- 利用一下java的反射根据字符串找类,方法,然后执行方法