在程序运行的到需要某个类的时候,JVM将其加载进方法区,而被static修饰的变量方法或者这个代码块都是在方法区
在类加载的时候,会随着类加载而执行,而不是随着对象的创建而执行(对象创建在堆内存,同时包含了其独有的变量方法等)
你也知道,static所修饰的内容是这个类的对象共享的,因此只要有一次就行了
要是你的静态代码块不用static修饰,称之为代码块,由于不是静态的,因此对象创建的时候才执行,这个时候每创建一个对象,代码块都会执行一次
如果你怀疑对象是否创建成功,你可以多创建几个对象给每个对象的属性设置一些不同的值,用对象 名.方法 去调用其方法打印这些值,就可判断是不是同一个对象
或者用equals方法区比较
第二个问题,具体的不太清楚,但是
i++相当于i = i + 1
num >>>= 1相当于num = num >>> 1
|