您的位置:首页 > 其它

看看System类的toString是什么

2010-07-05 20:18 148 查看
在Java的Object类中定义了一个toString方法,任意Java类都继承了Object类,也就有了这个方法,对于很常见的System类,不知道它的toString方法会返回什么呢?

如果直接调用System.toString()的话,肯定不行,因为toString不是一个静态方法,而找到一个System实例也有些难度,因为System的构造函数被定义为私有的:

/** Don't let anyone instantiate this class */
private System() {
}


但是作为一个System类,一定是有toString这个方法的,只是不能直接调用而已,这时就应该利用Java的反射机制了。

解决方法就是先获得和System类相关的Class对象,然后获得toString方法的对象,最后调用就行了:

try {
@SuppressWarnings("unchecked")
Class<System> system = (Class<System>) Class.forName("java.lang.System");
Method toString = system.getMethod("toString", new Class[] {});
System.out.println(toString.invoke(system, new Object[] {}));
} catch (Exception e) {
e.printStackTrace();
}


运行下看看:

控制台输出:class java.lang.System

这可是第一次见到System类的toString。

最后再附上一个进阶版的Java "Hello World"

public static void main(String[] args) {
try {
Field out = Class.forName("java.lang.System").getField("out");
Method println = out.get(null).getClass().getMethod("println", String.class);
println.invoke(out.get(null), "Hello World!");
} catch (Exception e) {
e.printStackTrace();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: