java笔记(四)[java中的import关键词&java中的javadoc用法及注释说明&java中的final关键字&java中的内部类详解]

时间:2022-06-13 19:40:36
1、 • import关键词的使用除了导入包外还可以导入静态方法和静态成员变量
2、 • 关于使用/** */生成javadoc的方法,在commend window 中转移到java文件的目录下,使用javadoc -d [doc 的输出路径] [要产生doc文件的java文件]即可在选择的目录下生成javadoc文件,关于注释中的几个关键词的解释:@author 标志开发该类模块的作者 @version 标明该类模板的版本 @see参考转向,也就是相关主题 @param 对于方法中参数的说明 @return 对方法返回值的说明 @exception 对方法可能抛出的异常进行说明
3、 • 关于final关键字的笔记:
• final常量定义时需要使用大写字母全名并且用下划线进行链接,在定义时进行初始化操作,但是在方法中使用的final定义的量可以先定义再赋值,使用final定义的无论是常量,数组都不能进行改变,用final定义的对象引用其所指对象不能发生改变但是对象中的数据却可以进行改变。即就是不能重新实例化新的实例改变其所指,当使用的是static final时其所指的对象内部数据就不可变了,不能再为其进行重新赋值的操作。
• final方法不能重写在权限修饰符中提到有private修饰符作为父类的某些方法修饰符子类继承后无法访问该方法,其被隐式的定义为final类型
• final 类,如果定义一个类不希望其被继承并且进行改动则可将该类定义为final类,此时类中的所有方法都将被隐式的声明为final 类型,但是final类中的成员变量可以被定义为final或非final形式。
4、 • 关于内部类的问题:
• 内部类首先分为以下四种:成员内部类,局部内部类,匿名内部类,静态内部类
• 首先是成员内部类:在类中使用成员内部类,可以在内部类中直接存取其所在类的私有成员变量同时还可以随意使用外部类的成员方法以及成员变量,尽管被修饰为private,但是内部类的成员只有在内部类的范围内是可知的,不能为外部类使用。内部类的实例一定要绑定在外部的实例对象上,常用手法是可以在外部类内实例化内部类对象通过方法来返回内部类对象,这时只需要实例化外部类然后调用其方法就可以通过返回值来获得内部类的实例化对象,除了这个方法以外想实例化内部类还可以这样OuterClass.InnerClass obj = new OuterClass().new InnerClass(); 一定要注意前面的那个红色标注部分的写法。下面是内部类常用来的功能,可以将一个内部类向上转型为其父类对象或者直接向上转型为一个接口在程序中就可以完全隐藏内部类的具体实现过程,可以在外部提供一个接口,在接口中声明一个方法,如果使用内部类即就可以多次实现该接口产生不同的结果,然而如果仅仅依靠外部类是无法多次实现接口中的方法的,实现的方法是通过内部类来实现接口中的方法,然后通过在外部类中定义方法在方法体内产生内部类的实例然后通过向上转型将实例化的内部类对象向上转型为其实现的接口对象当作返回值返回,这样在外部类的外部类来看就完全隐藏了内部的实现方法,只需要去实例化外部类对象然后去调用方法,承接返回的接口实例再去调用接口中的方法就行。值得注意的一点是非内部类不允许声明为private或者protected访问类型,只有内部类才能用这两种类型同时public 类型也是可以的。最后是通过this来获取内部类与外部类的引用,当遇到内部类与外部类崇明的情况,在内部类中使用this表示是内部类的引用,使用外部类名'.'上this此时使用的是外部类的引用。e.g. OuterClass.this.x为外部类的引用。
• 其次是局部内部类:在类的方法中或任意作用域中定义定义的内部类,此时内部类即为方法的一部分而不是外部类的一部分,所以不能在除了这个方法以外的作用域以外访问内部类,但是该方法中定义的内部类却可以访问当前代码块的常量以及此外部类的所有成员。一定要注意起访问的是该方法代码块中的final量因为其作用域远远的超过了该方法的生命周期。
• 下来是匿名内部类:通俗点的理解其格式可以记作 new 接口名称(){//some satements}; 一定不要忘记后面的分号。在监听器里面常用。
• 最后就是静态内部类:在静态内部类中可以声明static成员,但是在非静态内部类中不可以声明静态成员,原因显而易见,因为本身内部类对外是不可见的,加了static量后就违背了该规则,除此之外静态内部类不可以使用外部类的非静态成员,因此开发中静态内部类很少见。创建内部类对象时不再需要外部类对象的辅助,e.g.  new A.B();即可,引用其中的静态方法为A.B.function();,且不能从静态内部类去访问非静态外部类的对象。定义为静态内部类其中的方法并没有被默认为静态的,仍然需要用static来将其标识为静态,如果将public static void main(String[] args){}方法写入静态内部类中运行时需要运行OuterClass$InnerClass.class文件
内部类的继承,在某个类继承内部类时,必须硬性给予这个类一个带参数的构造方法,并且该构造方法的参数为需要继承内部类的外部类的引用,同时在构造方法体中使用a.super()语句。即就是为了在创建内部类的时候已经完成了对外部类的实例化。

e.g. 

class A{
class B{
}
}
public class SubClass extends A.B{
public SubClass(A a){ //传入时就已经实例化了外部类对象
a.super(); //用外部类对象引用内部类的构造方法来构造内部类对象
//最后再构建自己,如同在子类父类继承中的那个例子相同
}
}