反射中的一个问题点:利用Method执行main方法特殊的地方

利用Method执行main方法

问题:
    启动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思想是从现实中来的,你想一下现实中,举例:社会不允许杀人,但是你硬要杀人还是没有办法阻止的。

时间: 2024-10-05 04:04:28

反射中的一个问题点:利用Method执行main方法特殊的地方的相关文章

Java中的static关键字解析(转自海子)__为什么main方法必须是static的,因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。

Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题.以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题 若有不正之处,希望谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnb

如何在QML应用中得到一个Item的所有属性,信号及方法

Item是QML语言中最基本的元素.有时为了方便,我们可以列出它里面的所有的属性,信号及方法.我们可以通过这个方法来修改我们的属性等.在QML语言中,所有的可视的控件都是继承于Item的. 下面我们来通过一个例子来展示如何这么做.我们可以设计一个简单的QML应用如下: import QtQuick 2.0 import Ubuntu.Components 1.1 /*! \brief MainView with a Label and Button elements. */ MainView {

Activiti中当候选组中只有一个受理人时进行自动签收的方法

实际工作中,待办事项一般是通过用户ID进行查询的,这样比较简单.方便.在Activiti中,当绘制流程的人工任务节点时,为了便于日后维护,也为了更符合实际的场景,通常不会直接指定受理人,而是指定候选组,也就是通常说的角色.而很多时候,这个角色只有一个用户,但是在Activiti的实现中,这里面需要一个中间环节,就是签收,这个签收的过程,显得不够智能,用户会很自然的觉得多此一举,多了一步没必要的操作,那么能不能把这个环节省掉呢?本文将提供解决这个问题的方法. 这个问题,只能研究下Activiti的

一个文件中多个类,public类与main方法保持一致

package AbstractClassAndInterface; public class AbstractClassTest { public static void main(String[] args) { AbstractClass1 abstractClass=new AbstractClass1() { @Override protected void setprotectedMethod() { System.out.println("调用方法:setprotectedMeth

轻型池不支持执行公共语言运行时(CLR)。禁用以下两个选项中的一个: “clr enabled”或“lightweight pooling”解决方法

执行2变一下代码   : 注意:1表示启用,0表示禁用. sp_configure 'show advanced options', 1; GO sp_configure 'lightweight pooling', 0; GO sp_configure 'clr enabled',1; go RECONFIGURE; GO EXEC sp_configure;

059、Java中定义一个有参数无返回值的方法

01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public static void main(String[] args) { pay(10.0); // 调用方法 pay(-10.0); // 调用方法 } public static void pay(double money) { // 购买支付操作 if (money > 0.0) { // 现在已

IntelliJ IDEA 运行你的第一个Java应用程序 idea运行main方法

IntelliJ IDEA 运行你的第一个Java应用程序 创建项目让我们创建一个简单的Java Hello World项目. 单击创建新的项目. 打开新建项目向导. 你应该注意的主要是项目的SDK.SDK(软件开发套件)是一套软件开发工具,可以让你更快的开发应用程序.IntelliJ IDEA的不包括SDK,所以如果你有没有,下载并安装它.因为我们做一个Java项目,我们需要一个Java SDK(JDK). 安装完毕后,单击新建,指向JDK的安装文件夹. 在新建项目向导,你可以选择你的项目支持

一个java文件中可包含多个main方法

java中的main方法是java应用程序的入口,java程序在运行时,首先调用执行main方法.但并不是说java中只能有一个main方法,不同类中都可以包含main方法.当JVM进行编译时,会提示选择其中一个main方法作为编译的入口.

Java中停止线程执行的方法

Java中停止线程执行的方法 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.暂停或停止线程的理论 在Java编程中,要暂停或停止当前正在运行的线程,有几种方法.对于把线程转入睡眠Sleep状态,使用Thread.sleep()是最正确的方式.或许有人会问,为什么不使用等待wait()或通知notify()?要知道,使用等待或通知都不是很好的方式. 线程可以使用等待wait()实现被阻塞,这属于条件等待的方式,当条件满足后,又会从阻塞转为等待状态