黑马程序员_构造函数间的调用

  这是我的第一篇博客,从这篇开始我将记录下学习java的心得体会,欢迎志同道合的朋友随时与我讨论,共同进步。

  我们都知道,函数间可以互相调用。构造函数是一种特殊的函数,它用来给对象进行初始化,如果想在构造构造函数中调用另一个构造函数,分为以下两种情况:

1.子类调用父类的构造函数

  先来看一段代码

 1 class Person
 2 {
 3     public Person()
 4     {
 5         // 构造语句
 6     }
 7 }
 8
 9 class Student extends Person
10 {
11     public Student()
12     {
13         super();
14         // 其他构造语句
15     }
16 }

  这个例子很简单,类Student是类Person的子类,在类Student的构造函数中调用父类的构造函数直接写super()即可,要注意的是这一句必须放在构造函数的第一句。这是显式调用,如果不写的话,实例化子类时java虚拟机也会先调用父类的无参构造方法。稍复杂一点的情况是,若父类只定义了带参数的构造方法(此时父类中不会有默认的无参构造方法),则在子类构造方法中需手动调用父类的带参数的构造方法,否则编译出错,因为虚拟机默认先调用父类的无参构造方法。当然,也可在父类中添加一个无参构造方法来解决。

2.调用本类重载的构造函数

  一个类可能有多个构造函数,它们之间如何互相调用呢?下面还是看一段代码再说

 1  class Person
 2  {
 3      String name;
 4      int age;
 5
 6      public Person()
 7      {
 8          // 无参构造方法
 9      }
10
11      public Person(String name)
12      {
13          this.name = name;
14      }
15
16      public Person(String name, int age)
17      {
18          this(name);// 调用自身的构造方法,this代表对象
19          this.age = age;
20      }
21  }

  这里给类Person添加了两个成员变量,有三个构造方法,当我们写含有两个参数的构造方法时,可能会写成这样:

1 public Person(String name, int age)
2 {
3     this.name = name;
4     this.age = age;
5 }

  这样写当然是正确的,但我们发现第一个语句已经在上一个构造方法中写过了,为了避免重复,我们打算在这个构造方法中调用定义好的含一个参数的构造方法。第一反应可能会写成这样:Person(name);这时编译会出现错误,一般函数调用可以直接用函数名(参数)的形式来调用,但构造函数不行,调用类中的构造函数只能用this语句来实现,这时this表示的是要进行初始化的对象,且此句也必须写在构造方法中的第一句。因为初始化要先执行。

  使用this语句进行类中构造函数的优点是可以提高代码的复用性,当不想对外提供过多的构造函数时,可以通过this语句将多个构造函数串连起来。

  如果有什么写的不好的地方欢迎大家批评指正!谢谢!

黑马程序员_构造函数间的调用,布布扣,bubuko.com

时间: 2024-10-29 10:46:37

黑马程序员_构造函数间的调用的相关文章

黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合. 2.常见的软件:系统软件:如:DOS,Windows,Linux等.应用软件:如:扫雷,迅雷,QQ等. 3.什么是开发?制作软件. 二.基础知识:人机交互方式 4.软件的出现实现了人与计算机之间的更好的交互. 5.交互方式:图形化界面:这种方式简单直观,使用者易于接受,容易上手操作.命令行方式:

黑马程序员_集合

集合1.集合和对象数组的区别: 数组的长度不可变,集合的可变: 数组可以存储基本数据类型和对象,集合只能存储对象. 集合的框架图 集合派系的顶层接口Collection1.Collection集合存储对象的方法: add(E e)将元素存储到集合中 addAll(Collection c)将一个集合添加到另外的集合中2.Collection集合提取对象的方法: 通过迭代器iterator中的方法:hasNext()和next()来取出 Iterator it=new iterator(); wh

黑马程序员_多线程

------- android培训.java培训.期待与您交流! ---------- 多线程1.进程: 正在运行的程序所占有的内存空间,叫做进程. 线程: 一个应用程序中的子程序,对于CPU,子程序可以有一条独立的执行路径,称为线程. 线程特点:依靠一个应用程序,对于其他子程序,独立被CPU执行的2.多线程的好处: 充分利用CPU的资源,程序的同时运行,提高效率3.java中线程创建的两种方法: 第一种: 定义类继承Thread class extends Thread 重写Thread中的r

黑马程序员_交通灯管理系统

(1)项目的需求 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 例如: 由南向而来去往北向的车辆 右转车辆 由东向而来去往南向的车辆 ---- 左转车辆 平时开车过十字路口红绿灯的时候,也知道红绿灯运行的顺序 (1)任何方向的车,向右边转弯的时候,是不需要看红绿灯 (2)在十字路口,相对方向的红绿灯的工作方式是一样的,南相对与北,东相对与西,这把它分成两对 (3)红绿灯顺序,一对直行通道绿灯直行车辆,等直行变红,还是这对的车辆可以左转,等左转变红,就轮到下一对了.所以在设计程序的时候,只

黑马程序员_ 利用oc的协议实现代理模式

先说下代理模式是什么吧 定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象 而代理对象可以在客户端和目标对象之间起到中介的作用. 在看过李明杰老师的课程后,我对代理模式有了最初步的理解,虽然还很浅显 但是也明白了代理模式的 一些作用跟用法.首先使用代理模式可以降低耦合度.大大的增强了代码的弹性. 举个例子,小明想看电影,但是没时间买票 于是就拜托小强去买票 最简单的方式就是 建立一个person类(小明) 一个agent类(代理类) ag

黑马程序员_高新技术_1_Java反射

------- android培训.java培训.期待与您交流! ---------- 0.反射知识体系 下图为反射整体的知识体系,把握住此图也就全局上掌握住反射所有内容. 1.反射概论 1)反射概念 其实字面上可以这么理解反射,平时使用类时都是由类new出对象,而反射则是通过对象"反射"出类的信息,好比一个人照镜子可以看到人类的特征,而看出机制就是镜子反射. 2)Java对象两种类型 Java程序中的许多对象在运行时会出现两种类型:编译时类型和运行时类型.如下代码: Person p

黑马程序员_使用Jquery实现AJAX功能

1.AJAX是什么? AJAX技术虽然一直听过,但是真正用起来还是工作有一年了的时候,当时需要实现一个异步更新推送的功能.如:在档案管理系统中,存在代办事项和站内信,而这些模块需要在页面不刷新的情况下定时的反馈给前台待办事项的数量以及简要内容,站内信也是如此.这个时候我认为只有AJAX能够胜任,那AJAX是什么?AJAX是在不重新加载整个页面的情况下与服务器交换数据并更新部分网页的技术. 2.为什么使用Jquery来实现? 学习ASP.NET开始,Jquery的强大已经深深捕获了我,而且我还记着

大数据-将MP3保存到数据库并读取出来《黑马程序员_超全面的JavaWeb视频教程vedio》day17

黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day17-资料源码\day17_code\day17_1\ 大数据 目标:把mp3保存到数据库中! 在my.ini中添加如下配置! max_allowed_packet=10485760 1 什么是大数据 所谓大数据,就是大的字节数据,或大的字符数据.标准SQL中提供了如下类型来保存大数据类型: 类型 长度 tinyblob 28--1B(256B) blob 216

黑马程序员——OC有参函数声明以及调用

黑马程序员——OC有参函数声明以及调用 ------- android培训.ios培训.期待与您交流! ---------- 1 //没有参数有返回值方法的声明实现及调用 2 3 //有参数有返回值方法的声明实现及调用 4 5 #import <Foundation/Foundation.h> 6 7 @interface cacu:NSObject 8 9 { 10 11 //实例变量 12 13 @public; 14 15 int _num1; 16 17 int _num2; 18 1