Java基础6:代码块与代码加载顺序

Java基础6:代码块与代码加载顺序

代码块:用{}包围的代码

java中的代码块按其位置划分为四种:

局部代码块

位置:局部位置(方法内部)

作用:限定变量的生命周期,尽早释放,节约内存

调用:调用其所在的方法时执行

 public class 局部代码块 {@Testpublic void test (){    B b = new B();    b.go();}}class B {    B(){}    public void go() {        //方法中的局部代码块,一般进行一次性地调用,调用完立刻释放空间,避免在接下来的调用过程中占用栈空间        //因为栈空间内存是有限的,方法调用可能会会生成很多局部变量导致栈内存不足。        //使用局部代码块可以避免这样的情况发生。        {            int i = 1;            ArrayList<Integer> list = new ArrayList<>();            while (i < 1000) {                list.add(i ++);            }            for (Integer j : list) {                System.out.println(j);            }            System.out.println("gogogo");        }        System.out.println("hello");    }}

构造代码块

位置:类成员的位置,就是类中方法之外的位置

作用:把多个构造方法共同的部分提取出来,共用构造代码块

调用:每次调用构造方法时,都会优先于构造方法执行,也就是每次new一个对象时自动调用,对 对象的初始化

class A{    int i = 1;    int initValue;//成员变量的初始化交给代码块来完成    {        //代码块的作用体现于此:在调用构造方法之前,用某段代码对成员变量进行初始化。        //而不是在构造方法调用时再进行。一般用于将构造方法的相同部分提取出来。        //        for (int i = 0;i < 100;i ++) {            initValue += i;        }    }    {        System.out.println(initValue);        System.out.println(i);//此时会打印1        int i = 2;//代码块里的变量和成员变量不冲突,但会优先使用代码块的变量        System.out.println(i);//此时打印2        //System.out.println(j);//提示非法向后引用,因为此时j的的初始化还没开始。        //    }    {        System.out.println("代码块运行");    }    int j = 2;    {        System.out.println(j);        System.out.println(i);//代码块中的变量运行后自动释放,不会影响代码块之外的代码    }    A(){        System.out.println("构造方法运行");    }}public class 构造代码块 {    @Test    public void test() {        A a = new A();    }}

静态代码块

 位置:类成员位置,用static修饰的代码块? 作用:对类进行一些初始化  只加载一次,当new多个对象时,只有第一次会调用静态代码块,因为,静态代码块                  是属于类的,所有对象共享一份? 调用: new 一个对象时自动调用? public class 静态代码块 {?@Testpublic void test() {    C c1 = new C();    C c2 = new C();    //结果,静态代码块只会调用一次,类的所有对象共享该代码块    //一般用于类的全局信息初始化    //静态代码块调用    //代码块调用    //构造方法调用    //代码块调用    //构造方法调用}?}class C{    C(){        System.out.println("构造方法调用");    }    {        System.out.println("代码块调用");    }    static {        System.out.println("静态代码块调用");    }}

执行顺序 静态代码块 (按顺序加载)—–> 构造代码块 ——-> 构造方法

原文地址:https://www.cnblogs.com/itxiaok/p/10356502.html

时间: 2024-12-17 17:07:40

Java基础6:代码块与代码加载顺序的相关文章

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 类中各成分加载顺序 和 内存中的存放位置

参加一个笔试,有一个关于类的静态代码块.构造代码块.构造函数的执行顺序的问题.不太清楚,网上百度了一下.在这里记录一下. 一.什么时候会加载类?使用到类中的内容时加载:有三种情况1.创建对象:new StaticCode();2.使用类中的静态成员:StaticCode.num=9;  StaticCode.show();3.在命令行中运行:java StaticCodeDemo 二.类所有内容加载顺序和内存中的存放位置:利用语句进行分析.1.Person p=new Person("zhang

(转)面试题--JAVA中静态块、静态变量加载顺序详解

1 public class Test { //1.第一步,准备加载类 2 3 public static void main(String[] args) { 4 new Test(); //4.第四步,new一个类,但在new之前要处理匿名代码块 5 } 6 7 static int num = 4; //2.第二步,静态变量和静态代码块的加载顺序由编写先后决定 8 9 { 10 num += 3; 11 System.out.println("b"); //5.第五步,按照顺序加

类的加载顺序(例题)

1.很重要!!!     例子: package Servlet.day0811.am; public class StaticTest { static StaticTest st=new StaticTest(); static{ System.out.println("静态代码块"); } public StaticTest(){ System.out.println("构造器"); System.out.println(st); m1(); } public

【Java基础】继承中的代码块和构造方法的执行顺序探索

本文讲述有关一个类的静态代码块,构造代码块,构造方法的执行流程问题.首先来看一个例子 /** * Created by lili on 15/10/19. */ class Person{ static { System.out.println("执行Person静态代码块"); } { System.out.println("执行Person构造代码块"); } public Person(){ System.out.println("执行Person构

Java静态代码块、构造代码块、构造方法的执行顺序

Java静态代码块.构造代码块.构造方法的执行顺序 静态代码优先于非静态的代码,是因为被static修饰的成员都是类成员,会随着JVM加载类的时候加载而执行,而没有被static修饰的成员也被称为实例成员,需要创建对象才会随之加载到堆内存.所以静态的会优先非静态的. 执行构造器(构造方法)的时候,在执行方法体之前存在隐式三步: 1,super语句,可能出现以下三种情况: 1)构造方法体的第一行是this语句,则不会执行隐式三步, 2)构造方法体的第一行是super语句,则调用相应的父类的构造方法

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

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

Java 代码块,普通代码块,构造代码块,静态代码块

学习Java中… 刚刚学到了Java的代码块,虽然很简单 还是记下吧! 左音 2016-03-16 ----------------- // 执行优先级:静态代码块 > mian方法 > 构造代码块 > 构造方法 // 静态代码块不论是否实例化都会执行一次,不会重复执行 // 构造代码块实例化时执行 1.普通代码块 // 普通代码块在方法或语句中 1 public class CodeBlock { 2 3 public static void main (String[] args)

JavaSE8基础 类中代码块与构造函数的执行顺序 静态代码块(only) -&gt; 构造代码块 -&gt; 构造方法

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0) 代码: /* 静态代码块(only) -> 构造代码块 -> 构造方法 */ class Test { static{ //静态代码块中 System.out.println("静态代码块的代码执行,只执行一次"); } { System.out.println("构造代码块中的代码执行"