zoukankan      html  css  js  c++  java
  • 静态代码块和构造器的执行顺序

     这段时间在学习ContentProvider,还是不太明白ContentProvider中数据库是什么时候创建的。经过自己测试,实际上是用户真正插入数据的时候生成的数据库。具体代码见下一篇关于ContentProvider中的数据生成时机的随笔。

    现在就说下静态代码块和构造器的执行顺序。实例化一个类A的时候(这里用的是new的方式进行实例化),如果A中有static{},即静态代码块,那么肯定先执行代码块里的代码。然后执行非静态代码块,最后才真正执行构造器里的代码。

    实例化一个类A的时候的执行顺序,

    即:1 . 先执行代码块里的代码;

      2 . 然后执行非静态代码块;

      3 .最后才真正执行构造器里的代码。

    目录结构:

    具体测试代码:

    Print.java,

     1 package com.testStatic;
     2 
     3 public class Print {
     4     static{
     5         System.out.println("Print().static{}.....,肯定先执行到我....,比构造器还先执行到...");
     6     }
     7     public Print(){
     8         System.out.println("Print(),空构造器。。。");
     9     }
    10     public void PrintW(){
    11         System.out.println("Print.PrintW(),我开始打印了。。。。");
    12     }
    13 }

    StaticTest.java,

     1 package com.testStatic;
     2 
     3 public class StaticTest {
     4     public StaticTest(){
     5         System.out.println("StaticTest.的StaticTest()构造器,");
     6     }
     7     static{
     8         System.out.println("StaticTest.static{}.......,我应该是第一个执行,");
     9     }
    10     {
    11         System.out.println("StaticTest.的非静态代码块");
    12     }
    13     public void M1(){
    14         Print p = new Print();
    15         if(p!=null){
    16             System.out.println("p 已经实例化");
    17         }else{
    18             System.out.println("p 还没实例化");
    19         }
    20     }
    21     
    22     public void M2(){
    23         Print p2 = new Print();
    24         p2.PrintW();
    25         if(p2!=null){
    26             System.out.println("p2 已经实例化");
    27         }else{
    28             System.out.println("p2 还没实例化");
    29         }
    30         
    31     }
    32     public static void main(String[] args) {
    33         StaticTest s = new StaticTest();
    34         if(s!=null){
    35             System.out.println("s 已经实例化");
    36         }else{
    37             System.out.println("s还没实例化");
    38         }
    39         System.out.println("=====main()=====");
    40         s.M1();
    41         s.M2();
    42     }
    43 }

    运行结果:

    StaticTest.static{}.......,我应该是第一个执行,
    StaticTest.的非静态代码块
    StaticTest.的StaticTest()构造器,
    s 已经实例化
    =====main()=====
    Print().static{}.....,肯定先执行到我....,比构造器还先执行到...
    Print(),空构造器。。。
    p 已经实例化
    Print(),空构造器。。。
    Print.PrintW(),我开始打印了。。。。
    p2 已经实例化

  • 相关阅读:
    Eclipse常用开发插件
    getOutputStream() 的问题
    JSP内置对象之WEB安全性及config对象
    windows开机后键盘失灵(非硬件原因)解决办法
    Eclipse下如何导入jar包
    更改Eclipse下Tomcat的部署目录 ,防止上传的文件是到eclipse的克隆的tomcat上的webapp,而不是tomcat本身的webapp
    大数据的挑战:数据质量和历史偏见
    HR数据分析常用的50个公式
    HR数据分析常用的50个公式
    python中的随机函数random的用法示例
  • 原文地址:https://www.cnblogs.com/Sunnor/p/4793227.html
Copyright © 2011-2022 走看看