Java面向对象之构造器

目录

  • Java面向对象之构造器

    • 利用构造器确保初始化
    • 构造器重载

Java面向对象之构造器

利用构造器确保初始化

初始化问题是关系编程方式是否安全的一个重要的问题。

功能:在创建对象时执行初始化。

在Java中,每个类至少有一个构造器。格式如下:

[修饰符] 构造器名(参数列表){
  ...执行体
  }

这时,突然迷惑,之前写过的代码里都没有构造器的说法呀,是怎么回事呢?

先看下面的语句:

Student s0 = new Student();

这是我们之前经常写的,我们管他叫做创建对象,并让引用变量指向这个对象的过程(类的实例化)。
在执行new Student();语句时,系统就会为对象分配内存空间,并调用相应的构造器,执行响应的执行体,确保对象在被我们操作之前,就已经正确初始化。

可是构造器在我们之前的代码中,还是没有出现构造器的影子啊。这是因为,我们在设计类时,如果没有定义任何的构造器的话, 系统默认为类提供默认构造器(即无参构造器),执行体为空。

注意

  • 对象在构造器执行体之前就已经被建立,只不过这个对象只能在内部被this(关于this的用法之后会有专门的篇幅总结)引用。
  • 只有在构造器执行体结束之后才作为返回值被返回。
  • new表达式确实返回了新建对象的引用,但构造器本身是没有返回值的。

关于构造器的访问修饰符

  • 如果允许系统中任何位置的类来创建该类的对象,修饰符需要public。
  • 如果想让子类调用,设置为protected。
  • 如果不想让别人创建该类的实例,设置为private。

其他

  • 构造器名必须与类名相同,这一点表明普通方法的命名规范并不适用于构造器。
  • 构造器是一种特殊的方法,但没有返回值。
  • 系统默认为类提供默认构造器(即无参构造器),执行体为空。
  • 可以自定义构造器,改变默认初始化。
  • 一旦自定义构造器之后,系统默认的无参构造器就不再存在。

构造器重载

假如,我们想要用多种方式创建对象,那么我们需要设计多种构造器,但是构造器名必须和类名相同,那么就自然而然地引出构造器的重载。

构造器重载:同一个类中具有多个构造器,构造器形参列表不同,即为构造器重载。

构造器重载代码演示:

package com.my.pac09;

/**
* @author Summerday
* @date 2019/12/6 18:23
*/
public class Student {
   //暂且先把属性设为public
   public String name;
   public int grade;

   //重新定义默认构造器,假如输出语句
   public Student() {
       System.out.println("创建了一个学生");
   }
   //this的用法之一
   public Student(String name) {
       this.name = name;
       System.out.println("创建了一个名为" + this.name + "的学生");

   }

   public Student(String name, int grade) {
   //调用另一个构造器
       this(name);
       this.grade = grade;
       System.out.println("创建了一个名为" + this.name + "的学生," + this.grade + "年级");
   }
}

重载构造器调用:系统通过new调用构造器时,根据传入的实参列表决定到底用哪个构造器。

package com.my.pac09;

/**
 * @author Summerday
 * @date 2019/12/6 18:29
 */
public class StudentTest {
    public static void main(String[] args) {
        //用new创建对象,调用新定义的无参构造器
        Student s0 = new Student();
        //两个属性值默认初始化
        System.out.println(s0.name+","+s0.grade);//null

        //调用重载构造器,为name赋值
        Student s1 = new Student("小明");
        System.out.println(s1.name+","+s1.grade);//小明

        Student s2 = new Student("小红",2);
        System.out.println(s2.name+","+s2.grade);//小红

    }
}
//输出
创建了一个学生
null,0
创建了一个名为小明的学生
小明,0
创建了一个名为小红的学生
创建了一个名为小红的学生,2年级
小红,2

关于关键字this(还有些用法在下一篇一起总结):

  • this.name = name;表示把形参name赋值给正在调用构造器方法的对象的name属性赋值。this在这里表示正在调用方法的对象。
  • this(name);表示在该构造器中调用另一个构造器,且this语句必须出现在执行体的第一句,也就是说一个构造器里不能调用两次其他构造器。

原文地址:https://www.cnblogs.com/summerday152/p/11997672.html

时间: 2024-10-07 20:23:54

Java面向对象之构造器的相关文章

java面向对象_构造器

构造器(构造方法):是类中定义的方法. 1)常常用于给成员变量赋值: 2)与类同名,没有返回值类型,也不能写void: 3)在创建对象时被自动调用.所以构造方法的访问修饰符要用public,才能被自动调用: 4)若自己不写构造方法,则编译器默认生成一个无参构造:若写了,则不默认生成无参构造: 5)构造方法可以重载.

Java面向对象--构造器(构造方法)

构造器就是和类名相同但无返回类型的方法.用于当前或某一对象的实例化,并将当前或某一对象返回.要得到一个类的实例时,往往是要运行其构造函数的.本篇博客介绍Java面向对象中的构造器(构造方法的用法). 构造器的概述 ? 构造器是Java学习中很重要的一个概念,构造器可以提供许多特殊的方法,构造器作为一种方法,负责类中成员变量(域)的初始化.实例构造器分为缺省构造器和非缺省构造器. 修饰符 类名(参数列表){ 初始化语句: } 构造器的特征 ? 它具有与类相同的名称 ? 它不声明返回值类型.(与声明

第5篇-JAVA面向对象Ⅰ

第5篇-JAVA面向对象Ⅰ 每篇一句 :面向对象面向君,不负代码不负卿 初学心得: 代码虐我千百遍,我待代码如初恋 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-03| JAVA面向对象 Ⅰ] 1.JAVA作为一种面向对象语言,具有以下基本概念: ● 多态 ● 继承 ● 封装 ● 抽象 ● 类 ● 对象 ● 实例 ● 方法 ● 重载 2.面向对象 什么是面向对象?: 面向对象是一种编程思想 通俗的说:面向对象是一种思考问题的思维方式 为什么使用面向对象以及它的作用 计算机语

【Java面向对象基础(三)】面向对象思想

[喵"的Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinking in Java中提到“Everything is an object”,即万物皆对象.这里的“对象”指的是任何实体或者任何可以当作实体看待的“虚幻的事物”.比如现实中的人(男人.女人.老人.小孩而...).动物(大象.狮子.猴子...).桌子.凳子.汽车.ATM机等等,也可以使看不见摸不着的空气(氧气.二氧化碳.氮气

Java面向对象的三大特点

Java面向对象的三大特点:继承.封装.多态 继承 继承的起源 使用“is a”关系判断继承 Java中继承的实现 关键字:extends 实例化子对象 单继承和多继承 子类继承父类.父类还可以继承上一个类,称为传递继承. Dog extends Animal: Animal extends ShengWu: 所有类的根类Object 即object类是所有类的父类,object中所有的方法其他类都可以直接调用 方法重写 父类方法   Public void jiao(){system.out.

Java面向对象(二、封装)

Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为. 生活中的继承: 兔子和羊属于食草动物类,狮子和豹属于食肉动物类. 食草动物和食肉动物又是属于动物类. 所以继承需要符合的关系是:is-a,父类更通用,子类更具体. 虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自

java面向对象1

类是面向对象的重要内容.类可以当做一种自定义的数据类型. 类的定义格式如下: 修饰符  Class 类名 { [静态代码块] [初始代码块] [构造器] [Field] [Method] } 1.类的修饰符包括:public.final.abstract.默认. 2.Field是用来存储类.实例的数据,Method则是完成某一功能.静态代码块.初始代码块.构造器是用来对类的.实例的Field进行初始化 3.静态代码块是类在初始化的阶段执行的,而不是在创建对象的时候才执行. 4.初始化代码块.构造

java面向对象2

访问控制符:     private.default.protected.public 同一个类中    √  √           √            √ 同一个包中   √  √            √ 子类中 √            √ 全局范围                                                      √ 访问控制符来控制:Field.方法.构造器能否被其他类访问到. 面向对象三大特征: 1.封装: 将对象的状态信息隐藏在对象内

Java面向对象笔记3

Java类必须包含一个或一个以上的构造器,使用构造器最大的好处就是在创建对象时,对类的Field进行初始化(当创 建一个对象的时候,系统为这个对象的Field进行默认初始化,如果是基本类型如数值型赋值为0,如果是引用类型的 Field赋值为null),如以下代码: public class Teacher { private String name; private int age; public Teacher(){ } public Teacher(String name,int age){