栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java类里的执行顺序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java类里的执行顺序

我前面的文章已经说了代码块的作用了,但我好像没说static 的,不重要了。

先补充几点情况就是,static+代码块的化是只有在类加载的情况下才有,而普通代码块只能在创建对象实例时才能使用

而类加载有以下几种情况

1,创建对象实例就是new 对象,不演了

2.调用静态变量时

3.有继承关系的子类被调用时,其实就是内存图吗

静态与普通和构造器的先后顺序(类创建时)

在单个类中,静态大于普通,普通大于构造器。

package codeblock;

public class CodeBlock_Text
{
    public static void main(String[] args)
    {

        new AAA();
    }
}

class AAA
{
    static
    {
        System.out.println("我是static 代码块");
    }
    public static int a =getN1();

    public static int getN1()
    {
        System.out.println("我是个工具人");
        return 1000;
    }
    {
        System.out.println("我是普通方法");
    }
    public AAA()
    {
        System.out.println("我是fw");
    }
}

如果有多个就看谁先谁后。

结果如下

 细节2

这个跟构造器有关,为什么呢,因为我一直忘记在super时默认无参构造器的父类,如果不说明调用那个super,就会找父类的无参构造器,然后找普通代码块

class AAA extends BBB
{
    //static
   // {
    //    System.out.println("我是static 代码块");
  //  }
  //  public static int a =getN1();

    public static int getN1()
    {
        System.out.println("我是个工具人");
        return 1000;
    }
    {
        System.out.println("我是普通方法");
    }
    public AAA()
    {
        System.out.println("我是fw");
    }
}
class BBB
{
    {
        System.out.println("haha, i am BBB" );
    }
    public BBB()
    {
        System.out.println("bbblll");
    }
}

new AA,会找构造器,因为super放在第一句默认的,就会找父类的object没什么输出,然后父类找本类的代码块,接着是输出”bbblll“,然后AAA,再找本类代码块,构造器,结果如下

当有多个类进行时,父类静态>子类静>父类普>依次类推,就这么简单记住内存图就行了,父类加载完静态,子类,然后在堆中普通方法也是父类先,构造器更不用说,默认有个super,不表演了。 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/362235.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号