Java 入门 - 进阶知识
适合有其他语言基础的人快速入门
包
Java 中,使用 package
来解决类名冲突,一个类总是属于某个包,类名(比如 Person
)只是一个简写,真正的完整类名是 包名.类名
例如:JDK 的 Arrays
类存放在包 java.util
下面,因此完整类名是 java.util.Arrays
在定义 class
的时候,我们需要在第一行声明这个 class
属于哪个包
package pany; // 申明包名 pany
public class Person {
}
包作用域
位于同一个包的类,可以访问包作用域的字段和方法。不用 public
、protected
、private
修饰的字段和方法就是包作用域
package pany;
public class Person {
// 包作用域
void hello() {
System.out.println("hello");
}
}
package pany;
public class Main {
public static void main(String[] args) {
Person p = new Person();
p.hello(); // 可以调用,因为 Main 和 Person 在同一个包
}
}
导入类
第一种,直接写出完整类名
java.util.Arrays arrays = new java.util.Arrays();
第二种写法是用 import
语句
// 先导入完整类名
import java.util.Arrays;
// 然后写简单类名
Arrays arrays = new Arrays();
最佳实践
- 推荐写包名
- 如果不确定是否需要
public
,就不声明为public
,即尽可能少地暴露对外的字段和方法 - 把方法定义为
包作用域
有助于测试,因为测试类和被测试类只要位于同一个包
,测试代码就可以访问被测试类的包作用域方法。 - 一个
.java
文件只能包含一个public
类,但可以包含多个非public
类。如果有public
类,文件名必须和public
类的名字相同。
异常处理
- Java 使用异常来表示错误,并通过
try ... catch
捕获异常 - Java 的异常是
class
,并且从Throwable
继承 Error
是无需捕获的严重错误,Exception
是应该捕获的可处理的错误RuntimeException
无需强制捕获,非RuntimeException
(Checked Exception)需强制捕获,或者用throws
声明- 不推荐捕获了异常但不进行任何处理
- 当我们在代码中需要抛出异常时,尽量使用 JDK 已定义的异常类型,其次再考虑自定义异常
日志
Java 标准库内置了日志包 java.util.logging
日志级别,从严重到普通:
- SEVERE
- WARNING
- INFO(默认级别,默认级别以下的日志,不会被打印出来)
- CONFIG
- FINE
- FINER
- FINEST
但是它不好用,大家一般使用三方的 Commons Logging
+ Log4j
或 SLF4J
+ Logback
注解
注解是放在 Java 源码的类、方法、字段、参数前的一种特殊"注释"。注释会被编译器直接忽略,注解则可以被编译器打包进入 class 文件,因此,注解是一种用作标注的"元数据"。
Java 的注解可以分为三类
第一类是由编译器使用的注解,例如:
@Override
:让编译器检查该方法是否正确地实现了覆写@SuppressWarnings
:告诉编译器忽略此处代码产生的警告
这类注解不会被编译进入 .class
文件,它们在编译后就被编译器扔掉了。
第二类是由工具处理 .class
文件使用的注解,比如有些工具会在加载 class 的时候,对 class 做动态修改,实现一些特殊的功能。这类注解会被编译进入 .class
文件,但加载结束后并不会存在于内存中。这类注解只被一些底层库使用,一般我们不必自己处理。
第三类是在程序运行期能够读取的注解,它们在加载后一直存在于 JVM 中,这也是最常用的注解。例如:一个配置了 @PostConstruct
的方法会在调用构造方法后自动被调用(这是 Java 代码读取该注解实现的功能,JVM 并不会识别该注解)
单元测试
单元测试就是针对最小的功能单元编写测试代码。Java 程序最小的功能单元是方法,因此对 Java 程序进行单元测试就是针对单个 Java 方法的测试。
常用三方库 JUnit
进行单元测试
End
- 上一篇:Java 入门 - 面向对象
- 下一篇:Java 入门 - 工程基础
该系列的每篇文章都收录在本专栏《Java 后端从 0 到 1》
转载自:https://juejin.cn/post/7238431321870401591