接口

比抽象类还要抽象,没有实例字段,只有方法,方法类型默认为 public abstract。接口也可以存在继承关系。

Java 中接口特指 interface,表示一个接口类型和一组方法签名,而编程接口泛指接口规范,如方法签名,数据格式,网络协议。

default 方法

用 default 修饰的接口方法,可以不必在子类中实现,可以在需要时进行覆写。这样做的好处是,开发后期对接口添加额外方法时,不必修改所有所有子类,按需覆写即可。

静态字段和静态方法

静态字段属于所有实例“共享”的字段,实际上是属于class的字段;

调用静态方法不需要实例,无法访问this,但可以访问静态字段和其他静态方法;

静态方法常用于工具类和辅助方法。

包可以解决类型冲突。

位于同一个包的类,可以访问包作用域的字段和方法。不用 public、protected、private 修饰(default 即不加修饰符)的字段和方法就是包作用域。

public 可以跨包访问,private 不可访问,protected 介于两者之间。

import

导入其他包下的类。完整类名 = 包名 + 类名,若类名为 *,表示导入该包下的所有类。

编译器自动导入的包:

  • 默认自动 import 当前 package 的其他 class
  • 默认自动 import java.lang.*

包名不存在父子关系,相同目录结构下的包需要单独导入。比如 java.langjava.lang.reflect 是不同的包,前者自动导入,使用后者仍需要手动导入。

引入不同包下相同类名的类,只能导入一个类,其他同名类需要使用完整类名进行调用。所以要注意不要和 java.lang 包的类重名。

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

只要在同一个包,就可以访问 package 权限的 classfieldmethod

一个 .java 文件只能包含一个 public 类,但可以包含多个非 public 类。如果有 public 类,文件名必须和 public 类的名字相同。

Java 内建的访问权限包括 publicprotectedprivate package (默认不加修饰符)权限。

classpath 和 jar

classpath 表示类字节码存储路径,也是执行 java 程序的查找路径。

不要把任何 Java 核心库添加到 classpath 中!JVM根本不依赖 classpath 加载核心库!

jar 包本质上是可执行字节码目录的一个 zip 格式压缩包,把 package 组织的目录层级,以及各个目录下的所有文件(包括 .class 文件和其他文件)都打成一个 jar 文件,方便下载和使用。

不建议设置系统变量 classpath,默认为 . 表示当前目录。在 IDE 中运行 Java 程序,IDE 自动传入的 -cp 参数是当前工程的 bin 目录和引入的 jar 包。

MANIFEST.MF 文件可以提供 jar 包的信息,如 Main-Class,这样可以直接运行 jar 包。

JVM 自带的 Java 标准库,实际上也是以 jar 文件形式存放的,这个文件叫 rt.jar

摘自:Java 教程 - 廖雪峰