黑马程序员——构造器和方法
------Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
- Class类的使用
- 方法的反射
- 成员变量的反射
- 构造函数的反射
- 反射的应用:测试泛型的本质
在《java编程思想》一书中,提到事实上,类的构造方法是一个很特殊的存在,你可以看作它是static方法,这点和static方法的特点不谋而合,因为你可以在对象没有实例化之前,调用构造方法。
然后这里关于构造方法提出以下几点:
(1)关于构造方法的调用链
例如如下代码:
首先在Father类中
public class Father{
public String name;
public int age;
private String work;
public Father(){
this.name="Jack";
system.out.print("I,m afather!");
}
public void getName(){
system.out.print("I,m a father!Myname is "+this.name);
}
private void dailyAction(){
system.out.print("Go towork!");
}
}
然后在son类中
public class Son extends Father{
private String shcoole;
public Son(){
getName();
this.name="Tom";
system.out.print("I,m ason!");
}
public void getName(){
system.out.print("I,m a son!Myname is "+this.name);
}
}
然后在测试类中
public class Test{
public static void main(Stirng agr[]){
Son son=new Son();
}
}
这很简单,大家都知道会执行这行代码Son son=new Son();会先后调用
Father的构造方法,然后调用Son的构造方法。但是大家有没有注意到,我在Son的构造方法里面,调用了getName()方法,由于java的方法是运行时动态绑定的,所以这里你觉得会出现什么要的结果。
I,m a son!
I,m a son!My name is null
所以,这里String的成员变量name为初始化为null,在java中有这样一个规则:
a:在其他任何动作发生前,将分配给对象的存储空间初始化为二进制的零
b:从导出类(父类)到子类的方法依次调用构造方法,(不包括当前类)
c:按照声明顺序依次调用成员的初始化方法。
d:调用当前类的构造方法。
所以在这个案例中我们要注意的是成员变量的初始化是发生在构造方法之前的。
同时声明一点是,为什么要设计这样的构造方法调用链。
由于存在继承关系,所以必须调用父类的构造方法,不然在子类使用从父类中继承的方法或者数据域时就会出现不可预见的错误。
其次关于private方法的声明。Private方法不可以被子类覆盖,因为它对子类不可见。
最后关于构造器中,调用使用子类方法的说明,java建议为了安全,在构造方法中可以调用final类型的方法(其实private方法也是可以调用的)
黑马程序员——构造器和方法相关推荐
- 黑马程序员 C++ 基础语法入门 学习记录
基础语法入门 文章目录 一.初识C++ 1.1 新建项目 1.2 编写项目 1.3 运行程序 1.4 注释 1.5 变量 1.6 常量 1.7 关键字 1.8 标识符命名规则 二.数据类型 2.1 整 ...
- 黑马程序员 oc对象的方法成员变量
-----------黑马程序员 IOS培训.Android培训.Java培训.期待与您交流---------------- #import <Foundation/Foundation.h&g ...
- 黑马程序员-----集合框架类(四) 高级for循环、方法的可变参数及静态导入
------- android培训.java培训.期待与您交流! ---------- 黑马程序员-----集合框架类(四) 高级for循环.方法的可变参数及静态导入 1.1 高级for循环(示例1) ...
- Java语法快速学习-黑马程序员(个人整理版本)
Java入门基础视频教程,java零基础自学首选黑马程序员Java入门教程(含Java项目和Java真题)_哔哩哔哩_bilibili为了帮助广大对Java有兴趣和立志进入本行业的零基础学员,本套课程 ...
- 黑马程序员入学Java知识——精华总结
黑马程序员入学Java知识--精华总结 J2SE部分,Java高新技术部分,7K面试题部分等黑马入学要求的知识点总结! 一.黑马程序员-java概述与基础知识 6 1.何为编程? 6 2.Java语言 ...
- 黑马程序员——面向对象(1)
------ Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 三.黑马程序员-面向对象(1) 面向对象(Object-Oriented,简称OO)就是一种常 ...
- 黑马程序员SSM_MybatisPlus笔记(自用)
MP_1_MybatisPlus简介 1.入门案例 MybatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发.提供效率. 开发方式:基于SpringBoot使用M ...
- 跟着黑马程序员pink老师学习的笔记及小破站学习的笔记
网页 1.网站是指在因特网上根据一定的规则,使用HTML等制作的用于展示特定内容相关的网页集合 2.什么是网页? 网页是网站中的一"页",通常是HTML格式的文件,它要通过浏览器来 ...
- 黑马程序员训练营十道满分题解
黑马程序员训练营基础测试题十道 代码下载见GitHubs:https://github.com/fairyxingyun/Itheima_exam_10_answer 1. 编写一个函数,函数内输出一 ...
最新文章
- Spring Boot 2.x基础教程:使用Flyway管理数据库版本
- python 列表写入excel_Python将MySQL表数据写入excel
- frame页面地址转向跨域解决方法
- 聊一聊对外API接口的存活检查可以怎么做
- Mr. Panda and Kakin(拓展欧几里得 + O(1)快速乘)
- java支持的数据类型有哪些_Java支持的数据类型有哪些?什么时候自动装拆箱?...
- 如何进行正确的SQL性能优化
- linux+cp+-rdf,简单构建基于RDF和SPARQL的KBQA(知识图谱问答系统)
- python fromarray_python --- 之pil image.fromarray
- py樱花代码_武汉大学生用代码敲出樱花绽放,这个开源项目也很酷炫
- phpstrom 设置svn提交的代码同步到服务器
- 【Python】从堆糖爬取图片Demo
- linux cat 压缩文件,Linux cat和zcat命令可能比你意识到的更有用
- no-sql数据库之redis
- Android调用QQ加群代码
- 如何调用腾讯的IP库?
- linux添加五笔输入法,在Ubuntu16.04中为fctix小企鹅增加五笔输入法
- 大型电商架构亿级流量电商详情页系统--实战 服务降级
- Windows下解决TerminateThread终止线程导致死锁问题
- 记录一下开发选择文本朗读的安卓App的过程