前言
因为谈构造器,可定涉及到super关键字和this关键字。
其中This指的是当前对象的引用,super是当前对象里面的父类对象的引用。
所以在写正文之前,先来谈谈Super关键字。
Supper
1. 在java中使用super来引用基类的成分:
1)super关键字是用来实现子类访问父类的
因为子类在隐藏了父类的成员变量或者重写了父类的方法后,有时还有可能要用父类的成员变量和方法,
这时访问父类的成员变量或者调用父类的方法就要用到super关键字来实现.
2)super具体使用场景如下:
a.当子类要调用父类的构造函数时用到。
b.当子类要调用父类被重写的方法时用到。
c.当子类要访问父类被隐藏的成员变量时用到
2.示例分析
<script src="https://code.csdn.net/snippets/270635.js" type="text/javascript"></script>
1)代码解释
1))大家知道,如果一个类从另一个类继承时,我们new一个子类对象时,该对象会包含了父类对象,
哪我们改如何引用里面父类对象呢?,答案是使用super.
2))当你new一个对象出来时,它会有一个this引用,这个引用指向对象自身。Super 指向当前对象的父类对象
3))具体的内存中的栈和堆结构如下图:
正文
局部变量与成员变量
1.java 的局部变量和方法参数在栈区中分配,分配的大小是按照变量类型确定
2.成员变量在堆区中分配空间,而且自动赋初值
注:
1)成员变量被包含在对象中
对象是在堆区中被分配,按照类中声明属性来分配空间
属性的访问方式 :引用.属性名 可以取值也可以赋值(静态访问)
2)方法的调用:
类的外部调用: 引用。方法名(参数)
类的内部调用:方法名(参数)
2.构造器(不能被继承)
用来描述对象创建过程的一个特殊方法
构造器
模型(类)————>对象
参数
1)构造方法的语法:
修饰符 类名(数据类型 变量名){
}
注:
1))java中的构造器声明在类的内部
2))方法名与类名相同的方法叫构造器
3))构造器不能声明返回值类型
4))构造器可以包含参数,参数一般都是创建对象所依赖的条件
5))一个创建对象的简单的分析图
2)构造器重载
1))什么叫overLoad:
相同的动作产生的结果却不同(方法表达的语义相同,但实现的过程却不同)
2))构造器的重载:
构造器的名称相同,构造器的参数列表不同
注:
方法的重载是方法名相同,方法签名不同的方法
3))构造器重载的作用:
为了方便用户使用构造器产生不同的对象,适应用户需求,实现 构造器的重用
3)默认构造器:
javac过程中,系统会自动加上一个无参构造器(前提是,类中没定义构造器)
4)this关键字:
this是当前对象的引用,是运行期当前对象的本身
可使用this明确当前对象的方法和属性
注:
在类的内部,访问属性,this。属性名,其中this在没有局部变量和属性同名可以省略。
1)))this(参数列表)
使用它可以调用本类的其他构造器,可以使代码重用;
必须写在构造器的第一行(对象在没有完成创建,其他的代码执行,都不符合常理).
注:对方法的补充解释
方法:用来表示对象的功能,它依赖于对象而存在。方法是动作,一般使用动词来声明
6)代码分析示例:(重点)
代码:
Cal c=new Cal(2,3);
int result=c.add(XXX,XXX);
system.out.println(result);
1))
Cal c=new Cal(2,3);的分析
1)))在堆区开辟一片空间,然后空间包含属性和方法的引用,为属性赋予零值
2)))调用对应构造器,构造器的调用也是一一映射,执行构造器的代码。将实参给构造器中的形参,将形参压入栈中
3)))在栈区中开辟一片引用空间(this)用来记录当前堆区中对象的首地址
4)))使用this.属性找到堆区中属性的位置,并对其赋予对应的值
5)))当构造器执行完,弹出构造器中局部变量
6)))方法执行到main方法中,在栈区中开辟引用空间c,然后赋值null
7)))将堆区中的对象的首地址赋值到栈中的引用
int result=c.add();的分析
1))使用c的空间存储的地址,找到堆区中的add()方法的引用
2)))再通过通过堆区中方法的引用,找到方法区中的方法以及方法体
3)))开始执行add()方法,将方法调用中的实参按照位置赋值给方法定义中的形参
4)))在栈区开辟空间,存储add方法的参数的值
5)))执行Cal的add方法,通过this.属性查找堆区中的值进行运算
6)))将运算的结果存储在栈区,在栈区开辟一个空间result(局部变量),将中间结果赋值给result
7)))将result的值作为放回值返回,这是add方法执行完毕
8)))将add中的局部变量弹栈,回到mian方法中,add将其放回值带回,在栈区开辟空间,用来存储方法的放回值
9)))在栈区中开辟空间result,并将方法的返回值赋值给result
system.out.println(result);的分析
1)))找到栈区中result的值,输出
2)))当main方法执行完毕,将栈区清空,垃圾回收器gc回收堆区中的空间,类装载器卸载方法区中的代码
总结
多对代码进行详细的分析,进一步加深对内存的存储分配,有益于将来的代码的编写和调优。
多画画内存图的每一步,并写上注释。尤其对于初学者这是个关键的学习环节。
分享到:
相关推荐
java笔记java笔记java笔记java笔记java笔记java笔记java笔记
java笔记java笔记,java笔记java笔记java笔记java笔记
java学习笔记java学习笔记java学习笔记java学习笔记
Java学习笔记,变量和数据类型和运算符
java笔记java笔记java笔记java笔记java笔记java笔记java笔记java笔记
高手笔记 结构成员变量偏移量的两个应用 高手笔记 结构成员变量偏移量的两个应用 高手笔记 结构成员变量偏移量的两个应用 高手笔记 结构成员变量偏移量的两个应用
Java笔记Java笔记Java笔记Java笔记Java笔记Java笔记Java笔记
java笔记java笔记java笔记java笔记
java笔记java笔记java笔记java笔记 java笔记 java笔记
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记
Java笔记Java笔记Java笔记
java基础的几个例题包括静态成员,booblean数据类型的介绍
Java的基础笔记 有要的快来速度速度发 要几法份 我也没
Java集合可以分为Collection和Map两种体系: Collection接口: List:元素有序,可重复的集合 ArrayList: 底层数组实现,有利于随机访问get LinkedList:底层是链表,有利于频繁的插入、删除操作(ArrayList删除和...
java笔试java面试宝典,java笔记 本人整理
收集的java李兴华老师的课件笔记。感觉还不错,适合回顾和新手补习。
宋红康java笔记.rar
Java基础 java学习笔记 Java Java基础Markdown学习笔记,可转换成PDF、Word等格式
java笔记.txt