Java 粗粒度速成笔记 02

方法

可变参数,相当于数组,但无需构造,非 NULL

参数绑定:基本类型参数传递,复制;引用类型参数传递,引用

构造方法

先初始化字段,再按构造方法进行初始化

默认构造方法,多构造方法-方法重载

继承

子类 extends 基类

一个protected字段和方法可以被其子类及子类的子类访问

子类引用父类的字段时,可以用super.fieldName

如果父类没有默认的构造方法,子类就必须显式调用super()并给出参数

允许使用sealed修饰class,并通过permits明确写出能够从该class继承的子类名称

向上转型:把一个子类型安全地变为更加抽象的父类型

向下转型很可能会失败,ClassCastException

instanceof判断一个变量所指向的实例是否是指定类型,或者这个类型的子类

多态

实例方法调用是基于运行时的实际类型的动态调用,而非变量的声明类型

多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法

要调用父类的被覆写的方法,可以通过super来调用

父类不允许子类对它的某个方法进行覆写,可以把该方法标记为final

final 修饰方法阻止覆写,修饰类阻止继承,修饰字段阻止修改)

抽象类

把一个方法声明为abstract,表示它是一个抽象方法,本身没有实现任何方法语句

注意这个类也必须申明为抽象类

接口

如果一个抽象类没有字段,所有方法全部都是抽象方法,就可以把该抽象类改写为接口,使用interface可以声明一个接口

所谓interface,是比抽象类还要抽象的纯抽象接口,它连(实例/变量)字段都不能有

接口定义的所有方法默认都是public abstract

当一个具体的class去实现一个interface时,需要使用implements关键字

区别:一个类只能继承自另一个类,不能从多个类继承;但一个类可以实现多个interface

静态

静态方法和静态字段都用 static 修饰

interface 可以有静态常量字段(只能且自动为 public static final

类似命名空间,但要求逻辑结构与物理结构一致

位于同一个包的类,可以访问包作用域的字段和方法。类中不用publicprotectedprivate修饰的字段和方法就是包作用域

引用其它的类:要么写出完整类名,要么 import 某个包的某个类(或者 *

编译器对待简单类名的查找顺序

当程序中有包声明,编译方法需要修改。打包编译 javac -d . A.java 即可

作用域

定义为publicclassinterface可以被其他任何类访问

定义为privatefieldmethod无法被其他类访问(如果定义了嵌套类,那么,被嵌套类拥有访问private的权限)

定义为protected的字段和方法可以被子类访问,以及子类的子类

包作用域是指一个类允许访问同一个package的没有publicprivate修饰的class,以及没有publicprotectedprivate修饰的字段和方法

注意:包名必须完全一致,包没有父子关系

内部类

Inner Class除了有一个this指向它自己,还隐含地持有一个Outer Class实例,可以用Outer.this访问这个实例。所以,实例化一个Inner Class不能脱离Outer实例

还有一种定义Inner Class的方法,它不需要在Outer Class中明确地定义这个Class,而是在方法内部,通过匿名类(Anonymous Class)来定义

static修饰的内部类和Inner Class有很大的不同,它不再依附于Outer的实例,而是一个完全独立的类

classpath

classpath是JVM用到的一个环境变量,它用来指示JVM如何搜索class

JVM 需要知道,要加载一个类时,应当去哪里搜索它的 .class 文件

不推荐在系统环境变量中设置 classpath

建议在启动 JVM 时设置 classpath

java -cp .;C:workproject1in;C:shared abc.xyz.Hello

没有设置系统环境变量,也没有传入-cp参数,那么JVM默认的classpath.

注意不要把任何 Java 核心库添加到 classpath 中

jar 包可以将 package 组织的目录层级以及文件打成一个 jar 包,本质上是 zip

MANIFEST.MF是纯文本,可以指定Main-Class和其它信息。JVM会自动读取这个MANIFEST.MF文件。指定后可以直接启动一个 jar

java -jar hello.jar

可以用构建工具如 Maven 来打包

模块

模块的重要作用就是声明依赖关系

Java标准库已经由一个单一巨大的rt.jar分拆成了几十个模块,这些模块以.jmod扩展名标识

这些.jmod文件每一个都是一个模块,模块名就是文件名

src目录下多了一个module-info.java这个文件,这就是模块的描述文件

把bin目录下的所有class文件先打包成jar, 继续使用JDK自带的jmod命令把一个jar包转换成模块

原文地址:https://www.cnblogs.com/mollnn/p/14965968.html