ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

static修饰符,静态代码块以及各代码块之间的执行顺序

2021-11-30 20:59:39  阅读:107  来源: 互联网

标签:初始化 静态 代码 修饰符 System static println 属性


静态方法:

        1、凡是被static修饰的属性,方法都属于类的属性和方法。能被类调用也能被创建的对象调用(一般都是通过类名调用)

        2、因为静态属性和方法属于类,所以在对象调用时是被共享的,也就是说一个类中的多个对象使用的属性是同一个,则任何对象改变该属性值后,其他对象获得的属性值也发生改变。

        3、在静态方法中,因为java虚拟机先初始化非静态属性和方法,后初始化非静态属性和方法。因此静态方法只能调用静态属性,而非静态方法既可以调用非静态属性也可以调用静态属性。

静态代码块及各代码块之间的执行顺序:

先看代码:

package com.jiazhong.oop.静态代码块;

public class Student {
    //定义构造方法
    public Student(){
        System.out.println("构造方法被初始化");
    }
    //定义非静态属性
    int num=showNum();
    public int showNum(){
        System.out.println("非静态属性被初始化");
        return 10;
    }

    //定义静态代码块
    static {
        System.out.println("静态代码块被初始化");
    }
    //定义静态属性
    static int number=showNumber();
    public static int showNumber(){
        System.out.println("静态属性被初始化");
        return 20;
    }
    //定义初始化代码块
    {
        System.out.println("初始化代码块被初始化");
    }
}

创建对象:

public class DemoMain {
    public static void main(String[] args) {
        Student student=new Student();
    }
}

结果:

静态代码块被初始化
静态属性被初始化
非静态属性被初始化
初始化代码块被初始化
构造方法被初始化

静态代码块和静态属性以及

非静态属性和初始化代码块调换顺序后:

package com.jiazhong.oop.静态代码块;

public class Student {
    //定义构造方法
    public Student(){
        System.out.println("构造方法被初始化");
    }
    //定义初始化代码块
    {
        System.out.println("初始化代码块被初始化");
    }
    //定义非静态属性
    int num=showNum();
    public int showNum(){
        System.out.println("非静态属性被初始化");
        return 10;
    }
    //定义静态属性
    static int number=showNumber();
    public static int showNumber(){
        System.out.println("静态属性被初始化");
        return 20;
    }

    //定义静态代码块
    static {
        System.out.println("静态代码块被初始化");
    }


}

结果:

静态属性被初始化
静态代码块被初始化
初始化代码块被初始化
非静态属性被初始化
构造方法被初始化

所以综上所述:执行顺序:

        【静态属性---->静态代码块】---->【初始化代码块---->非静态属性】---->构造方法

          静态>非静态>构造方法

标签:初始化,静态,代码,修饰符,System,static,println,属性
来源: https://blog.csdn.net/weixin_51500673/article/details/121641991

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有