Java养成计划----学习打卡第七天
内容导航
Java入门到精通(打卡第七天)
学习内容
javadoc注解,多态(重申)
内容管理
Hello!我是C风,在开始今天的分享前,我想先表明一下自己最近的状态,我的flag是每天学习3h以上,但是每周的前三天真的是肝了,因为我本身是CS,CS是不会学习Java的,而我者几天就会被数字逻辑,复变等挤占学习时间,是真的累,并且我一直都明白算法的重要性,所以我还会抽时间看算法,最近就一直在分析的是递归分治,深搜DP之类的,我感觉大差不差,但是要深入理解,比如记忆化搜索,这些问题确实要花时间理解;并且最近准备着手完整搭建一个项目,从英语的分析需求开始,一直到最后建立;所以我觉得我的Java学习不能日更了,但是学习3小时还是不会变。从一点点开始做,最终一定可以行的
javadoc注释
我们之前都学过普通的注释,比如单行注释与多行注释
-
单行注释: //这里是单行注释;
-
多行注释:/*这里可以多行注释
可以多行*/
除了这两种注释,Java里面还有一种注释Javadoc注释
那什么是Javadoc注释呢?
使用"/**“开始,使用” */"结束,用来注释类,属性和方法等
import java.util.Scanner;
/**
* @author OMEY-PC
* @apiNote
* @version 1.0
*/
这里有个好处就是便捷,我们直接/**, 然后回车就生成了注释,我们直接选择就好了,从athor,version,一共有20多个呢
- javadoc能够从源代码中抽取类,属性方法等注释,形成一个配套的ApI文档;
- 生成javadoc文档可以使用命令行方式,也可以使用MyEclipse工具生成
使用eclipse生成javadoc文档直接选择Project->generate javadoc,之后就可以生成文档了,我们可以看一下,它的生成
正在加载源文件D:\Java项目\java_study\src\java_study\Main.java…
正在构造 Javadoc 信息…
正在构建所有程序包和类的索引…
标准 Doclet 版本 16.0.2+7-67
正在构建所有程序包和类的树…
通过这些信息就知道这个功能的强大,作为一个合格的程序员一定要熟练使用javadoc
Java注释最强大的功能就是可以生成到帮助文档之中,这是为了方便程序的阅读与使用,我们可以在类名的前面以及属性方法的前面都加上doc注释,解释类的作用,属性,方法的作用以及返回值之类等,要使用好我们的doc注释,就要去了解这20多个注释的作用,@开头的,这些就下去去了解吧
如果有构造方法之前还是会先初始化一次
我们先说一下对象的生成过程:
-
类型为Point2D的一个对象首次创建时,或者Point2D类的静态方法和数据首次使用时,Java解释器就会查找环境变量classpath所指定的位置,找出并装载Point2D.class
-
装载之后,**如果它有超类,那么继续装载它的超类,如果超类还有超类,那么会继续装载第二个超类,依次类推。从超类到子类的所有静态初始化模块顺序执行,静态初始化动作仅仅发生一次(因为是类的)
-
在堆内分配一个足够的存储空间
-
系统会先调用默认值初始化对象的成员变量(冷知识)
-
执行所有出现于数据定义处的初始化动作
-
执行构造函数
所以你就算有构造函数,系统还是会先把它们初始化默认值(就无参那套)
继承的类除了父类,也还被称为超类,我们之前说过生成构造方法第一行会有super();这就是调用超类的构造方法;再补充一点,我们之前说过父类中的final方法不能覆写,但是我们再强调一下static也不能覆写,因为static是类方法,是属于类的,不能够被子类覆写
We like to avoid code duplication and encourage code reuse in an application by using super.
也就是说我们可以用super调用超类不可见的方法来避免代码的重复
为什么可以向上转型?Upcasting
Upcasting : An subclass reference variable can be assigned to a superclass reference variable. And Upcasting is always legal.
根据刚刚的创建过程我们就知道子类对象创建会继续装载它的超类,所以子类对象是包含超类非私有方法的,所以子类对象都是Legal的;
下转型downcasting
如果父类对象想调用子类所特有的方法,则必须对其进行强制类型转换,直接使用括号里加上子类名就可以了,但downcasting is sometimes illegal,
比如Dog 是Animal的子类,我们想用Animal对象调用Dog特有的observate()方法
Animal ani = new Animal();
((Dog)ani).observate();//只是我们这个转换可能出问题,搭配instanceof使用就可以避免,使用方法和Boolean类似
向下转型有的时候会出问题,会不合法,所以我们一般搭配instanceof关键字来使用
instanceof关键字
if(ani instanceof Animal){//向下转型}
当ani为Animal的对象引用或者子类对象的引用就会返回true,如果对象为Null以及其他情况就会返回false
In Java, all classes descend, directly or indirectly ,from class Object, so all clsasses inherit the methods defined in class Object.
在Object中就有一个equals方法,它可以比较两个对称性的引用是否相同,即比较两个对象是否是同一个对象
public boolean equals(Object obj){ }
注意这里的相同是位置也要相同,两个对象就算内容相同,但是如果它们的地址不同,那么输出的还是false,所以这个方法对于大部分类都不适用,所以都要进行覆写。
多态
多态是由继承实现的,具体来说是靠Upcasting实现的,因为一个超类变量可以赋予多个子类的值,这时我们就称这个超类变量为多态变量,这时我们实现的多态就是依靠我们对超类中的一个方法的覆写实现的
比如Animal有多个子类对象Dog,Pig,Chicken,然后我们对超类的getName method进行覆写,当我们代入不同的子类对象时就实现了多态,就我们之前说抽象类的时候也提到过这个问题。
今天的分享就到这里,明天会争取多分享一些内容~~