static和代码块小总结
因为当时有同学问题目是说:如何在new对象的时候,new一个,系统自动+1?解决问题的时候,就有了static和代码块的一点点了解
过程
然后我就去找了一下资料和高年级的学长,利用static和构造代码块的形式,使得在new的同时,可以通过其实例化对象一次,就运行一次构造代码块的代码.
当时代码(简化)
class book{
int bookID;
private String bookName;
{
bookID++;
}
整个简化代码(只有统计实例化次数)
public class Project{
public static void main(String[] args){
book book1=new book("java真好玩");
System.out.println(book1.toString());
book book2 = new book("java太好玩");
System.out.println(book2.toString());
book book3 = new book("java最好玩");
System.out.println(book3.toString());
}
}
class book{
int bookID=0;
private String bookName;
{
bookID++;
}
public book(String bookName) {
super();
this.bookName = bookName;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public int getBookID() {
return bookID;
}
@Override
public String toString() {
return "第" + bookID +"本bookID"+"说"+bookName;
}
}
结果如下:
当时出现的问题就是如图
{
bookID++
}
代码块在运行之后,实例化三个对象 ,bookID却只+1,没有想象中的1,2,3,这样排序,实际上,没有static的修饰,执行main函数的时候,就会过一遍类,没有用static的话,就每次实例化一次,就过一遍,bookID=0+1;然后又过一遍 bookID=0+1;而加了static就不一样了,有static的修饰就只会执行一次,就是说,第一次bookID=0+1=1;然后bookID就等于1了,而不会再去执行bookID=0这个语句.
加入static之后代码(只加static 其余代码不变)
class book{
static int bookID;
private String bookName;
{
bookID++;
}
代码结果:
看!现在的bookID就没问题了!这个就涉及到static的用法 .
所以static有一个用法就是可以让java只执行一次就不执行了,而且static都是最先执行的那个语句.
代码块
当时还没学代码块的时候,看见{ }但是前面什么都没有的时候就会好奇,这个作用是什么,看了别人详解之后发现是代码块分为几大类.
代码块:
- 1.静态代码块
- 2.构造代码块
- 3.普通代码块
但是上面的例子是应用了构造代码块,所以大致了解了一下构造代码块
构造代码块
格式就上述的例子,在一个类当中以大括号形式出现,只有大括号,没有其他东西修饰.
public class book{
{
代码块的内容
}
}
而他的作用也很明显,就是在创建对象的时候,它会被调用,不知道大家有没有感觉到,bookID为什么能计数,就是因为每次实例化一次,就会执行一次构造代码块的内容,这也就是为什么可以利用static和构造代码块来统计实例化的次数
转载:https://blog.csdn.net/weixin_46608546/article/details/105885659