Java构造函数是特殊的方法(没有返回类型),使您可以在应用程序内部的其他类使用对象之前完全初始化对象状态。Java中的构造方法是使用new关键字调用的。
下面让我们更深入地了解构造函数。

1.什么是java构造函数

构造函数是一种特殊的方法,类似于(没有确切的方法)构造,它可以帮助程序员在对象可被应用程序中的其他对象使用之前编写对象初始化代码。
每当应用程序需要任何类的新实例时,JVM就会在堆内部分配一个内存区域。然后,JVM执行调用的构造函数(类可以具有多个构造函数)并初始化对象状态。在构造函数内部,您可以访问所有对象属性,并将它们分配给它们的默认值或任何所需的值。

2.构造函数类型

2.1.默认构造函数(无参数构造函数)

如果程序员在类定义中不提供任何构造函数,则JVM在运行时为该类提供默认构造函数。
程序员还可以覆盖类中的默认构造函数。让我们看一下语法。

public class Employee
{
public Employee() { }
}

在默认构造函数中,构造函数的名称必须与类名称匹配,并且不应具有任何参数。

2.2通过构造函数重载进行参数化构造函数

如上所述,一个类中可以有多个构造函数。这可以通过重载构造函数来实现。在构造函数重载中,您可以根据要求传递参数列表,即可以初始化类的数量。

public class Employee {
private String firstName;
private String lastName; public Employee() { //constructor 1 } public Employee(String firstName) { //constructor 2 } public Employee(String firstName, String lastName) { //constructor 3 }
}

在上面的类中,我们定义了3个构造函数来处理3种情况–应用程序可能需要如何创建employee对象,即不使用名称,仅使用名字以及同时使用名字和姓氏。

Employee employee1 = new Employee();
Employee employee2 = new Employee("Lokesh");
Employee employee3 = new Employee("Lokesh", "Gupta");

3.构造规则

在Java中创建构造函数的强制性规则很少。

  1. 构造函数名称必须与类的名称相同。
  2. 构造函数定义中不能有任何返回类型。
  3. 构造函数中不能有任何return语句。
  4. 构造函数可以由不同的参数重载。
  5. 如果要使用super()超类构造函数,则它必须是构造函数中的第一条语句。

4.构造器链接

在Java中,可以在构造函数内调用其他构造函数。就像方法调用一样,但是没有任何引用变量(显然,实例已完全初始化)。
现在我们可以调用相同类或父类的构造函数。两者使用不同的语法。

4.1调用同一个类的构造函数

要从同一类调用其他构造函数,请使用this关键字。例如,

public Employee() { 

}

public Employee(String firstName) {
this(); //calling default constructor
} public Employee(String firstName, String lastName) {
this(firstName); //calling constructor with single argument of String type
}

4.2 调用超类构造函数

要从父类或父类调用构造函数,请使用super关键字。super关键字的用法与关键字相似this–唯一的区别是super引用超类和this当前实例。

public Employee() {
//refer to Object class constructor
//as it is parent class for every class
super();
}

5.私有构造方法

有时您想保护构造函数以免被其他类调用。总之,您希望没有人能够创建该类的新实例。
为什么有人要那个?好吧,这是单例模式所必需的。在单例中,应用程序希望只有任何一个类的一个实例。
常见的单例类定义如下所示:

public class DemoSingleton implements Serializable
{
private static final long serialVersionUID = 1L; private DemoSingleton() {
// private constructor
} private static class DemoSingletonHolder {
public static final DemoSingleton INSTANCE = new DemoSingleton();
} public static DemoSingleton getInstance() {
return DemoSingletonHolder.INSTANCE;
} protected Object readResolve() {
return getInstance();
}
}

学习愉快!

更多精彩请关注

java面向对象入门(3)-java构造方法的更多相关文章

  1. Java面向对象入门

    Java面向对象入门 一.Java面向对象的基本组成 Java类及类的成员:属性.方法.构造器:代码块.内部类 面向对象三大特征:封装.继承.多态(抽象) 关键字:this.super.static. ...

  2. Java Socket 入门2 Java与C# Socket 通信

    参考http://www.cnblogs.com/cdtarena/p/3184313.html 这里以C#作为服务端  其实不论C#是服务端还是客户端都不是主要问题 毕竟不论客户端还是服务端 都包括 ...

  3. java面向对象下:Java数据库编程

    19.Java数据库编程: JDBC概述:        JDBC(Java Database Connection)是java中提供的一套数据库编程API,它定义了一套用来访问数据库的标准Java类 ...

  4. java面向对象入门(1)-入门介绍

    在本 Java OOPs 概念教程中,我们将学习四种主要的面向对象原则 -- 抽象.封装.继承和多态性.它们也被称为面向对象编程范式的四大支柱. _抽象_是在不考虑无关细节的情况下公开实体基本细节的过 ...

  5. Java面向对象封装优化2_构造方法

    1. 类 package cn.itcast.day06.demo05; /* 一个标准的类通常要拥有下面四个组成部分: 1. 所有的成员变量都要使用private关键字修饰 2. 为每一个成员变量编 ...

  6. Java面向对象入门(2)-访问修饰符

    Java访问修饰符–public, protected, private and default Java提供了四个访问修饰符来设置类,变量,方法和构造函数的访问级别,即public,private, ...

  7. 2. Java面向对象之泛型-构造方法中使用

    package generic; class Construtgeneric<T> { private T value; public Construtgeneric(T value) { ...

  8. java面向对象入门之方法参数的传递

    /* Name : Power by :Stuart Date:2015.4.25 */ class PassOn{ //创建show方法,把i传入,输出i+1的结果 public void show ...

  9. java面向对象入门之带参方法创建

    /* Name :创建带参的方法 Power by :Stuart Date:2015.4.25 */ //创建Way类 class Way{ //Way类成员的基本变量 int add1=123; ...

随机推荐

  1. GCC编译Win图形程序不显示控制台方法

    用VS编译openCV这些有控制台又有图形显示的程序,如果想隐藏控制台,只需要使用一行代码: #pragma comment( linker, "/subsystem:/"wind ...

  2. Linux中软件安装包的格式

    一.Linux常用安装包及安装方法 1.安装包一般有四类: 1)tar包,如software-1.2.3-1.tar.gz.他是使用UNIX系统的打包工具tar打包的. 2)rpm包,如softwar ...

  3. 用VLC搭建流媒体服务器

    用vlc搭建简单流媒体服务器(UDP和TCP方式) 这段时间用到了流媒体数据传输的TCP和UDP方式,感觉vlc可以做这方面的demo,这里总结下,也方便我以后查阅. 简介 VLC主页:http:// ...

  4. Web 开发工具类(2): HttpClientUtils

    HttpClientUtils 整合了一些 web开发中常用的httpClient操作: package com.evan.common.utils; import java.io.IOExcepti ...

  5. python接口自动化测试 - 数据驱动DDT模块的简单使用

    DDT简单介绍 名称:Data-Driven Tests,数据驱动测试 作用:由外部数据集合来驱动测试用例的执行 核心的思想:数据和测试代码分离 应用场景:一组外部数据来执行相同的操作 优点:当测试数 ...

  6. 快乐编程大本营【java语言训练班】第5课: java的数组编程

    快乐编程大本营[java语言训练班]第5课: java的数组编程 第1节. 声明数组变量 第2节. 创建数组对象 第3节. 访问数组元素 第4节. 修改数组元素 第5节. 多维数组 学习地址如下:ht ...

  7. 实验5: IOS的升级与恢复

    实验5:  IOS的升级与恢复 实验目的 通过本实验可以掌握 1)    掌握IOS 正常的情况下升级IOS2)    IOS 丢失的情况下使用TFTP恢复IOS3)    IOS 丢失的情况下使用X ...

  8. python笔记16

    1.今日内容 模块基础知识 time/datetime json/picle shutil logging 其他 2.内容回顾和补充 2.1模块(类库) 内置 第三方 自定义 面试题: 列举常用内置模 ...

  9. python3 控制结构知识及范例

    (一)三种基本控制结构 1.顺序结构:按照程序语句编写的顺序依次逐条执行 2.选择结构:根据特定的条件选择某一个分支 3.循环结构:反复执行某个或者某些操作,关注点:在什么情况下,反复执行哪一部分的操 ...

  10. 《C语言》—— 数组详解

    书籍使我变成了一个幸福的人,使我的生活变成轻松而舒适的诗.--高尔基 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tec ...