构造代码块的作用和现实应用场景?_第2页回答

2021-03-22 11:17发布

19条回答
那年
2楼 · 2021-03-23 19:14

对象实例化的时候构造代码块都会执行,而有多个构造方法时,每个构造方法都不一定会被执行。

如果只有一个构造方法,那么构造代码块写在构造方法里也可以,但如果有多个构造方法需要做一部分公共的处理,那么这部分公共的代码可以提取出来放在构造代码块中,这样就可以只写一次,避免代码重复。



叽哩哇啦
3楼 · 2021-03-25 11:44

构造代码块:

  直接在类中定义且没有加static关键字的代码块称为{}构造代码;

  作用:给对象统一初始化数据

 

 

复制代码

public class Demo1 {    public static void main(String[] args) {
        Test test = new Test(3);  //构造代码块会在构造函数被调用时执行, 且在这个例子中比"this.id=id;"语句先执行,作用是给对象统一初始化数据;        System.out.println(test);
    }
}class Test{    int id;
    String name;
    
    {        this.id= 5;        this.name = "测试";
        System.out.println("这是构造代码块");
    }
    
    Test(int id){        this.id = id;
    }    
    public String toString(){        
        return "name: "+this.name +"  ,   "+"id: "+ this.id ;
            
    }
}

复制代码

 以下例子统计了所有构造函数一共被调用了多少次(构造代码块的使用)

复制代码

 1 public class Demo1 { 2     public static void main(String[] args) { 3          4         new Test(); 5         new Test(); 6         new Test(3); 7         new Test(); 8         new Test(5); 9         Test.count();10         11     }12 }13 14 class Test{15     int id;16     String name;17     static int sum = 0;18     {19         sum += 1;20     }21     22     Test(){23         24     }25     26     Test(int id){27         28     }29     30     static void count(){31         System.out.println(sum);32     }33     34 }

复制代码

 

构造代码块注意点:
  1:java编译器编译java类时,会先将成员属性的声明放到类的前端

  2:成员变量的初始化工作放到构造函数中

  3:如果类中有构造代码块,java编译器在编译时会先将构造代码块中的代码移到构造函数中执行,
         构造函数中原有的代码最后执行
       
  4:成员属性的初始化和构造代码块的执行顺序是根据原码中的位置执行


visonx
4楼 · 2021-03-25 14:16

构造代码块,位置在类中方法外,用一对{}表示,随着构造方法的调用被执行,每一个构造方法的调用,都会先执行构造代码块,然后再执行构造方法中的代码,在隐式三步中,第一步是调用super()第二步就是构造代码块的执行,一般用来存放多个构造方法中的公共部分,会先于构造方法中的代码的执行而执行

寂静的枫林
5楼 · 2021-03-25 19:38

构造代码块在创建对象的时候默认被调用,调用顺序在构造方法之前。一般用作初始化对象的成员变量,如果多个构造方法有一些公共的代码,可以提取到构造代码块当中去


豆豆
6楼 · 2021-03-26 08:55
  1. 定义位置:

      类中方法外,成员位置

  2. 运行时机:

     构造代码块在每次创建对象时, 被JVM虚拟机主动调用一次,且在构造方法之前调用

  3. 作用

     1) 可以给成员变量进行赋值

     2) 如果多个构造方法有相同的代码处理逻辑, 可以将此部分逻辑提升在构造代码块中进行实现

我是大脸猫
7楼 · 2021-03-26 14:20

构造块:直接在类中定义且没有加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();

}

 

}

 


运行结果: 


第一代码块

第二代码块

构造方法

第一代码块

第二代码块

构造方法

第一代码块

第二代码块

构造方法



瑶仙女呀
8楼 · 2021-03-27 11:00

构造代码块在创建对象的时候默认被调用,调用顺序在构造方法之前。


一般用作初始化对象的成员变量,如果多个构造方法有一些公共的代码,可以提取到构造代码块当中去


猜不到结尾
9楼 · 2021-03-27 17:25

存在就是合理的,静态只能加载一次 非静态的每次都加载各有用处的。

相关问题推荐

  • 回答 156

    对于每一位才开始接触JAVA的新手来说,先不要管算法和数据结构,大多数简单的程序不需要用到算法和数据结构,所以当你真正需要时再去学习。编程一段时间以后,你就会知道在哪些地方用到他们。这时知道算法的名字并了解它们的功能,然后动手去实践。当我们在去...

  • 回答 93

    2个都很好就业,更关键的是要学得到东西

  • 回答 12
    已采纳

    获取Map集合中所有的key可以通过map集合的keySet()方法获取例如:    Map map = new HashMap();    map.put(xx,xx); //存放数据    //.... 省略    Set set = map.keySet();    //可以通过迭代器进行测试    Iterator iter = set.iter...

  • 回答 56
    已采纳

    不同年龄,不同掌握程度,学历,找工作城市,面试能力这是一个多方面影响的结果,如果是平均值的话,全国平均薪资14k左右

  • 回答 38

    具体学多久,根据自己的学习力,自律性、解决问题能力来决定若系统性学习,跟着讲师的节奏走,大概半年左右,有专业的讲师把课程进行规划,尽心系统学习,有问题,讲师会帮忙解决,学习的效率很高,避免了自学中出现各种问题解决不了,而耽误很多时间,可能会...

  • 回答 23
    已采纳

    (1)idea启动时会有两个快捷方式,安装完后默认生成在桌面的是32位的idea的快捷方式,如果我们使用这个快捷方式运行大项目,一般都会很卡。解决方法是找到idea的安装目录,然后进入bin文件夹,找到名称为idea64的应用程序,右键他生成桌面快捷方式。以后每次...

  • BIO与NIO、AIO的区别2020-05-19 15:59
    回答 4
    已采纳

    IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。一、BIO     在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要...

  • Java方法的命名规则2021-04-06 19:07
    回答 31

    ava是一种区分字母的大小写的语言,所以我们在定义变量名的时候应该注意区分大小写的使用和一些规范,接下来我们简单的来讲讲Java语言中包、类、变量等的命名规范。(一)Package(包)的命名Package的名字应该都是由一个小写单词组成,例如com、xuetang9、compan...

  • 回答 2

    public class Point {    private int x;    private int y;    public int getX() {        return x;    }    public void setX(int x) {        this.x = x;    }    public int getY() {        return y;    } ...

  • 回答 6

    经典版单例模式public class Singleton {        private static Singleton uniqueInstance;//利用一个静态常量来记录singleton类的唯一实例。     private Singleton() {     }     public static  Singleton getInstance()...

  • 回答 3

    哈希表的长度一般是定长的,在存储数据之前我们应该知道我们存储的数据规模是多大,应该尽可能地避免频繁地让哈希表扩容。但是如果设计的太大,那么就会浪费空间,因为我们跟不用不到那么大的空间来存储我们当前的数据规模;如果设计的太小,那么就会很容易发...

  • 回答 14

    1. DOM(Document Object Model)        DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才...

  • 回答 19

    1)作用不同: throw用于程序员自行产生并抛出异常; throws用于声明在该方法内抛出了异常2) 使用的位置不同: throw位于方法体内部,可以作为单独语句使用; throws必须跟在方法参数列表的后面,不能单独使用。3)内容不同: throw抛出一个异常对象,且只能是...

  • 回答 11

    基本执行过程如下:1)程序首先执行可能发生异常的try语句块。2)如果try语句没有出现异常则执行完后跳至finally语句块执行;3)如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。4)catch语句块可以有多个,分别捕获不同类型...

  • 回答 20

    100-199 用于指定客户端应相应的某些动作。 200-299 用于表示请求成功。 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 400-499 用于指出客户端的错误。 400 语义有误,当前请求无法被服务器理解。 401 当前请求需要用户验证...

  • 回答 16

    异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生。受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发。Java编译...

没有解决我的问题,去提问