JAVA笔记:构造方法

 构造方法定义:

  【修饰符】 构造方法名(形参列表)

             {

                }

  【修饰符】:构造方法的上一级单元是类,所以修饰符可以public、protected(父子类访问权限)、private(本类访问权限)、默认(包访问权限)

  【没有返回类型】

  【构造方法名】:必须与类名一致

  a.一般概念

  构造方法不能够被继承,也就构造方法不能够被重写

  构造方法是特殊的方法,不能够被程序员直接调用,必须使用new关键字来调用,或者在构造方法中this(实参)调用本类构造方法,

  或者在构造方法中super(实参)调 用父类构造方法。

  b.创建对象执行过程

  首先分配内存空间,并且执行默认初始化操作(根、父、子类的顺序分配空间),此时对象已经创建成功。

  然后执行初始化代码块,在执行构造方法(根初始化代码块、根构造方法、父初始化代码块、父构造方法、子初始化代码块、子构造方法的顺序执行)。

  c.构造方法调用的规则

  首先判断子类中是否有super(必须在构造方法中第一条语句使用)调用父类构造方法,如果有,则调用super匹配的父类构造方法。

  如果没有,如果父类显式定义构造方法,则判断是否有无参构造方法,如果有,则调用父类无参构造方法。

  如果没有,则编译出错。

  如果父类没有定义构造方法,则系统自动默认一个无参构造方法,并且执行体为空。

  最后判断是否有this(必须在构造方法中第一条语句使用)调用本类构造方法,如果有,则调用this匹配的本来构造方法

  d.构造方法中使用成员变量

  如果要调用父类的成员变量,可以使用super.变量

  如果要调用本类的成员变量,可以使用this.变量

  如果要调用局部变量,可以直接使用变量

  e.构造方法中使用成员方法

  如果要调用父类的成员方法,可以使用super.方法名(实参);

  如果要调用本类的成员方法,可以使用this.方法名(实参)或者方法名(实参);

  注意点:如果父类构造方法中调用普通方法,并且此普通方法在子类中被重写,则父类构造方法中调用的普通方法为子类的普通方法,

  (也就是执行子类的普通方法),但此时子类的引用变量为null时没有进行显式初始化,所以有可能导致null指针异常(如果在

  子类普通方法中使用子类的引用变量计算)。   

最新内容请见作者的GitHub页:http://qaseven.github.io/

   

时间: 2024-09-20 19:43:11

JAVA笔记:构造方法的相关文章

对象-java中构造方法simpleadapter没有定义好是什么原因造成的???

问题描述 java中构造方法simpleadapter没有定义好是什么原因造成的??? The constructor SimpleAdapter(new View.OnClickListener(){} List> int String[] int[]) is undefined 有时候系统提示加:我也加了:但是eclipse还是报错是什么原因造成的 解决方案 是编译错误还是运行时错误呢? 解决方案二: 把你代码贴出来看看.

对象-java子类构造方法的问题--必须要先调用父类的构造方法么?

问题描述 java子类构造方法的问题--必须要先调用父类的构造方法么? 好像有这样一说法在子类的构造方法中,如果没有调用父类的构造方法,就会默认加一个super() 如果父类没有这一构造方法,就会报错.我想问java在子类的构造方法时候是先检验是否能生成父类的对象还是先检测是否调用了该子类的其他构造方法,因为我这样试了试通过了编译. 解决方案 我的理解是18-19之间是没有调用的,因为下面的这句话就说明了19行的内容其实是等价于直接执行三个参数的构造方法,真正需要执行super的是在这三个参数的

Java笔记:集合框架实现原理

这篇文章是对http://www.cnblogs.com/skywang12345/category/455711.html中java集合框架相关文章的一个总结,在此对原作者的辛勤整理表示感谢. Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表.Set集合.Map映射.工具类(Iterator迭代器.Enumeration枚举类.Arrays和Collec

Java笔记:Java内存模型

1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记.以下内容摘自 <深入理解Java内存模型>读书总结 并发 定义:即,并发(同时)发生.在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行. 并发需要处理两个关键问题:线程之间如何通信及线程之间如何同步. 通信:是指线程之间如何交换信息.在命令式编程中,线程之间的通信机制

java笔记十:java中的反射

Java中,反射是一种强大的工具.它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接.反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码.这使反射成为构建灵活的应用的主要工具.但需注意的是:如果使用不当,反射的成本很高. Java的类反射所需要的类并不多,它们分别是:Field.Constructor.Method.Class.Object,下面我将对这些类做一个简单的说明.Field类:提供有关类或接

Java 笔记04

内部类: (注:所有使用内部类的地方都可以不用内部类,使用内部类可以使程序更加的简洁,便于命名规范和划分层次结构). 内部类是指在一个外部类的内部再定义一个类. 内部类作为外部类的一个成员,并且依附于外部类而存在的. 内部类可为静态,可用PROTECTED和PRIVATE修饰.(而外部类不可以:外部类只能使用PUBLIC和DEFAULT).   内部类的分类: 成员内部类. 局部内部类. 静态内部类. 匿名内部类(图形是要用到,必须掌握).   ①  成员内部类:作为外部类的一个成员存在,与外部

Java 笔记01

面向对象主要针对面向过程. 面向过程的基本单元是函数.   什么是对象:EVERYTHING IS OBJECT(万物皆对象)   所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么(方法):告诉外界对象有那些功能. 后者以前者为基础. 大的对象的属性也可以是一个对象.   为什么要使用面向对象: 首先,面向对象符合人类看待事物的一般规律. 对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节. 方法的定义非常重要.方法有参数,也可能有返回值.   注意区分:对象(本身)

Java 笔记02

继承: 父类(SuperClass)和 子类(SonClass). 父类的非私有化属性和方法可以默认继承到子类. Class Sonextends Father{ } 而如果父类中的私有方法被子类调用的话,则编译报错.   父类的构造方法子类不可以继承,更不存在覆盖的问题.(非构造方法可以) 如果子类访问父类的构造方法,则在编译的时候提示访问不到该方法. JAVA中不允许多继承,一个类有且只有一个父类(单继承). JAVA的数据结构为树型结构,而非网状.(JAVA通过接口和内部类实现多继承)  

Java 笔记03

final可以修饰类.属性.方法.   当用final修饰类的时候,此类不可被继承,即final类没有子类.这样可以用final保证用户调用时动作的一致性,可以防止子类覆盖情况的发生.   当利用final修饰一个属性(变量)的时候,此时的属性成为常量. JAVA利用final定义常量(注意在JAVA命名规范中常量需要全部字母都大写): Final intAGE=10: 常量的地址不可改变,但在地址中保存的值(即对象的属性)是可以改变的.   Final可以配合static使用. ? Stati