Java构造器的理解

构造器的引入

在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化。创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器。从而保证了初始化的进行。

构造器的命名

  1. 所取得任何名字可能与类得某个成员名称相冲突
  2. 调用构造器是编译器得责任,所以必须让编译器知道应该调用哪个方法

Java构造器采用与类相同的名称

class Example{
    public String var1;
    public String var2;
    // 默认构造器(无参构造器)
    public Example(){}
}

构造器的形式

不接受任何参数的构造器叫做默认构造器。但是和其他方法一样,Java构造器也能够带有形参,以便指定如何创建对象。

class Example{
    public String var1;
    public String var2;
    // 默认构造器(无参构造器)
    public Example(){}

    //自定义构造器(带有形参)
    public Example(String var1,String vart2){
        this.var1 = var1;
        this.var2 = var2;
    }

    public static void main(String[] args){
        Example example = new Example("参数1","参数2");
    }
}

在上面的代码中,存在两个构造器(默认构造器和自定义构造器),因此我们可以使用new Example()的方式来创建不带参数的Example对象,同时也可以使用new Example(var1,var2)的方式来创建对象。

构造器有助于减少错误,并使得代码更容易阅读。从概念上来讲,“初始化”和“创建”是彼此独立的,但是在Java中,“初始化”和“创建”是捆绑在一起,二者不能分离。

构造器没有返回值,不会返回任何东西(new表达式确实返回了对新建对象的引用,但构造器本身并没有任何返回值)

this关键字

this关键字只能够在方法内部使用,表示对“调用方法的哪个对象”的引用。下面给出this关键字的6个用法:

  1. this可用于引用当前类的实例变量。
  2. this可用于调用当前类方法(隐式)
  3. this() 可用于调用当前类的构造函数
  4. this可以在方法调用中作为参数传递。
  5. this可以在构造函数调用中作为参数传递。
  6. this可用于从方法返回当前的类实例。

详细内容可参考链接3

super关键字

构造器是不能够被继承的,如果子类要调用父类中的构造器,那么就必须要用到super关键字了。

package chapter7;

class Example {
    public String name;

    //无参构造器
    public Example(){
        System.out.println("Example()");
    }

    //有参构造器
    public Example(String name){
        this.name = name;
        System.out.println(name);
    }
}

public class People extends Example{
    public People(){
        super();
    }
    public People(String name){
        super(name);
    }
    public static void main(String[] args){
        People people1 = new People();
        People people2 = new People("yoloyanng");
    }
}
/*
* Output:
* Example()
* yoloyanng
*/

在People类中的两个构造器中包含了super关键字,它们的作用是实例化父类中的构造器,加入到People中。并且super关键字只能够放在首行,而如果没有加上super关键字,编译器会自动加上。

更多用法:

  1. super可用于直接引用父类实例变量。
  2. super可用于直接调用父类方法。
  3. super() 可用于直接调用父类构造函数。

详细内容参考链接4

参考

《Java编程思想》(第四版)

链接1:https://www.cnblogs.com/grl214/p/5895854.html

链接2:https://blog.csdn.net/f381226200/article/details/88368446

链接3:https://www.javatpoint.com/this-keyword

链接4:https://www.javatpoint.com/super-keyword

原文地址:https://www.cnblogs.com/CH42e/p/12354493.html

时间: 2025-01-17 02:44:24

Java构造器的理解的相关文章

Java入门——深入理解Java三大特性

Java入门——深入理解Java三大特性 本Blog内容: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法(getter,setter),如果不想被外界方法,我们大可不必提供方法给外界访问. 封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码. 可以对成员变量进行更精确的控制.(在setter方法中进行实际意义的校验) 总结:控制属性访问权限,不是你想改就能改.容易修改属性类型.精确控制属性的取值范围. 继承 继承是使用已存在的类

Java构造器和方法的区别(转自http://www.blogjava.net/weidagang2046/articles/3430.html)

摘要要学习Java,你必须理解构造器.因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆.但是,构造器和方法又有很多重要的区别.原作者:Robert Nielsen 原站:www.javaworld.com 我们说构造器是一种方法,就象讲澳大利亚的鸭嘴兽是一种哺育动物.(按:老外喜欢打比喻,我也就照着翻译).要理解鸭嘴兽,那么先必须理解它和其他哺育动物的区别.同样地,要理解构造器,那么就要了解构造器和方法的区别.所有学习java的人,尤其是对那些要认证考试的,理解构造器是非常重要的.下面将

Java学习之道:Java构造器和方法的区别

摘要 要学习Java,你必须理解构造器.因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆.但是,构造器和方法又有很多重要的区别. 原作者:Robert Nielsen 原站:www.javaworld.com 我们说构造器是一种方法,就象讲澳大利亚的鸭嘴兽是一种哺育动物.(按:老外喜欢打比喻,我也就照着翻译).要理解鸭嘴兽,那么先必须理解它和其他哺育动物的区别.同样地,要理解构造器,那么就要了解构造器和方法的区别.所有学习java的人,尤其是对那些要认证考试的,理解构造器是非常重要的.下

Java面向对象的理解和实现代码

理解Java面向对象的重要知识点: 一. 类,对象 类?首先举一个例子:小李设计了一张汽车设计图,然后交给生产车间来生产汽车,有黑色的.红色的.白色的... 这里,汽车设计图就是我们说的类(class),生产车间就是new构造器(大部分对象都是new出来的),生产出来的汽车就是我们要说的对象.可以说java编程实质就是构建类的过程. 对象?万物皆对象,宇宙中,如植物,动物,人类,每个个体都是各司其职.各尽所能的.这就要求对象高内聚.低耦合(简单理解就是人的大脑,它负责思考,想象,记忆,而不能呼吸

Java——构造器

Java 构造器的由来:构造器是一个创建对象时被自动调用的特殊方法,为的是初始化. 当创建一个个对象时,系统会该对象的属性默认初始化,基本类型属性的值为0(数值类型),false(布尔类型),把所有的引用类型设置为null.构造器可以改变这种默认的初始化.构造器不是函数. 要求:构造器的名称应与类的名称一致.调用构造器是编译器的责任,所以必须让编译器知道调用的是哪一个方法.所以Java采取了与类同名的方法命名构造器. public class Person { public String nam

java常量池理解

String类两种不同的创建方式 String s1 = "zheng"; //第一种创建方式 String s2 = new String("junxiang"); //第二种创建方式 第一种创建方式是编译期在常量池中创建对象,如果常量池中已经存在"zheng"这个String对象,就将地址赋给s1.第二种创建方式是运行期在堆中创建对象,无论堆中是否已有都会重新创建一个对象. String s1 = new String("xyz&q

有关JAVA多线程的理解

不同于c++等语言的调用操作系统的线程调控机制来实现多线程,java语言内置了多线程的api包,因此可以更加方便的使用多线程技术.(1)线程的问题.进程是程序的一次动态执行过程,它对应了从代码加载.执行至执行完毕的一个完整过程,这个过程也是进程本身从产生.发展至消亡的过程.线程是比进程更小的单位,一个进程执行过程中可以产生多个线程,每个线程有自身的产生.存在和消亡的过程,也是一个动态的概念.每个进程都有一段专用的内存区域,而线程间可以共享相同的内存区域(包括代码和数据),并利用这些共享单元来实现

【Java】深入理解ThreadLocal

一.前言 要理解ThreadLocal,首先必须理解线程安全.线程可以看做是一个具有一定独立功能的处理过程,它是比进程更细度的单位.当程序以单线程运行的时候,我们不需要考虑线程安全.然而当一个进程中包含多个线程的时候,就需要考虑线程安全问题,因为此时线程可能会同时操作同一个资源,当两个或者两个以上线程同时操作一个资源的时候,就会造成冲突.不一致等问题,即线程不安全. 解决线程安全问题,本质上就是解决资源共享问题,一般有以下手段: 1)可重入(不依赖环境):2)互斥(同一时间段只允许一个线程使用)

Java基础之理解Annotation(与@有关,即是注释)

Java基础之理解Annotation 一.概念 Annontation是Java5开始引入的新特征.中文名称一般叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类.方法.成员变量等)进行关联. 更通俗的意思是为程序的元素(类.方法.成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供指定的工具或框架使用的. Annontation像一种修饰符一样,应用于包.类型.构造方法.方法.成员变量.参数及本地变量的声明语句中.