接口

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

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

default 方法

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

静态字段和静态方法

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

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

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

包

包可以解决类型冲突。

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

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

import

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

编译器自动导入的包:

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

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

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

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

只要在同一个包,就可以访问 package 权限的 class、field 和 method。

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

Java 内建的访问权限包括 public、protected、private 和 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 教程 - 廖雪峰

文章目录