1、准备一个接口:

2、准备接口的实现类,类中重写接口的方法:

3、准备一个代理对象工厂,提供一个IService类型的成员变量,一个获取IService类型的代理对象的方法:

4、编写测试类,获取代理对象,调用被代理对象的find()方法

5、在代理工厂类中的获取代理对象的方法中,图片中红框的位置上打断点。

6、Debug运行,查看得到的代理对象proxyService,发现其显示为null。但是 程序运行正常!!!!!!!

7、修改获取代理对象方法中的具体增强内容。

8、进行Debug,查看控制台输出内容。

9、可以发现,用鼠标每一次查看proxyService对象,控制台都会输出toString。也就是调用了对象的toString()方法。由于是代理对象,所以会运行自己写的代理的方法,从而会打印出方法的名字。看下图,方法的返回值为null,所以toString()的方法的返回值是null,我们用鼠标查看的时候,会显示是null(如上图)。其本质是调用tostring()方法,运行我们自己写的增强方法,返回一个null值。

10、将上图中的返回值改为其他值,如"我是浩浩",结果如下:

11、由此可见,我们Debug模式查看对象的时候,本质是调用对象的toString()方法,然后将方法的返回值显示出来。就像打印对象System.out.println(service);,本质也是System.out.println(service.toString())。如果将toString()方法的返回值返回,就得到正常的结果,如下图:


12、所以,我们可以发现,Debug模式查看对象的本质是调用toString()方法,将得到的结果显示出来。希望可以帮助到你~~~~~
本文解析了在调试模式下查看对象时,如何通过调用toString()方法来展示对象信息的过程,并通过实例演示如何修改该方法以获得期望的输出。
23万+

被折叠的 条评论
为什么被折叠?



