static和代码块小总结

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和构造代码块来统计实例化的次数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值