public class countDemo { static Integer count; public static void main(String[] args) { for(int i = 0;i<6;i++){ count++; } System.out.println(count); } }
这样为什么会报null指针异常呢,为什么不可以++呢
第二个问题:
public class User implements java.io.Serializable { private Integer userId; private String userName; private String password; private String mobile; private String email; @Override public String toString() { return "User [email=" + email + ", mobile=" + mobile + ", password=" + password + ", userId=" + userId + ", userName=" + userName + "]"; } }
为什么要在类上要实现implements java.io.Serializable 类?
public class User implements java.io.Serializable {
为什么要这样重写类里面的属性?
public String toString() { return "User [email=" + email + ", mobile=" + mobile + ", password=" + password + ", userId=" + userId + ", userName=" + userName + "]"; }
1、没有给count赋初值,Integer是int的封装类,默认值为null
应该这样赋值:
Integer count = 0;(这种写法在jdk1.5及以上的版本适用,原因是1.5以上的版本提供了自动拆箱机制;但如果你的jdk是1.4及以下,则应该改为:
Integer count = new Integer(0);)
2、一个类只有实现了Serializable接口,它的对象才是可序列化的。而实际上Serializable是一个空接口,没有具体的内容,它的目的只是简单的标识一个类的对象可以被序列化。
3、重写toString()方法是期望得到自己想要格式的字符串,这个方法是定义在Object类中的,参考源码:
[code="java"]public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}[/code]
第一个问题,Integer是int的封装类,它是引用类型,默认值为null,因此需要初始化之后才能进行++操作
第二个问题Serializable接口用于实现对象的序列化,你不实现这个借口也没问题
第三个问题覆盖toString方法是IDE默认并且通用的表示对象值的格式,没什么特殊含义,你可以自己定义任何格式,只要返回的是字符串就可以,你可以自己拼装对象显示值的字符串
第一个因为引用类型默认值是null,做++操作会先把integer拆箱,相当于调用intValue()方法,一个null对象调用方法肯定会空指针。
第二个实现接口是序列化,比如orm的时候需要实现。tostring是为了更清楚地表示一个对象的信息,在字符串连接时候直接用对象名就可以了,方便
都很清楚了,我也就不多说了,支持你一下吧