代码块:

如果Test类继承了父类,会先执行父类的静态代码块和构造代码块(如果是创建对象的情况下)

static{}:代码块是类的加载过程中初始化阶段执行的。和new对象没有任何关系,比如Test.静态属性,也同样会触发static{},只是在new 对象过程中,如果发现当前类还没有被加载到内存,就会将类加载到内存,在初始化过程中执行了<clinit>() 方法,如果static{}中有打印信息,就会被打印出来,如果第二期new 对象的时候,发现类已经加载内存了,就不会再进行初始化了.也就是为什么多次new 对象,static 变量只有一个的原因了(全局共享),而且这个变量就和对象没有任何关系了(但是还是可以通过对象访问静态变量和静态方法的,一个对象对静态变量的修改会影响到另一个对象)

public class Demo {
public static void main(String[] args){
Test t = new Test();
Test t1 = new Test();
}
}
class Test{
static{
System.out.println("静态代码块");//在类中使用static定义,最先执行,只会创建一次(当创建第二个对象是,不会再执行该代码,static只存储一次)
}
{
System.out.println("构造代码块");//在类中定义,优先构造方法执行,每次创建对象都会执行
}
public Test(){ {
System.out.println("普通代码块"); //在方法中定义,方法被调用执行
}
System.out.println("我是构造方法");
}
}

通过类调用静态方法只会调用静态代码块,多次调用也会执行一次静态代码块。(如果继承父类,同样会先执行父类的)

public class Demo {
public static void main(String[] args){
Test.t();
Test.t();
}
}
class Test{
static{
System.out.println("静态代码块");//在类中使用static定义,最先执行,只会创建一次(当创建第二个对象是,不会再执行该代码,static只存储一次)
}
{
System.out.println("构造代码块");//在类中定义,优先构造方法执行,每次创建对象都会执行
}
public Test(){
{
System.out.println("普通代码块"); //在方法中定义,方法被调用执行
}
System.out.println("我是构造方法");
}
public static void t(){ }
}

Test t = null;不会有任何操作

调用通过类调用final修饰的字段(同时被static修饰,不然不能被类直接调用)不会初始化。

public class Demo {
//main方法会被调用,所有static会被执行
static {
System.out.println("x");
}
public static void main(String[] args){
//这样不会执行Test中的任意代码块
Test t = null;
}
}
class Test{
static{
System.out.println("静态代码块");//在类中使用static定义,最先执行,只会创建一次(当创建第二个对象是,不会再执行该代码,static只存储一次)
}
{
System.out.println("构造代码块");//在类中定义,优先构造方法执行,每次创建对象都会执行
}
public Test(){
{
System.out.println("普通代码块"); //在方法中定义,方法被调用执行
}
System.out.println("我是构造方法");
}
}

 

下面输出结果:构造。构造。静态。构造

public class B
{
public static B t1 = new B();
public static B t2 = new B();
{
System.out.println("构造块");
}
static
{
System.out.println("静态块");
}
public static void main(String[] args)
{
B t = new B();
}
}

最新文章

  1. 重撸js_2_基础dom操作
  2. 史上最简单,一步集成侧滑(删除)菜单,高仿QQ、IOS。
  3. 关于HTML的FORM上传文件问题
  4. vim linux SecureCRT vim颜色的设置
  5. 20151216Repeater
  6. [IT新应用]存储入门-文件级存储及块级别存储的选择
  7. 第六课 SQLite
  8. win7下python安装pyquery
  9. .net HttpClient类(System.Net.Http) c#并发使用测试、压测
  10. 敏捷开发系列之旅 第二站(走近XP极限编程)
  11. jQuery Easy UI (适应屏幕分辨率大小)布局(Layout)
  12. BZOJ 3237([Ahoi2013]连通图-cdq图重构-连通性缩点)
  13. [OpenCV] GpuMat and Mat, compare cvtColor perforemence
  14. 关于Elasticsearch 使用 MatchPhrase搜索的一些坑
  15. linux shell 指令 诸如-d, -f, -e之类的判断表达式简介
  16. centos7数据库连接使用127.0.0.1报permission denied,使用localhost报No such file or directory
  17. LoRa---官方例程移植
  18. C# Directory.GetFiles()获取多个类型格式的文件
  19. C#简单窗体应用程序(三)
  20. python学习之argparse模块的使用

热门文章

  1. Spring基础3
  2. C#后台进行Http请求
  3. MySQL创建数据库指定字符集
  4. Deep Learning(花书)教材笔记-Math and Machine Learning Basics(线性代数拾遗)
  5. python中用selenium调Firefox报错问题
  6. Python3 GIL(Global Interpreter Lock)与多线程
  7. NandFlash和iNand【转】
  8. for循环查找元素怎么跳出for循环
  9. window10 matlabR2015b 安装minGw
  10. host, nslookup, dig、whois