zoukankan      html  css  js  c++  java
  • 零零碎碎的java知识:static属性、普通属性、static代码块、普通代码块、构造函数

    本文中结论仅经本机测试,不保证在别的环境下成立。如果有什么不成立的地方务必告诉我_(:_」∠)_

    java的内存是动态分配的,其机制和c/c++相当不一样……emmm在此不表。

    static:

    ·static属性:每个类只分配一次内存,构造(new)类的对象、调用类的static方法、调用类的static属性时分配内存。

    ·static代码块:每个类只执行一次,构造(new)类的对象、调用类的static方法、调用类的static属性时(对,和static属性条件一样)时执行。

    ·在上述条件下,按照在类中书写顺序依次执行代码块中代码/为属性分配内存。

    普通:

    ·普通属性:构造(new)类的对象时分配内存。

    ·普通代码块:构造(new)类的对象时按照类中代码块的书写顺序执行。

    第一次构造(new)类的对象时,各活动执行顺序为:先static,后普通,最后构造函数。

    其实不用知道得这么细致的……只是习惯性地好奇了一下。

    测试代码(无视丑陋的格式吧):

     1 class Hello{
     2     static int i = 0;
     3     
     4     Hello(){
     5         System.out.println("hello " + (++i));
     6     }
     7 }
     8 
     9 class HelloWrapper{
    10     {
    11         System.out.println("block 1");
    12     }
    13     static {
    14         System.out.println("static block 1");
    15     }
    16     static Hello h = new Hello();
    17     private Hello h2 = new Hello();
    18     static {
    19         System.out.println("static block 2");
    20     }
    21     HelloWrapper(){
    22         System.out.println("construct");
    23     }
    24     {
    25         System.out.println("block 2");
    26     }
    27 }
    28 
    29 public class Test {
    30     
    31     public static void main(String[] args) {
    32         HelloWrapper hw = new HelloWrapper();
    33     }
    34 }

    输出:

    static block 1
    hello 1
    static block 2
    block 1
    hello 2
    block 2
    construct
  • 相关阅读:
    ubuntu下配置django+apache+mysql+mod_python+Python
    Makefile 学习
    一个查重算法的多种实现思路
    MongoDB基础
    基于ASP.NET MVC 3的企业应用项目总结
    CruiseControl.Net持续集成平台搭建总结
    Cnblogs Start
    JavaScript中的this
    Entity Framework 4.0 的一个bug :DefaultValue问题
    .Net平台下的B/S开发框架
  • 原文地址:https://www.cnblogs.com/jennawu/p/8591765.html
Copyright © 2011-2022 走看看