1700442370
1700442371
class Person{
1700442372
1700442373
private String name;
1700442374
1700442375
public Person(String_name){
1700442376
1700442377
name=_name;
1700442378
1700442379
}
1700442380
1700442381
/*name的getter/setter方法省略*/
1700442382
1700442383
}
1700442384
1700442385
输出的结果是:Person@1fc4bec。如果机器不同,@后面的内容也会不同,但格式都是相同的:类名+@+hashCode,这玩意就是给机器看的,人哪能看得懂呀!这就是因为我们没有覆写Object类的toString方法的缘故,修改一下,代码如下所示:
1700442386
1700442387
public String toString(){
1700442388
1700442389
return String.format(”%s.name=%s”,this.getClass(),name);
1700442390
1700442391
}
1700442392
1700442393
如此就可以在需要的时候输出可调试信息了,而且也非常友好,特别是在Bean流行的项目中(一般的Web项目就是这样),有了这样的输出才能更好的debug,否则查找错误就如海底捞针呀!当然,当Bean的属性较多时,自己实现就不可取了,不过可以使用apache的commons工具包中的ToStringBuilder类,简洁、实用又方便。
1700442394
1700442395
可能有读者要说了,为什么通过println方法打印一个对象会调用toString方法?那是源于println的实现机制:如果是一个原始类型就直接打印,如果是一个类类型,则打印出其toString方法的返回值,如此而已!
1700442396
1700442397
1700442398
1700442399
1700442401
编写高质量代码:改善Java程序的151个建议 建议50:使用package-info类为包服务
1700442402
1700442403
Java中有一个特殊的类:package-info类,它是专门为本包服务的,为什么说它特殊呢?主要体现在3个方面:
1700442404
1700442405
(1)它不能随便被创建
1700442406
1700442407
在一般的IDE中,Eclipse、package-info等文件是不能随便被创建的,会报“Type name is notvalid”错误,类名无效。在Java变量定义规范中规定如下字符是允许的:字母、数字、下划线,以及那个不怎么常用的$符号,不过中划线可不在之列,那怎么创建这个文件呢?很简单,用记事本创建一个,然后拷贝进去再改一下就成了,更直接的办法就是从别的项目中拷贝过来。
1700442408
1700442409
(2)它服务的对象很特殊
1700442410
1700442411
一个类是一类或一组事物的描述,比如Dog这个类,就是描述“旺财”的,那package-info这个类是描述什么的呢?它总要有一个被描述或被陈述的对象吧,它是描述和记录本包信息的。
1700442412
1700442413
(3)package-info类不能有实现代码
1700442414
1700442415
package-info类再怎么特殊也是一个类,也会被编译成package-info.class,但是在package-info.java文件里不能声明package-info类。
1700442416
1700442417
package-info类还有几个特殊的地方,比如不可以继承,没有接口,没有类间关系(关联、组合、聚合等)等,不再赘述,Java中既然允许存在这么一个特殊的类,那肯定有其特殊的作用了,我们来看看它的作用,主要表现在以下三个方面:
1700442418
1700442419
(1)声明友好类和包内访问常量
[
上一页 ]
[ :1.70044237e+09 ]
[
下一页 ]