# 静态导入(static imports)
在本节,你将会学习到关于静态导入的知识。如何使用静态导入。还有会看到一些例子,如何到如自定义的静态成员。所以让我们开始吧。
我已经创建了一个Project命名为 StaticImportsExample还有一些包和新的类。你可以暂停视频,先创建一个project。
或者也可以使用旧的project,然后每节课创建新的类。
### 作用
所以静态导入(static import)是用来导入静态成员的。通常这些成员会是常量(constant)或者是方法(method) 。 我们会以Math类作为例子研究一下。 静态导入的主要作用是,你不用指明类名。也就是那个常量或者是方法所在的类,不需要指明。 当你使用一些静态方法,或者是静态变量。有时候静态变量会过度使用。尤其是在大型应用。太多静态导入的话,有时候容易忘记某个变量或方法是导入自哪个类的。
那么让我们打印一些Math方法里面的常量,你不用担心 `static` 关键字,这个后面我们会详细讲解的。
首先,我们创建以下代码:
```java
package io.zwt;
public class StaticImportsExample {
public static void main(String[] args) {
int min = Math.min(5, 7);
System.out.println("min= ", min);
System.out.println(Math.PI);
}
}
```
上面的两个println 语句就打印了两个整数其中较小值和常量 $\pi$ 的值。
接下来,我们开始使用静态导入语句
```java
package io.zwt;
import static java.lang.Math.*;
public class StaticImportsExample {
public static void main(String[] args) {
int min = Math.min(5, 7);
System.out.println("min= ", min);
System.out.println(Math.PI);
}
}
```
这时候,import 语句会变灰色,因为没有用到它。
我们可以移除min方法前的Math. 这时候我们就有使用min方法,import 语句起作用了。
```java
package io.zwt;
import static java.lang.Math.*;
public class StaticImportsExample {
public static void main(String[] args) {
int min = min(5, 7);
System.out.println("min= ", min);
System.out.println(PI);
}
}
```
对于PI这个常量,也做同样的操作。
这样每次我们要使用Math类里面的某个静态方法,或者是常量,就不需要在前面写 Math. 了。
如果我们使用 Ctrl + Shift + O 优化导入,那么 IntelliJ 会将原理的星号导入,变成两个静态导入。就像下面这样:
```java
package io.zwt;
import static java.lang.Math.PI;
import static java.lang.Math.min;
public class StaticImportsExample {
public static void main(String[] args) {
int min = min(5, 7);
System.out.println("min= ", min);
System.out.println(PI);
}
}
```
因为这个Math类里面还有很多的静态方法,我们不需要导入所有的静态方法,只需要导入用到的。
### System.out
另一个使用静态导入的例子是 System.out.
每次想要打印一些内容的时候,不需要总是输入System.out 只需要敲 out.
注意到这个 out 是 static final 类型的变量,定义在 System 这个类里面。
所以如果我们再添加一个静态导入语句(然后移除 System.)
```java
package io.zwt;
import static java.lang.Math.PI;
import static java.lang.Math.min;
import static java.lang.System.out;
public class StaticImportsExample {
public static void main(String[] args) {
int min = min(5, 7);
out.println("min= ", min);
out.println(PI);
}
}
```
关于静态导入的考察点,主要是在是否正确地使用了静态导入语句,静态导入语句主要是用来导入静态成员。然后普通的导入语句是用来导入类的。 静态成员可以是变量或者是方法。
当使用普通的import 语句,你不可以导入两个同名的类,同样的规则也适用于静态导入 static import。你不能导入两个同名的变量,或者两个同名的方法。
现在让我们创建另外一个类,那么我就创建一个新的Java 类,命名为 Config 在这个类里面,我会创建一些静态常量。例如
```java
package io.zwt;
public class Config {
public static final String NAME = "myName";
public static final int MAX_COLUMN_COUNT = 5;
public static void printConfig() {
System.out.println("name= " + NAME + " columnCount= " + MAX_COLUMN_COUNT);
}
}
```
静态方法可以不用创建实例,直接调用。
现在我们回到 StaticImportsExample 这个类,开始使用静态导入我们的Config类里边的静态成员。
```java
package io.zwt;
import static java.lang.Math.PI;
import static java.lang.Math.min;
import static java.lang.System.out;
import static io.zwt.Config.*;
public class StaticImportsExample {
public static void main(String[] args) {
int min = min(5, 7);
out.println("min= ", min);
out.println(PI);
// 静态导入了这个方法
printConfig();
// 也可以打印静态变量
out.println("name= " + NAME);
out.println("columnCount= " + MAX_COLUMN_COUNT);
}
}
```
在大型程序里边,最好不要导入太多静态变量和静态方法。因为太多了很难清楚这些是从哪里导入的。
- 0.考试大纲解读
- 1.内容简介与环境搭建
- 1.1内容简介
- 1.2.在Windows安装JDK8
- 2.Java基础
- 2.1.Java类结构
- 2.2.main方法
- 2.3.注释
- 2.4.package与import
- 2.5.命名冲突与代码格式
- 2.6.静态导入
- 2.7.理解原始数据类型
- 2.8.整数型原始类型
- 2.9.小数型原始类型
- 2.10.原始char与boolean
- 2.11.声明和初始化变量
- 2.12.理解原始类型变量的默认初始化
- 2.13.变量作用范围
- 2.14.类里面元素的顺序
- 2.15.理解null
- 2.16.原始类型的包装类
- 2.17.Java的好处
- 2.18.考试题目举例
- 3.操作符
- 3.1.理解操作符
- 3.2.算术操作符
- 3.3.数值类型提升以及类型转换
- 3.4.一元操作符第一部分
- 3.5.一元操作符第二部分
- 3.6.赋值运算符
- 3.7.复合赋值运算符
- 3.8.关系操作符
- 3.9.关系操作符
- 3.10.相等操作符
- 3.11.理解 == 与 equals()方法
- 3.12.字符算术运算
- 3.13.考试题目举例
- 4.基本程序控制流
- 4.1.if else语句
- 4.2.三元操作符
- 4.3.switch语句
- 4.4.while循环
- 4.5.do-while循环
- 4.6.for循环
- 4.7.考试题目举例
- 5.理解字符串类型
- 5.1.创建字符串以及字符串连接
- 5.2.理解不可变性
- 5.3.字符串常量池和字符串相等
- 5.4.String类的方法第一部分
- 5.5.String类的方法第二部分
- 5.6.方法串联
- 5.7.使用StringBuilder类
- 5.8.StringBuilder类的方法
- 5.9.理解相等性
- 5.10.考试题目举例
- 6.数组
- 6.1.理解数组
- 6.2.使用数组
- 6.3.数组常见的问题
- 6.4.For-each循环
- 6.5.break语句和标签
- 6.6.continue语句
- 6.7.数据排序
- 6.8.搜索数组
- 6.9.可变数量参数
- 6.10多维数组
- 6.11嵌套循环
- 6.12考试题目举例
- 7.ArrayList
- 7.1.理解ArrayList
- 7.2.ArrayList的方法第一部分
- 7.3.ArrayList的方法第二部分
- 7.4.在ArrayList使用包装类
- 7.5.ArrayList与数组之间的转换
- 7.6.ArrayList元素排序
- 7.7.搜索ArrayList
- 7.8.遍历List第一部分
- 7.9.遍历List第二部分
- 7.10.考试题目举例
- 8.方法
- 8.1.设计一个方法
- 8.2.方法的返回类型
- 8.3.方法的参数列表
- 8.4.带有数量可变参数的方法
- 8.5.访问修饰符
- 8.6.静态方法和字段
- 8.7.使用静态方法和字段第一部分
- 8.8.使用静态方法和字段第二部分
- 8.9.final方法
- 8.10.静态初始化
- 8.11.在方法之间传输数据
- 8.12.方法的返回数据
- 8.13.重载方法
- 8.14.考试题目举例
- 9.类设计
- 9.1.类的构造函数
- 9.2.默认构造函数
- 9.3.构造方法重载
- 9.4.this 与 this()的区别
- 9.5.初始化的顺序
- 9.6.数据封装
- 9.7.不可变类
- 9.8.类与继承第一部分
- 9.9.类与继承第二部分
- 9.10方法重写
- 9.11.super 与 super()的区别
- 9.12.重载与重写的区别
- 9.13.抽象类
- 9.14.抽象方法
- 9.15.创建接口
- 9.16.实现接口
- 9.17.接口的默认方法
- 9.18.接口的静态方法
- 9.19.抽象类与接口的区别
- 9.20.多态
- 9.21.虚方法
- 9.22.参数多态
- 9.23.考试题目举例
- 10.Java 8的日期和时间API
- 10.1.创建日期与时间
- 10.2.使用日期与时间
- 10.3.Periods
- 10.4.格式化日期和时间
- 10.5.解释日期和时间
- 10.6.考试题目举例
- 11.异常处理
- 11.1.理解异常处理
- 11.2.Checked 与 Unchecked 异常的区别
- 11.3.处理异常
- 11.4.使用finally语句块
- 11.5.捕获不同的异常
- 11.6.return 和 finally块
- 11.7.抛出异常的方法
- 11.8.考试题目举例
- 12.简单的Lambda表达式
- 12.1.理解Lambda
- 12.2.使用Lambda
- 12.3.Predicates
- 12.4.考试问题举例
- 13.福利
- 13.1.Anki记忆卡片