在类中添加一个静态字段,对这个类的所有实例将共享这个静态字段,这个静态字段属于类,并不属于任何单个对象,具体代码如下:
public class Order {
private static int nextId=1;
private int id;
private String name;
private Date date;
public int getId() {
return id;
}
public void setId() {
id = nextId;
nextId++;
}
//other method
在Order类中定义了一个nextId的静态字段,并赋初值为1,在setId方法改为无参。nextId在具体的实现类中实现共享,代码如下:
public static void main(String[] args) {
Order ordertwo = new Order();
ordertwo.setId();
ordertwo.setName("kim");
ordertwo.setDate(new Date());
System.out.println(ordertwo.getId()+ordertwo.getName()+ordertwo.getDate());
Order orderthree = new Order();
orderthree.setId();
orderthree.setName("jack");
orderthree.setDate(new Date());
System.out.println(orderthree.getId()+orderthree.getName()+orderthree.getDate());
}
运行结果如下:
1kimWed Aug 05 17:00:38 CST 2020
2jackWed Aug 05 17:00:38 CST 2020
可以看到nextId实现了数据共享,并完成了id的自增。
但是需要注意的是,静态字段的生命周期:类被卸载时,静态变量被销毁,并释放内存空间。static变量的生命周期取决于类的生命周期。
在项目中,要实现id自增可以使用数据库表中的auto_increment。
下文引用:https://www.cnblogs.com/hf-cherish/p/4970267.html
所以:想要用static存一个变量,使得下次程序运行时还能使用上次的值是不可行的。因为静态变量生命周期虽然长(就是类的生命周期),但是当程序执行完,也就是该类的所有对象都已经被回收,或者加载类的ClassLoader已经被回收,那么该类就会从jvm的方法区卸载,即生命期终止。
更进一步来说,static变量终究是存在jvm的内存中的,jvm下次重新运行时,肯定会清空里边上次运行的内容,包括方法区、常量区的内容。
要实现某些变量在程序多次运行时都可以读取,那么必须要将变量存下来,即存到本地文件中。常用的数据存取格式:XML、JSON、Propertities类(类似map的键值对)等。