小言_互联网的博客

static和代码块小总结

414人阅读  评论(0)

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场