java类创建时里面成员执行的先后顺序

静态代码块在类第一次使用的时候执行一次,在构造函数执行之前执行。只要用到类,哪怕new对象(比如只声明变量)也会被执行,且只执行一次。一般用于对类进行初始化。

先执行静态代码块,静态成员(谁在前就先执行谁)。无论new几次 静态代码块和静态成员只执行一次

再执行成员变量,最后构造函数。new几次 成员变量和构造函数 执行几次。

代码:

1.声明StaitcBlock类

public class StaticBlock1 {
    private static String TAG="333";

    //成员变量
    private  int age1=setAge();

    //构造函数
    public  StaticBlock1(){
        Log.e(TAG, "构造函数");
    }

    //静态代码块
    static{
        Log.e(TAG, "静态代码块 " );
    }

    //静态成员
    private static int age2=setAge2();

    public static void main(String[] args) {
        StaticBlock1 b1=new StaticBlock1();

        StaticBlock1 b2=new StaticBlock1();
    }

    private int setAge(){
        Log.e(TAG, "getAge1: 方法1" );
        return 3;
    }

    private static int setAge2(){
        Log.e(TAG, "getAge2: 方法2" );

        return 333;
    }

}

2.在Activity中创建StaticBoloc类

 Log.e(TAG, "onCreate: ------------------------开始" );
        StaticBlock1 b1=new StaticBlock1();
        Log.e(TAG, "----------------------------------------------------------------------------------" );
        StaticBlock1 b2=new StaticBlock1();

3.结果

时间: 2024-10-11 15:49:45

java类创建时里面成员执行的先后顺序的相关文章

Java类中的各种成员的加载顺序

源代码: [java] view plain copy public class SuperAndSub { public static void main(String[] args) { // Super s1 = new Sub(); // Super s2 = new Super(); Sub s3 = new Sub(); } } class Super { static int a = getA(); static { System.out.println("加载Super的静态块&

java类的初始化块/执行顺序,实例化对象数据赋值

java里初始化一个类的对象,通过初始化快或者构造方法进行数据赋值.与其相关的执行代码有这么几种: 静态初始化块 初始化块 构造方法 静态初始化块 静态初始化块只在类加载时执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量. 非静态初始化块 非静态初始化块在每次初始化实例对象的时候都执行一次,可以给任意变量赋值. 构造方法 在每次初始化实例对象时调用. 重点:执行顺序-> 在加载类时执行一次静态初始化块(之后不再调用). 在每次初始化实例对象时:先执行非静态初始化块,再执行构

08-02 Java 代码块,代码块执行的先后顺序问题

代码块 /* 代码块:在Java中,使用{}括起来的代码被称为代码块. 根据其位置和声明的不同,可以分为 局部代码块:局部位置,用于限定变量的生命周期. 构造代码块:在类中的成员位置,用{}括起来的代码.每次调用构造方法执行前,都会先执行构造代码块. 作用:可以把多个构造方法中的共同代码放到一起,对对象进行初始化. 静态代码块:在类中的成员位置,用{}括起来的代码,只不过它用static修饰了. 作用:一般是对类进行初始化. 面试题? 静态代码块,构造代码块,构造方法的执行顺序? 静态代码块 -

java类中的static成员变量和static方法简单介绍,持续补充

一.静态成员变量 1.属于整个类而不是某个对象实例,所以可以直接通过类名和对象名去调用. 2.静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收 二.静态方法 1.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员:如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量 2. 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量 3. 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法 注

java类与对象_成员变量和局部变量区别

成员变量和局部变量:1.成员变量:再类中定义,用来描述对象将要有什么.2.局部变量:在类的方法中定义,在方法中临时保存数据.区别:1.作用域不同:  局部:仅限于定义它的方法  成员:整个类中都是可见的2.初始值不同的  局部:Java不会给局部变量赋予初始值  成员:Java给成员变量赋予初始值,03在同一个方法中不允许有同名的局部变量:不同的方法中可以有同名的局部变量4.两类变量同名时,局部变量有更高的优先级(就近原则)

Java集合创建时进行数据初始化

import java.util.*; /**  * Created by frank on 2015/12/28.  */ public class Test {     public static void main(String[] args) {         //List         List<String> members1 = new ArrayList<String>() {             {                 add("fr

在java类中,是先执行类的构造函数还是先执行类的私有非静态变量

举例子: package test_instance; public class TestClassLoaderTime { public TestClassLoaderTime(){ System.out.println("构造器执行"); } { System.out.println("静态代码块执行"); } static Demo2 demo2 = new Demo2(); private Demo3 demo3 = new Demo3(); public

Flash Builder 类创建时增加注释

窗口>首选项>Flash Builder>文件模板>ActionScript>ActionScript 类>编辑 ${package_declaration} { ${import_declaration} /** * * @author XXX * @time ${date} * */ ${class_declaration} { ${class_body} } }

Java类静态属性、静态块、非静态属性、非静态块、构造函数在初始化时的执行顺序

前言 今天在看Android ContentProvider实现的时候,突然想到了Java类在new的过程中,静态域.静态块.非静态域.非静态块.构造函数的执行顺序问题.其实这是一个很经典的问题,非常考察对Java基础知识的掌握程度.很多面试过程中相信也有这样的问题,趁着周末有时间复习一下. 结论 这里先把整理好的结论抛给大家,然后我在写个程序来验证我们的结论.在Java类被new的过程中,执行顺序如下: 实现自身的静态属性和静态代码块.(根据代码出现的顺序决定谁先执行) 实现自身的非静态属性和