public class claatext
{
public static void main(String[] args)
{
if (args.length != 1)
{
return;
}
try
{
Class cs = Class.forName(args[0]);
Point po = (Point)cs.newInstance();
po.getput();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
class Point
{
int x,y;
void getput()
{
System.out.println("x=" + x + "," +"y" + y);
}
}if (args.length != 1)
{
return;
}
try
{
Class cs = Class.forName(args[0]);
Point po = (Point)cs.newInstance();
po.getput();
以上代码的这里 的这些,我不太明白,谁能帮我注释这些每一句的解释吗?拜托了,详细通俗点!拜托大家了
{
public static void main(String[] args)
{
if (args.length != 1)
{
return;
}
try
{
Class cs = Class.forName(args[0]);
Point po = (Point)cs.newInstance();
po.getput();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
class Point
{
int x,y;
void getput()
{
System.out.println("x=" + x + "," +"y" + y);
}
}if (args.length != 1)
{
return;
}
try
{
Class cs = Class.forName(args[0]);
Point po = (Point)cs.newInstance();
po.getput();
以上代码的这里 的这些,我不太明白,谁能帮我注释这些每一句的解释吗?拜托了,详细通俗点!拜托大家了
{
return;
}
try
{
Class cs = Class.forName(args[0]); --->运行时,jvm要加载.class,这里是加载名字(args[])的类
Point po = (Point)cs.newInstance(); --->实例化
po.getput();
}
catch(Exception e) ----捕捉异常,准确来说,应该捕捉ClassNotFoundException
{
e.printStackTrace();
}
以上只是逐句解释,我感觉整个程序有点问题,
Class cs = Class.forName(args[0]);
Point po = (Point)cs.newInstance(); 运行时,保证args[0] = “Point"(路径问题,我先忽略)
这时,以上两句相当于:
Point po = new Point();
public static void main(String[] args) {// 为了方便测试各种程序写的一个main
//System.out.println(TestBigChar.convert(0.1));
//new MyEntry().test();
String [] strs = {"Point"};//模拟命令行的参数字符数组
claatext.test(strs);//开始测试
}} class claatext
{
public static void test(String[] args)
{
if (args.length != 1)//检查参数的合法性
{
return;
}
try
{
Class cs = Class.forName(args[0]);//返回Point类或接口相关联的 Class 对象
Point po = (Point)cs.newInstance();
//创建此 Class 对象所表示的Point类的一个新实例。
//如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化这个类。
po.getput();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}//JDK API
public T newInstance()
throws InstantiationException,
IllegalAccessException创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化这个类。
注意,此方法传播 null 构造方法所抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时的异常检查,而在其他情况下编译器都会执行该检查。 Constructor.newInstance 方法将该构造方法所抛出的任何异常包装在一个(已检查的)InvocationTargetException 中,从而避免了这一问题。
返回:
此对象所表示的类的一个新分配的实例。
抛出:
IllegalAccessException - 如果该类或其 null 构造方法是不可访问的。
InstantiationException - 如果此 Class 表示一个抽象类、接口、数组类、基本类型或 void; 或者该类没有 null 构造方法; 或者由于其他某种原因导致实例化失败。
ExceptionInInitializerError - 如果该方法引发的初始化失败。
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
调用 s.checkMemberAccess(this, Member.PUBLIC) 拒绝创建该类的新实例
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对 s.checkPackageAccess() 的调用拒绝访问该类的包
forName
public static Class<?> forName(String className)
throws ClassNotFoundException返回与带有给定字符串名的类或接口相关联的 Class 对象。调用此方法等效于:
Class.forName(className, true, currentLoader)
其中 currentLoader 表示当前类的定义类加载器。
例如,以下代码片段返回命名为 java.lang.Thread 的类的运行时 Class 描述符。 Class t = Class.forName("java.lang.Thread")
调用 forName("X") 将导致命名为 X 的类被初始化。
参数:
className - 所需类的完全限定名。
返回:
具有指定名的类的 Class 对象。
抛出:
LinkageError - 如果链接失败
ExceptionInInitializerError - 如果此方法所激发的初始化失败
ClassNotFoundException - 如果无法定位该类
Point po = (Point) cs.newInstance();
应该就是这两句你没有理解吧~~
这个是JAVA的反射机制,也是生成实例的另一种方式~~
相当于Point po = new Point();了
{
public static void main(String[] args)
{
try
{
//Class cs = Class.forName(args[0]);
// Point po = (Point)cs.newInstance();
Point po = new Point(1,3);
po.getput();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
class Point
{
int x,y;
Point(int x,int y){
this.x=x;
this.y=y;
}
void getput()
{
System.out.println("x=" + x + "," +"y" + y);
}
}效果一样