各位大侠,帮帮我,看一下怎么解决这个问题???

importjava.lang.reflect.*;classClassTest{publicstaticvoidmain(String[]args){if(args.l... import java.lang.reflect.*;
class ClassTest
{
public static void main(String[] args)
{
if(args.length!=1)
{
return;
}
else
{
try
{
Class c=Class.forName(args[0]);
Constructor[] cons=c.getDeclaredConstructors();
/*for(int i=0;i<cons.length;i++)
{
System.out.println(cons[i]);
}*/
Method[] me=c.getDeclaredMethods();
/*for(int i=0;i<me.length;i++)
{
System.out.println(me[i]);
}*/
Field[] fi=c.getDeclaredFields();
/*for(int i=0;i<fi.length;i++)
{
System.out.println(fi[i]);
}*/
Class[] cl=cons[0].getParameterTypes();
Object[] obj=new Object[cl.length];
{
for(int i=0;i<cl.length;i++)
{
if(cl[i].isPrimitive())
{
obj[i]=new Integer(i+1);
}
}

}
Object o=cons[0].newInstance(obj);
me[0].invoke(o,null);
}
catch(Exception e)
{
e.printStackTrace();
}
}

}
}

class Point
{
int x;
int y;
/*static
{
System.out.println("Loading Point");
}*/
void outPut()
{
System.out.println("x="+x+","+"y="+y);
}
Point(int x,int y)
{
this.x=x;
this.y=y;

}
}
展开
 我来答
啊哦鹅2023
2008-09-09 · TA获得超过228个赞
知道小有建树答主
回答量:156
采纳率:100%
帮助的人:118万
展开全部
不懂的问题,先自己想想,多查看API
下面给你解释下这个程序,主要用到了反射机制:

package com.test;
import java.lang.reflect.*;

public class ClassTest {
public static void main(String[] args) {
if (args.length != 1) {
return;
} else {
try {
//args不为空,传进来一个参数,比如com.test.Point (注意要加上包名)
Class c = Class.forName(args[0]);
//获取c所有的构造函数,这里就是获取到Point的构造函数。
Constructor[] cons = c.getDeclaredConstructors();
//获取c所有的方法
Method[] me = c.getDeclaredMethods();
//获取c所有的属性
Field[] fi = c.getDeclaredFields();
//获取第一个构造函数的参数类型,这里cl[0]为int,cl[1]也为int;
Class[] cl = cons[0].getParameterTypes();
//定义一个Object数组
Object[] obj = new Object[cl.length];
{
//下面是为构造函数创建参数
for (int i = 0; i < cl.length; i++) {
//isPrimitive() 判断是否为基本类型。是则用包装类,不用担心,待会构造的时候虚拟机会自动拆包。
if (cl[i].isPrimitive()) {
obj[i] = new Integer(i + 1);
}
}

}
//创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。o指向的是一个Point了
Object o = cons[0].newInstance(obj);
//对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。这里output没有参数,用null
me[0].invoke(o, null);
} catch (Exception e) {
e.printStackTrace();
}
}

}
}

class Point {
int x;
int y;
/*
* static { System.out.println("Loading Point"); }
*/
void outPut() {
System.out.println("x=" + x + "," + "y=" + y);
}

Point(int x, int y) {
this.x = x;
this.y = y;

}
}
ft1226766
2008-09-09 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:93
采纳率:0%
帮助的人:116万
展开全部
我不知道什么叫反射机制,但是楼主给的这段代码在NetBeans5.0中运行没有问题,成功输出了“x=1,y=2
”。楼主的问题可能是如何在运行主类时向Main函数传入参数。
如果在NetBeans里运行,在“项目属性”的“运行”设置里可以加参数,只要填上代码中Point类的全限定名称(包名.类名),例如对于mhl29的回答,填入com.test.Point。
如果用cmd命令行运行,则命令为java ClassTest -com.test.Point
如果运行时没有输入参数,则会出现错误non-varargs call of varargs method...原因是当没有参数时会有默认值java.lang.Object,该类第一个方法equals(java.lang.Object)是需要参数的,因此这样无参数的调用me[0].invoke(o, null)当然会有问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5eea1733d
2008-09-09
知道答主
回答量:22
采纳率:0%
帮助的人:0
展开全部
解决什么问题?茂是很迷茫
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式