精华内容
下载资源
问答
  • java构造代码块详解

    万次阅读 多人点赞 2017-02-06 15:58:53
    简介首先说一下,Java中有哪些代码块.普通代码块就是在方法后面使用"{}"括起来的代码片段,不能单独执行,必须调下其方法名才可以执行. 静态代码块在类中使用static修饰,并使用"{}"括起来的代码片段,用于静态变量的初始...

    一.简介

    首先说一下,Java中有哪些代码块.

    普通代码块

    就是在方法后面使用"{}"括起来的代码片段,不能单独执行,必须调下其方法名才可以执行.
    

    静态代码块

    在类中使用static修饰,并使用"{}"括起来的代码片段,用于静态变量的初始化或对象创建前的环境初始化.
    

    同步代码块

    使用synchronize关键字修饰,并使用"{}"括起来的代码片段.它表示在同一时间只能有一个线程进入到该方法快中,是一种多线程保护机制.
    

    构造代码块

    在类中没与任何的前缀或后缀,并使用"{}"括起来的代码片段.
    

    简单的例子:

    public class Client {
        {//构造代码块
            System.out.println("执行构造代码块");
        }
    
        public Client() {
            System.out.println("执行无参构造函数");
        }
    
        public Client(String string) {
            System.out.println("执行有参构造函数");
        }
    }

    这是一丢按非常简单的代码,它包含了构造代码块,无参构造,有参构造.我先看一个问题,我们知道代码块不具有独立执行的能力,那么编译器是如何处理构造代码块的呢?很简单,编译器会把构造代码块插入到每个构造函数的最前端.这样 上面的代码就等同于:

    public class Client {
    
        public Client() {
            System.out.println("执行构造代码块");
            System.out.println("执行无参构造函数");
        }
    
        public Client(String string) {
            System.out.println("执行构造代码块");
            System.out.println("执行有参构造函数");
        }
    }
    

    二.特性与应用

    基本的理解后,我们再来看下其和构造函数的执行顺序.由于是插入到构造函数的的前面,自然在通过new关键字生成一个实例的时候会先执行构造代码块,然后在执行其他代码(注意:构造代码块不是在构造函数之前运行,而是依托于构造函数).接着我们来看一下两个主要的应用场景:

    1.初始化实例变量

    如果每个构造函数都需要初始化变量,即可通过构造代码块来实现.从而取代在每个构造函数调用初始化实例变量的方法.
    

    2.初始化实例环境

    一个对象必须在适当的场景下才能存在,如果没有适当的场景,则就需要在创建对象的时候创建此场景.
    

    以上两个场景都是利用了构造代码块的两个特性:

    1.在每个构造函数中都运行
    2.在构造函数中它会首先运行
    

    三.构造代码块足够聪明

    首先看一段代码,使用构造代码块做对象计数器.

    public class Client {
        public static int count = 0;
        {
            count++;
        }
    
        public Client() {
    
        }
    
        public Client(int i) {
            this();
        }
    
        public Client(String string) {
        }
    
        public static void main(String[] args) {
            new Client();
            new Client(1);
            new Client("1");
            System.out.println(Client.count);
        }
    }

    这个代码真的达到我们预期的效果吗?你可能会对this()产生了质疑.
    答案是:3.

    显然Java编译器是足够聪明的.这是因为,在插入到每个构造函数中的时候,有个例外,就是如果遇到this关键字(也就是构造函数调用自身其他的构造函数时)不插入构造代码块.

    那为什么编译器这么聪明呢?这是因为构造代码块的出现就是为了提取构造函数的共同量,减少各个构造函数的代码而产生的.

    四.总结

    灵活适当的使用构造代码块会让你的代码更加的简约和清晰.代码的质量自然很高很多,逼格也高了许多,有没有.

    最后还有一点需要注意的,千万不要认为this是特殊情况,那super也会类似处理.其实不会,在构造代码块的处理上,super方法没有任何特殊的地方.编译器只是把构造代码块插入到super方法之后执行而已.

    展开全文
  • 【java】java构造代码块的作用{}

    千次阅读 2018-09-23 13:46:07
    构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。 package test922; public class ...

    构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。

    package test922;
    
    public class CodeBlock {
    
    	{
    		System.out.println("第一代码块");
    	}
    
    	public CodeBlock() {
    		System.out.println("构造方法");
    	}
    
    	{
    		System.out.println("第二代码块");
    	}
    
    	public static void main(String[] args) {
    		new CodeBlock();
    		new CodeBlock();
    		new CodeBlock();
    	}
    
    }
    

     

    运行结果: 

    第一代码块
    第二代码块
    构造方法
    第一代码块
    第二代码块
    构造方法
    第一代码块
    第二代码块
    构造方法

    展开全文
  • Java构造代码块的使用

    千次阅读 2018-07-29 13:11:15
    Java中,代码块{}分为好几种,其中一种就是构造代码块,何为构造代码块呢?简单来说就是用{}包起来的代码片段,在创建对象时会被调用,每次创建对象时都会被调用。  在刷题的时候,发现有这样一种用法: ...

        在Java中,代码块{}分为好几种,其中一种就是构造代码块,何为构造代码块呢?简单来说就是用{}包起来的代码片段,在创建对象时会被调用,每次创建对象时都会被调用。

       在刷题的时候,发现有这样一种用法:

    object a=new object(){
    
    一个构造方法
    
    };

      可以看到, 我们在new对象的时候,没有立即用“;”结束,而是在构造代码块中使用了一个构造方法。问题来了,这样的表达,是什么意思呢?上面不是提到,构造代码块在创建对象时会被调用,每次创建对象时都会被调用。在上面代码中,我们new后并没有立即用“;”结束,而是调用了代码块中构造方法,因此这相当于创建对象直接调用了方法。在new的时候,会在堆中开辟空间,并检查class是否存在,在上面的代码中,object是超类,因此可以直接进行调用。我大胆的发散思维一下,假如我们用的不是object,这样的代码块还能不能这样调用里面的构造方法呢?做了如下的试验:

    package FF;
    public class TestStu{
    	public static void main(String[] args)
    { Student o=new Student(){
    	public boolean equals(Student ss)
    { 
    	return true;
    	                                    } 
                                            };
    System.out.println(o.equals("hs"));
                                            }
                                            } 
    
    class Student{
    	
    }
    
    

    运行结果为:

    false

        为什么结果是false呢?说明并未能成功调用equals()方法,因为equals(“hs”)中的“hs”不是Student类。那么,假如我们将构造方法equals(“hs”)换成equals(o)会不会成功调用呢?

    package FF;
    public class TestObj{
    	public static void main(String[] args)
    { Student o=new Student(){
    	public boolean equals(Student ss)
    { 
    	return true;
    	                                    } 
                                            };
    System.out.println(o.equals(o));
                                            }
                                            } 
    
    class Student{
    	
    }
    
    

    结果如下:

    true

        说明是完全OK的。

        我们还可以发现new对象然后加个构造代码块,与构造方法是非常像,都是这样形式的:

    A(){
    
    }

    细心的我们可以看到,若是构造方法的话,不会出现new和“;”等字眼。

    展开全文
  • 所谓的代码块是指使用“{}”括起来的一段代码,根据位置不同,代码块可以分为构造代码块、构造函数、静态代码块。 静态代码块:用staitc声明,jvm加载类时执行,仅执行一次 构造代码块:类中直接用 {} 定义,每一...

    所谓的代码块是指使用“{}”括起来的一段代码,根据位置不同,代码块可以分为构造代码块、构造函数、静态代码块。

    • 静态代码块:用staitc声明,jvm加载类时执行,仅执行一次
    • 构造代码块:类中直接用 {} 定义,每一次创建对象时执行。
    • 构造函数:创建对象时执行

    执行顺序优先级:静态代码块 > 构造代码块 > 构造函数。

    静态代码块

    static {
         System.out.println(" I am 静态代码块");
    }
    • 静态代码块优先于主方法执行,而在类中定义的静态代码块会优先于构造块执行,而且不管有多少个对象产生,静态代码块只执行一次。
    • 静态代码块其实就是给类初始化的,而构造代码块时给对象初始化的。
    • 一个类中可以有多个静态代码块

    构造代码块

    {
         System.out.println(" I am 构造代码块");
    }
    • 构造代码块的作用是给对象进行初始化。
    • 对象一建立就运行构造代码块,而且优先于构造函数执行
    • 构造代码块与构造函数的区别是:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,因为构造函数是可以多个的,运行哪个构造函数就会建立什么样的对象,但无论建立哪个对象,都会先执行相同的构造代码块。也就是说,构造代码块中定义的是不同对象共性的初始化内容。

    构造函数

    public Test() {
        System.out.println(" I am 构造函数");
    }

    每创建一个对象时就会执行一次。同时构造函数是给特定对象进行初始化,而构造代码块是给所有对象进行初始化

    示例代码:

    class Test {
        static {
            System.out.println(" I am 构造函数");
        }
    
        {
            System.out.println(" I am 静态代码块");
        }
    
        public Test() {
            System.out.println(" I am 构造代码块");
        }
    }
    
    
    public class CodeBlock {
        /**
         * @itmyhome
         */
        public static void main(String[] args) {
            Test test1 = new Test();
            System.out.println("-------");
            Test test2 = new Test();
        }
    }

    输出结果:

     I am 静态代码块
     I am 构造代码块
     I am 构造函数
    -------
     I am 构造代码块
     I am 构造函数
    展开全文
  • 今天有个同事问我关于代码块的问题 只记得静态代码块要提前执行 怕说错,查了...//所有类中有一个默认的构造函数,这里的代码块为构造代码块,在类中的对象被创建时执行 } public static void main(String[] args) {
  • 今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构造方法都是随着对象的创建而加载 当时做了这么一个小案例(想必这个...
  • Java--构造代码块

    千次阅读 2019-06-13 13:53:52
    构造代码块 对象一建立就运行,而且优先于构造函数运行。 构造代码块中定义的是不同对象共性的初始化内容。 作用: 给对象进行初始化。 构造代码块与构造函数的区别: 构造代码块是给所有对象进行统一初始化,构造...
  • Java静态代码块、构造代码块、构造方法的执行顺序静态代码优先于非静态的代码,是因为被static修饰的成员都是类成员,会随着JVM加载类的时候加载而执行,而没有被static修饰的成员也被称为实例成员,需要创建对象才...
  • 除了说普通代码块,静态代码块,构造代码块的执行顺序外,还有静态方法,静态变量等,都放在一起的话,这个执行顺序,怎么确定。 我就实际弄个代码,看下执行顺序。 public class Line { static { System.out....
  • java中静态代码块 构造代码k
  • 构造代码块: 作用:给对象进行初始化。 对象一建立就运行,而且优先于构造函数执行。 构造代码块与构造函数的区别: 构造代码块是给所有对象进行统一初始化, 而构造函数是给对应的对象初始化。 构造代码快中...
  • 特点:  1.函数名与类名相同  2.不用定义返回值类型  3.不用写rutern语句 ... 对象一建立 就会调用与之对应的构造函数;...构造代码块:  作用:给对象进行初始化  对象一建立就运行,而且
  • 执行优先级:静态代码块 > mian方法 > 构造代码块 > 构造方法 废话不多说,我们来介绍一下大家不经常接触到的静态代码块和构造代码块。1. 静态代码块随着类的加载而执行,只执行一次,并优先于主函数执行,是对类...
  • 构造代码块、静态代码块与构造方法是三种不同的代码块,那么他们到底有什么区别呢? 一、简单认识一下构造代码块、静态代码块与构造方法 class A { //构造代码块 { System.out.println("构造代码块A"); } //...
  • 闲暇之余,总结并撸码测试了一下静态代码块、构造代码块、构造方法的执行顺序及需要注意的问题 当然,首先大家得知道静态代码块是跟着类的加载而加载的,而构造代码块和构造方法是随着对象的加载而加载的,相比这个...
  • Java中,静态代码块、构造代码块、构造函数、普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序。 回到顶部 1、静态代码块  ①、格式  在java类中(方法中不能...
  • 近期做牛客网的Java开发笔试题,发现这类型的题目较多,很容易混淆,特将相关概念和相关示例整理如下,供大家参考^_^ ...2. 构造代码块在创建对象时被调用,每次创建对象都会调用一次,但是优先于构造...
  • 转自 Java中普通代码块,构造代码块,静态代码块区别及代码示例 //执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。 其中静态代码块只执行一次。构造代码块在每次创建对象是...
  • 新手小白学JAVA 面向对象2 构造函数 构造代码块 this

    万次阅读 多人点赞 2021-05-10 08:34:24
    1 构造方法 1.1 概念 构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法 构方法的主要功能就是完成对象创建...创建类: TestConstructor.java package cn.tedu.oop; /**本类用于测试构造方法*/ public c
  • Java基础:构造函数与构造代码块构造函数构造代码块 构造函数 构造函数是Java中的一个重要概念,它的作用是对对象的数据进行初始化。怎么去理解这个初始化呢,以新生入学为例,我们当然可以在学生入学后去给他分配...
  • 内容大纲 一、静态代码块 ①、格式 ...在java类中(方法中不能存在静态代码块)使用static关键字和{}声明的代码块: public class CodeBlock { static{ System.out.println("静态代码块");...
  • 当你知道了这些都指的是什么了,直接在程序里面写一遍不就行了,运行完记住顺序。 所以重点是记住代码都是什么样子的,怎么写的 package shunxu; public class shunxun {... System.out.println("a构造代码块"); } s
  • * 构造代码块:在类中的成员位置,用{}括起来的代码。每次调用构造方法执行前,都会先执行构造代码块。 * 作用:可以把多个构造方法的共同代码放在一起。 * 静态代码块:在类中的成员位置,用{}括
  • java 构造函数 和 构造代码块

    千次阅读 2015-03-12 23:33:05
    构造函数也叫构造方法 1、方法名与类名相同。 2、不用定义返回值类型。 3、为对象进行初始化的特殊函数。 4、对象一建立,就会调用与之对应的类的构造函数。 5、当一个类中没有定义构造函数时,那么系统会默认...
  • 静态初始化代码块、构造代码块、构造方法 (2)如果有父类和子类,执行顺序: 1.父类静态初始化代码块、子类静态初始化代码块 2.父类构造代码块、父类构造方法 3.子类构造代码块、子类构造方法 代码举例: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 269,234
精华内容 107,693
关键字:

java构造代码块

java 订阅