java面对对象入门(4)-程序块初始化

Java实例初始化程序是在执行构造函数代码之前执行的代码块。每当我们创建一个新对象时,这些初始化程序就会运行。

1.实例初始化语法

花括号创建实例初始化程序块。对象初始化语句写在括号内。

public class DemoClass {

    //This is initializer block 1
    {
      //statements
    }

    //This is initializer block 2
    {
      //statements
    }
}

2.Java实例初始化器功能

实例初始化器具有以下功能。

  • 我们可以在一个类中定义多个初始化器
  • 所有初始化程序将按顺序执行,以使其出现在类主体中。
  • 初始化程序在调用父类构造函数之后,在执行子类构造函数之前运行。请注意super(),如果我们未在子类的构造函数中显式提供第一个语句,则Java会插入父类的默认构造函数。
  • 执行完所有初始化程序后,将执行构造函数的语句。
  • 我们可以在初始化器中使用此类和父类的构造函数的调用。

3.Java实例初始化序列流程

基于以上给出的功能,让我们概述一下对象的实例初始化如何进行。

  1. 子类构造函数被调用。
  2. 子类构造函数的第一个语句为super()(或提供的显式构造函数),因此将调用父类构造函数。
  3. 父类的初始化程序按其出现顺序执行。
  4. 父类构造函数语句被执行。
  5. 子类的初始化程序按其出现顺序执行。
  6. 子类构造函数语句被执行。

    4.Java实例初始化示例

    让我们快速地看一个演示以上理论的例子。
    ParentClass.java

public class ParentClass
{
  public ParentClass()
  {
    System.out.println("In ParentClass Constructor");
  }

  //Instance Initializer
  {
    System.out.println("In ParentClass Instance Initializer");
  }
}

ChildClass.java

public class ChildClass extends ParentClass
{
  public ChildClass()
  {
    super();  //If not provided, JVM will insert it
    System.out.println("In ChildClass Constructor");
  }

  //Instance Initializer 1
  {
    System.out.println("In ChildClass Instance Initializer 1");
  }

  //Instance Initializer 2
  {
    System.out.println("In ChildClass Instance Initializer 2");
  }
}

Main.java

public class Main
{
  public static void main(String[] args)
  {
    ChildClass childObj = new ChildClass();
  }
}

程序输出

In ParentClass Instance Initializer
In ParentClass Constructor
In ChildClass Instance Initializer 1
In ChildClass Instance Initializer 2
In ChildClass Constructor

更多精彩请关注

原文地址:https://www.cnblogs.com/qingmiaokeji/p/12354472.html

时间: 2024-10-10 12:59:21

java面对对象入门(4)-程序块初始化的相关文章

Java类对象数组声明和初始化

Java是纯面向对象语言.类是其重要构成单位. 然后,在实际编程中,我们会自己定义一些类,如Point <span style="font-size:14px;">public class Point { public Point(){ Lat=0.0; Lng=0.0; } public double GetLat(){ return Lat; } public double GetLng(){ return Lng; } public void SetLat(doubl

java面对对象

什么是面对对象: 就是把事务抽象成类,利用属性和方法描述他的特征: 面向对象的三大特性: 1.封装 隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性. 2.继承 提高代码复用性:继承是多态的前提. 3.多态 父类或接口定义的引用变量可以指向子类或具体实现类的实例对象.提高了程序的拓展性. 五大基本原则: 1.单一职责原则SRP(Single Responsibility Principle) 类的功能要单一,不能包罗万象,跟杂货铺似的. 2.开放封闭原则

java面对对象 关键字this super

this:this是指向对象本身的一个指针,成员函数内部指向当前类的对象 其实this主要要三种用法: 1.表示对当前对象的引用! 2.表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下. 3.用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法).但是这里必须非常注意:只能引用一个构造方法且必须位于开始! 还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有th

java——面对对象

软件出现的目的:*用计算机的语言来描述世界*用计算机解决现实世界的问题 面向对象的思想 描述 面向对象的世界 面向对象设计和开发程序的好处:*交流更加流畅*提高设计和开发效率 构造方法:构造方法是用来描述对象创建的过程,构造方法在对象创建的过程中被调用 语法: 访问修饰符 构造方法名(){ //初始化代码}注意:构造方法名必须和类名相同:没有返回值: 方法重载:*方法名相同*参数项不同*与返回值和访问修饰符无关 this关键字用法: 调用属性:this.属性名=100: 调用方法: this.方

java面对对象-类与对象

一.定义类 类的重要性,所有Java程序都以类class为组织单元   如何定义类     一个全面的类定义比较复杂,如: package 包名; class 类名 extends 父类 implements 接口名{ 成员变量; 构造方法; 成员方法; } 定义类的步骤: a.定义类名 b.编写类的属性 c.编写类的方法 /** * 定义一个car类 */ public class car{ //属性 public String name; //车的名字 public int color; /

java学习笔记——java中对象的创建,初始化,引用的解析

如果有一个A类. 1.例如以下表达式: A  a1 = new A(); 那么A是类,a1是引用.new A()是对象.仅仅是a1这个引用指向了new A()这个对象. 2.又如: A  a2; A代表类,a2仅仅是一个引用,仅仅是a2指向的对象为空NULL. 3.再如: a2 = a1: 它代表的是a2是一个引用,a1也是一个引用:在这个过程中a1所指向对象的地址传给了a2,使得a2.a1指向同一对象. 4.引用 如以下代码片段: int  k; // base data type A  a;

java 面对对象的三大特性

我们先要知道类的访问修饰符: public:公共的,在同一工程中任意地方都能访问. protected:受保护的,在同一包中课可以访问,不同包中的自己的“子类”中也可以访问:能被继承. Default:默认访问:同一包中的其他类使用,早同一包中能被继承, Private:私有的,只有在当前类使用:不能被继承,重写. 1.封装: 封装可以提高代码的重用性,能够隐藏实现细节. 是使类中的成员变量都是private,并提供public 方法访问这些成员变量的技术. 2.继承:(extends) 在面向

Java面对对象之封装

学习到了封装,也希望这篇文章能个给后面学习java的人一点帮助. 首先我们用实际问题先感受一下封装的概念. 用人来举例,人的年龄是有限的,0-120左右 我们在社交网站填写个人信息的时候,也会有年龄这一项,那么这个年龄允许填写负数或者很大的数吗? 实际上是不允许的. 这个时候实际上是对年龄这一项做出了某些条件的限制 再比如,中国人的名字. 登记户口的时候,名字和领导人的名字同名是否可行? 还是不行,因为国家不予许这样做 这个时候国家对名字这一项也做出了条件限制 回到我们程序 public sta

java面对对象(六)--内部类、匿名内部类

内部类 可以在一个类的内部定义另一个类这种类成为内部类或嵌套类,比如: 1 class Outer{ 2 - 3 class Inner{ 4 -. 5 } 6 } 7 class Outer1{} // 这个Inner1不是Outer1的内部类,不在Outer1的类体括号内 8 class Innter1{ 9 -- 10 } 11 Class Outer2{ //Inner2虽然是在Outer2的方法内,但还是在Outer2的类体括号内,是内部类 12 -- 13 public void t