`
newObject
  • 浏览: 22422 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

初始化块和构造器

 
阅读更多
1,构造器的语法格式
修饰符:public private,protected,default

类名:构造器的名字必须和类名一致

参数列表

2,构造器的返回值类型
  构造器不能定义返回值的类型,如果定义了返回值的类型,编译并不会报错,因为JVM已经把所谓的构造器当做是一个普通的方法.没有返回值类型并不是没有返回值,构造器有返回值的,返回的是当前类的对象,因此构造器的返回值类型总是当前类,因此没有定义返回值的类型.可以理解为构造器的返回值是隐式的.

3默认的构造器, 
   如果程序中没有显示的定义构造器,系统会默认的给程序一个无参的构造器.一旦加了构造器,默认的构造器就不存在了.

4,构造器是创建对象的重要途径,是不是说构造器就完全负责创建对象呢?
不是,构造器是创建对象的重要途径,同构new 关键字来调用构造器也可以返回一个该类实例,但是这个过程并不是完全有构造器执行的.

实际上,在系统调用构造器的时候,系统会先为该对象分配内存空间,为对象的成员变量赋初值,这个时候对象就已经产生了---这些操作都是在构造器的执行体之前执行的.也就是说,在构造器的执行体执行之前,对象就已经存在了,只是不能被外部的程序调用,构造体执行之后,对象就可以被外部的程序调用了.

5,构造器的重载
         public class ConstructorDemo {

    private int a ;

   

    private String s;

   

    public ConstructorDemo() {

    }

   

    public ConstructorDemo(int a ){

       this.a = a;

    }

   

    public ConstructorDemo (String s,int a){

       this(a);

       this.s = s;

    }

}

6,初始化块(代码块)
初始化块可以当做是Java程序里面的一种成员,代码块又分为:静态代码块和非静态的代码块,一个类中可以有多个代码块,代码块之间执行的顺序是根据代码块在程序中的位置来决定.静态的代码块总是比非静态的代码块先执行

非静态代码块:可以把它当做是类的成员属性来理解.每次创建对象的时候都会执行一遍是属于成员变量

静态的代码块:同样的可以把它理解成类变量,只有在加载类的时候才会执行.

程序对属性进行初始化的顺序是:代码块à属性声明时候指定的初始值à构造器中指定的值

7,初始化块和构造器
   从某种程度上来讲,可以理解为初始化快是构造器的补充,因为初始化快总是在构造器之前执行,同样也可以对对象初始化.

   与构造器不同的是:初始化块只能执行一段固定的代码,不能够像构造器一样接受参数,而且是对类的所有的对象进行初始化.

    跟构造器一样的,程序在执行的时候不仅会执行当前类的初始化快和构造器,会一直追溯到object类的初始化快和构造器.先执行父类的初始化块和构造器(先初始化块,再构造器),然后再执行当前类的初始化块和构造器.

分享到:
评论

相关推荐

    java 静态非静态 字段方法 子类父类构造_初始化顺序!

    System.out.println("父类--静态初始化块"); } // 初始化块 { System.out.println(p_Field); System.out.println("父类--初始化块"); } // 构造器 public Parent() { System.out.println(...

    java面试题-类的初始化顺序.doc

    我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。我们也可以通过下面的测试代码来验证这一点:

    【04-面向对象(上)】

    •初始化块和构造器:初始化块总在构造器之前执行,初始化块不能接受形参。 静态初始化块 •用static修饰的初始化块为静态初始化块,由于是静态的,所以是属于类,当类加载时,就执行静态初始化块 , ...

    【Java语言基础】初始化块

    当多个构造器中有重复的语句,可以将这些重复的语句往上提取到初始化块中,提高代码的重用性 语法格式: class 类名1{ [修饰符]{ //初始化块的可执行代码 } } 注意:修饰符只能是static! 一个类种可以有多个

    疯狂JAVA讲义

    5.9.2 初始化块和构造器 161 5.9.3 静态初始化块 162 5.10 本章小结 165 本章练习 165 第6章 面向对象(下) 166 6.1 基本数据类型的包装类 167 6.2 处理对象 170 6.2.1 打印对象和toString方法 170 6.2.2 =...

    JAVA面试题解惑系列

    我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。我们也可以通过下面的测试代码来验证这一点:

    java类中元素初始化顺序详解

    对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器

    c# 引用类型构造器

    创建一个引用类型的实例时, 首先为实例的数据字段分配内存, 然后初始化对象的附加字段(对象指针、同步块索引), 最后调用类型中定义的实例构造器来设置对象的初始化状态。 构造引用类型的对象时,在调用类型的...

    Scala进阶_构造器

    我们学习过,Java的构造器,有构造列表和构造代码块 class Person { // 成员变量 private String name; private Integer age; // Java构造器 public Person(String name, Integer age) { // 初始化成员变量 ...

    php 静态变量的初始化

    } } 但是php中并没有一个类似java中的静态构造器/静态块的东西,就没有合适的时机对其进行初始化了。 对于共有的成员还有办法解决,例如: class A { static public $child; } A::$child = new B()

    Java并发--final关键字.docx

    而实例变量可以在声明变量的时候给实例变量赋初始值,在非静态初始化块中以及构造器中赋初始值。 类变量有两个时机赋初始值,而实例变量可以有三个时机赋初始值。当final变量未初始化时系统不会进行隐式初始化,会...

    杰普学习corejava总结笔记

    2.构造器执行顺序 1.类加载,同时初始化类中静态的属性(赋默认值) 2.执行静态代码块 3.分配内存空间,同时初始化非静态的属性(赋默认值) 4.调用父类构造器(注意调用父类构造器之前已经给父类的非静态的属性显示...

    关于JVM的总结

    初始化:在准备阶段已经赋过一个系统要求的初始值,而在初始化阶段则通过程序制定的主管计划去初始化变量和其他资源,从另一个角度理解就是 执行类构造器的()方法 .()方法是由编译器自动收集类中的所有变量的复制动作和...

    C#本质论(第3版)

    11.2.6 构造器和终结器的定义 11.2.7 默认值的指定 11.2.8 多个类型参数 11.2.9 元数 11.2.10 嵌套泛型类型 11.3 约束 11.3.1 接口约束 11.3.2 基类约束 11.3.3 struct/class约束 …… 第12章 委托和...

    突破程序员基本功的16课.part2

    5.8.3 静态初始化块启动新线程执行初始化 5.8.4 注意多线程执行环境 5.9 小结 第6课 流程控制的陷阱 6.1 switch语句陷阱 6.1.1 default分支永远会执行吗 6.1.2 break的重要性 6.1.3 switch表达式的类型 6.2...

    Kotlin中的对象表达式和对象声明的具体使用

    Kotlin的对象表达式与Java中的匿名内部类的主要区别:...但对象表达式可以定义初始化块,可以通过初始化块来完成构造器需要完成的事情。 对象表达式可以包含内部类,不能包含嵌套类。 package `0705` interface Outp

    Java的六大问题你都懂了吗

    例如我们要在构造器中对一个名叫s的String引用变量进行初始化,把它设置为初始值,应当这样做:  public class Demo {  private String s;  public Demo {  s = "Initial Value";}  }  而非  s = new ...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    11.2.6 构造器和终结器的定义 313 11.2.7 默认值的指定 313 11.2.8 多个类型参数 314 11.2.9 元数 315 11.2.10 嵌套泛型类型 316 11.3 约束 317 11.3.1 接口约束 319 11.3.2 类类型...

Global site tag (gtag.js) - Google Analytics