`
peonyzzdx
  • 浏览: 590880 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

java 静态块、非静态块、静态函数、构造函数 执行顺序

 
阅读更多
java中经常有一些静态块,这是用来在生成类之前进行的初始化,无论java还C++语言中的static,都是最先初始化好的。结构如下:
static {
静态语句代码块
}

{
非静态语句代码块
}
异同点
相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,一般在代码块中对一些static变量进行赋     值。
不同点:静态代码块在非静态代码块之前执行(静态代码块--》非静态代码块--》构造方法)。
    静态代码块只在第一次new执行一次,之后不在执行,而非静态代码块在每new一次就执行一次。非静态代码块可以     在普通方法中定义(个人感觉作用不大);而静态代码块不行。

Java代码 
package com.sample.client; 
public class Test { 
    public int a; 
     
    static { 
        System.out.println("Test Static 静态语句块"); 
    } 
    public Test() { 
        System.out.println("Test 默认无参构造器"); 
    } 
    { 
        System.out.println("Test 非静态"); 
    } 


Java代码 
package com.sample.client; 
 
public class Test1 extends Test { 
    public int i; 
    public double d; 
     
    static { 
        System.out.println("Test1 Static 静态语句块"); 
    } 
     
    public Test1 () { 
        System.out.println("Test1 默认无参构造器"); 
    } 
     
    { 
        System.out.println("Test1 非静态"); 
    } 
     
    public static void main(String[] args) { 
        Test1 t = new Test1(); 
         
    } 


Java代码 
输出结果如下: 
 
Test Static 静态语句块 
Test1 Static 静态语句块 
Test 非静态 
Test 默认无参构造器 
Test1 非静态 
Test1 默认无参构造器 

小结:
1、静态代码块是在类加载时自动执行的,非静态代码块在创建对象自动执行的代码,不创建对象不执行该类的非静态代码块。 顺序: 静态代码块--》非静态代码块--》类构造方法。
2、在静态方法里面只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。因为对于非静态的方法和变量,需要先创建类的实例对象后方可使用,而静态方法在使用前不用创建任何对象。
3、如果某些代码必须要在项目启动时候就执行的时候,我们可以采用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,此时代码是被动执行的。
区别:静态代码块是自动执行的;
静态方法是被调用的时候才执行的;
作用:静态代码块可以用来初始化一些项目最常用的变量和对象;静态方法可以用作不创建对象也可以能需要执行的代码。



自己总结:

1.先静态后非静态
2.加载顺序:
3.执行顺序:







分享到:
评论

相关推荐

    java类中静态域、块,非静态域、块,构造函数的初始化顺序

    ### Java 类中静态域、块,非静态域、块,构造函数的初始化顺序 #### 一、概述 在 Java 编程语言中,类的初始化顺序对于理解程序的行为至关重要。特别是当涉及到静态域(静态变量)、非静态域(实例变量)、静态块...

    java 静态非静态 字段方法 子类父类构造_初始化顺序!

    java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...

    java中静态代码块与构造方法的执行顺序判断

    在Java编程语言中,了解静态代码块和构造方法的执行顺序是至关重要的,尤其是在处理类的初始化和对象的创建时。下面将详细解释这些概念及其执行逻辑。 首先,静态代码块(也称为静态初始化器)是由`static`关键字...

    Java类的完整构造执行顺序

    在深入探讨Java类的完整构造执行顺序之前,我们先来明确一下Java中构造函数与类初始化的基本概念。构造函数在创建对象时被调用,用于初始化该对象的状态。而类初始化则是指在类首次被使用时,JVM执行的一系列初始化...

    JAVA程序:静态块代码

    它的执行顺序早于类的非静态初始化块和构造函数。当类第一次被加载时,静态块按照它们在代码中的顺序依次执行。 下面是一个简单的静态块示例,展示了如何使用静态块初始化静态变量: ```java public class ...

    java中静态与非静态的区别

    - 构造函数的执行顺序大致为:先分配静态成员的内存空间,然后执行静态成员初始化,接着执行静态构造函数;之后分配对象实例的内存空间,执行实例成员初始化,最后执行实例构造函数。 #### 三、静态成员与实例成员...

    Java static静态初始快

    1. **执行顺序**:静态初始化块在非静态初始化块之前执行。当类第一次被加载时,JVM会按照它们在源代码中的顺序执行静态初始化块。 2. **类加载机制**:Java类的加载是懒加载的,即只有在类被首次使用时,JVM才会...

    学习java静态数据初始化.doc

    在 Java 中,静态变量的初始化过程可以被分为三个阶段:静态初始化、非静态初始化和执行构造函数。静态初始化是指在类加载时对静态变量的初始化。非静态初始化是指在实例创建时对实例变量的初始化。执行构造函数是指...

    静态代码块

    静态代码块与实例代码块(非静态代码块)的主要区别在于它们的执行时机以及作用范围。 - **执行时机**:静态代码块在类加载时执行,而实例代码块则是在创建对象时执行。 - **作用范围**:静态代码块作用于整个类的...

    Java静态和非静态成员变量初始化过程解析

    通过这两个示例,我们可以看到,非静态成员变量的初始化顺序是:成员变量初始化语句>成员变量初始化块>构造函数。 而对于静态成员变量,它们是在类加载时初始化的。例如,我们可以定义一个静态成员变量static ...

    JAVA函数使用手册

    5. **静态与非静态函数**:`static`关键字用于声明静态函数,这些函数属于类而不是类的实例,可以直接通过类名调用。非静态函数必须通过对象调用,它们可以访问实例变量。 6. **抛出异常**:Java函数可以通过`...

    举例说明Java中代码块的执行顺序

    下面我们将详细探讨Java中代码块的执行顺序,包括静态属性、非静态属性、静态代码块、非静态代码块以及构造函数。 首先,让我们回顾一下结论: 1. 当创建一个类的实例时,首先会执行类中的静态属性和静态代码块,...

    java经典小程序-函数小程序

    静态函数可以直接通过类名调用,而非静态函数需先创建对象再调用。 9. **匿名函数(Lambda表达式)**: 自Java 8起,引入了Lambda表达式,使得编写短小的、无名字的函数更加简洁,常用于函数式接口和集合操作。 ...

    java代码的初始化顺序demo

    总之,Java代码的初始化顺序是类加载的必然过程,涉及到静态和实例初始化块、构造函数、成员变量初始化以及继承关系的影响。这个demo是学习和理解这些概念的重要工具,通过实际操作可以加深对Java内存管理和对象生命...

    java编程主要函数的用法详解

    每个类可以有一个或多个构造函数,它们的名称与类名相同且没有返回类型。例如: ```java public class MyClass { public MyClass() { // 初始化代码 } } ``` 2. **void函数** `void`函数不返回任何值,通常...

    java 函数速查CHM

    10. **静态与非静态函数**:静态函数属于类,而非静态函数属于类的对象。静态函数可以直接通过类名调用,而非静态函数必须先创建对象再调用。 11. **访问修饰符**:如`public`, `private`, `protected`和默认(包...

    Java计算机语言函数应用

    - Java会为每个类提供一个默认构造函数,如果没有显式定义。 - 自定义构造函数允许我们在创建对象时初始化成员变量,或者执行特定的初始化操作。 7. **递归函数** - 递归函数是调用自身的函数,常用于解决分治...

    在Java中自由块的执行顺序

    总结来说,Java中的自由块执行顺序是静态自由块在类加载时执行,非静态自由块在创建对象时执行,并且遵循继承的层次结构。理解这一执行顺序有助于优化代码,避免在类加载和对象创建过程中出现预期之外的行为。

    static 的使用场合

    - 静态成员在类加载时初始化,因此如果静态成员依赖于运行时信息(如构造函数),可能导致错误。 - 尽量避免过多使用静态,因为它可能导致代码难以测试和维护,也可能造成全局状态,影响程序并发性能。 了解并...

Global site tag (gtag.js) - Google Analytics