看看System类的toString是什么
2010-07-05 20:18
148 查看
在Java的Object类中定义了一个toString方法,任意Java类都继承了Object类,也就有了这个方法,对于很常见的System类,不知道它的toString方法会返回什么呢?
如果直接调用System.toString()的话,肯定不行,因为toString不是一个静态方法,而找到一个System实例也有些难度,因为System的构造函数被定义为私有的:
但是作为一个System类,一定是有toString这个方法的,只是不能直接调用而已,这时就应该利用Java的反射机制了。
解决方法就是先获得和System类相关的Class对象,然后获得toString方法的对象,最后调用就行了:
运行下看看:
控制台输出:class java.lang.System
这可是第一次见到System类的toString。
最后再附上一个进阶版的Java "Hello World"
如果直接调用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(); } }
相关文章推荐
- VS 2005 Team System 旧闻,看看接下来我们有什么好东西可以用?
- 近日发现System.DBNull在debug中 其value的值是{} 既是 两个大括号,不知道什么原因,ToString()之后正常
- 快来看看Ubuntu 17.04官方吉祥物长什么样子!
- 看看别人研究生在做什么,在看看自己---推荐《我这十年》-----一个研究生的自我总结
- 看看我们的程序员平常都爱看些什么好书?
- 从计算方式的角度,看看互联网到底对实体商业做了什么?
- 加拿大联邦技术移民,好多朋友咨询,其实看看英文比什么都强,翻译稿如下
- 看看特斯拉汽车使用的是什么电池(18650)
- System.getProperty("line.separator") 是什么意思?
- 看看我们常用的APP可以用什么来实现?(2)
- android开发(27) 看看我的手机里都有什么传感器
- 看看清华的同学在四年的大学中干什么吧,非常值得学习
- System.getProperty("line.separator") 是什么意思?
- 关于12月17,18的研修--给你看看日本人做事细致到什么程度;有不少单词你能认识哦
- 看看你们的企业处于CMMI什么级别--一问一答非常简单
- 娱乐一下:大家都看看你的大脑里都装了什么?
- 疑惑:关于System.out.println()调用toString()方法打印数组名
- [导入]看看你这个软件测试人是什么水平[转载]