`

static{}(静态代码块)与{}(非静态代码块)的异同点

    博客分类:
  • java
阅读更多
转载自:http://hi.baidu.com/dongaxis/item/9a8edc7057b8863771442303
相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,
    一般在代码块中对一些static变量进行赋值。
不同点:静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。
    静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new
    一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。
例:
//普通类
public classPuTong {
    publicPuTong(){
        System.out.print("默认构造方法!-->");
    }
    
    //非静态代码块
    {
        System.out.print("非静态代码块!-->");
    }
    
    //静态代码块
    static{
        System.out.print("静态代码块!-->");
    }
    
    public static voidtest(){
        {
            System.out.println("普通方法中的代码块!");
        }
    }
}

//测试类
public classTestClass {
    
    /**
     * 区别两次new静态与非静态代码块执行情况
     */
    public static voidmain(String[] args) {
        PuTong c1 = newPuTong();
        c1.test();
        
        PuTong c2 = newPuTong();
        c2.test();
    }
}

/*
运行输出结果是:
静态代码块!-->非静态代码块!-->默认构造方法!-->普通方法中的代码块!
非静态代码块!-->默认构造方法!-->普通方法中的代码块!
更多请参考:http://blog.csdn.net/zhanghaipeng1989/article/details/8943509

*/
分享到:
评论

相关推荐

    Java基础知识汇总

    2. 初始化执行顺序:父静态变量、父静态代码块、子静态变量、子静态代码块、父非静态变量、父非静态代码块、父类构造函数、子非静态变量、子非静态代码块、子类构造函数 五、构造函数: 1. 与类同名,无返回值 2. ...

    华为JAVA面试题

    以上是根据华为2018年深圳Java面试题的相关内容总结的知识点,涵盖了Java中的修饰符、字符串类的使用和性能、静态与实例变量、继承与接口的概念和区别、集合框架中HashMap与Hashtable的异同以及抽象类与接口的对比。...

    java复习期末习题模拟练习答案

    - **静态代码块**:用于初始化类,只执行一次,在类加载时执行。 #### 第8章:获取Class类的常用方法 - **获取Class类的常用方法**: - **方式一**:通过Object类中的`getClass()`方法。 - **方式二**:通过...

    Java面试宝典2012最新版

    26. 内部类分为静态内部类和非静态内部类,它们在访问外部类成员时有不同的规则和限制。 27. 内部类可以引用包含类的成员,但要遵循相应的访问权限。 28. 匿名内部类可以实现接口或继承类,但不可以有显式构造函数。...

    2014年Java最全面试题以及答案.

    静态内部类不能直接访问外部类的非静态成员,而非静态内部类则可以。 57. 什么 由于文档内容存在OCR扫描错误,未能提供完整的句子,因此无法完成这个知识点的回答。 总结以上各点,可以看出这些知识点涵盖了Java...

    Java 面试宝典

    在 Java 中,静态方法(static method)不能直接调用非静态方法,因为静态方法属于类,而非静态方法属于对象。 #### 14. Integer 与 int 的区别 Integer 是 int 的封装类,int 是基本数据类型,Integer 提供了对象...

    java面试题(1).docx

    - `finally` 代码块总是会执行,除非程序异常退出或者遇到 `System.exit()`。 **IO** 7. **字节流与字符流区别** - 字节流处理原始字节数据,适用于所有类型的数据。 - 字符流处理Unicode编码的字符数据,适用...

    java面试宝典 吐血推荐,很全面

    - **知识点**: 不可以直接调用非静态方法,因为非静态方法依赖于对象的存在。 - **注意事项**: 如果需要调用非静态方法,可以通过创建对象的方式间接实现。 **14. Integer与int的区别** - **知识点**: `int`是基本...

    java华为面试资料

    - 内部类(非静态)与外部类有紧密的关联,每个内部类对象都有一个对应的外部类对象。它们可以访问外部类的私有成员,而静态内部类则不行。 4. **& 和 &&**: - `&`是位运算符,用于按位进行与操作,适用于整型或...

    java面试宝典

    - `finally` 用于异常处理,确保特定代码块无论是否发生异常都会执行。 - `finalize` 是 `Object` 类中的一个方法,用于在对象被垃圾回收之前进行清理工作,但在 Java 9 中已被废弃。 **41. 运行时异常与一般异常有...

    JAVA笔试宝典

    52. **线程状态转移**:当一个线程进入一个同步区域(即被`synchronized`关键字修饰的方法或代码块)时,它会获取相应的锁。如果该锁已被另一个线程持有,则该线程会进入阻塞状态,直到锁被释放。线程的状态还包括...

    java面试宝典2012

    - 内部类分为静态内部类(`StaticNestedClass`)和非静态内部类(`InnerClass`)。 - 静态内部类不依赖外部类实例,而非静态内部类需要外部类实例。 #### 27. 内部类引用外部类成员 - 内部类可以直接访问外部类的所有...

    一些Java面试题库

    1. **Java接口与C++虚类的异同** Java接口与C++的虚类都是用于实现多态性。Java接口仅包含抽象方法和常量,不允许有任何实现代码,而C++的虚类可以有成员变量和方法实现。Java中的类可以实现多个接口,但C++的类...

    合肥工业大学JAVA程序设计问答题.doc

    静态方法与非静态方法的区别是静态方法与非静态方法的语法上的区别在于是否被 static 关键字修饰。final 成员变量一般在声明时进行初始化,一旦最终成员变量被赋值,则在整个程序执行过程中都不能被改变,final 方法...

    Java面试宝典

    **知识点13:静态方法调用非静态方法** - 由于静态方法不属于任何对象,因此无法直接调用非静态方法。可以通过创建对象来间接调用非静态方法。 **知识点14:`Integer`与`int`的区别** - `int`是基本数据类型,`...

    JAVA面试题目

    当子类继承父类时,先执行父类的静态代码块和静态属性初始化,然后是子类的静态代码块和静态属性初始化。接着是父类的构造函数,最后是子类的构造函数。 11. 内部类的实现方式? 内部类分为成员内部类、静态内部...

    Java面试宝典2010版.pdf

    - 内部类分为静态内部类(Static Nested Class)和非静态内部类(Inner Class)。 - 静态内部类与外部类的关系较弱,可以访问外部类的静态成员,但不能访问非静态成员。 - 非静态内部类与外部类的关系较强,可以...

    java面试题大集合

    ### Java综合面试题知识点解析 #### 一、super()与this()的区别? - **super()**:用于调用父类的构造方法。在一个子类的构造方法中,如果要调用父类的构造方法,必须使用`super()`,并且这个调用语句必须放在子类...

Global site tag (gtag.js) - Google Analytics