## 命名冲突与代码格式
在这一个视频,我们会讲到
- 命名冲突
- 使用多个相同命名的类
- 通配符导入
- 考试的代码格式
等下会演示考试过程中一些代码格式,让你更加迷惑,会选错答案的情况。
所有首先,我们先创建一个新的Project
命名为:ConfictExample,然后跟往常一样,创建一个新的包,我命名为 io.zwt
在这个包里面我会创建一个新的类,命名为 ConflictExample
在JDK里面,有些类具有相同的名字,但是在不同的包里面。所以这就是为什么包是很重要的。当你导入了包,就不需要指明全部的类名称。 类的全程是指 包名接着类名咯。
首先我会创建一个main方法,psvm,然后使用一下Date这个类,在java.util.Date这个类。如果我们导入这个类,就不需要每次都写这么长的类名了。 使用包名,这样在整个JDK范围内,类的名称就不需要唯一了。
不然的话,这情况就不好了,例如别人创建了一个Car类,然后你就不可以创建这样的类了。
使用包,也意味着,你可以在不同的地方导入类,例如有java.util.Date,同时也有 java.sql.Date
```java
package io.zwt;
import java.util.Date;
public class ConflictExample {
public static void main(String[] args) {
Date date;
java.sql.Date sqlDate;
}
}
```
这样就可以使用两个不同的包里面的Date类了。
现在让我们,改一下 import 语句。
```java
package io.zwt;
import java.util.*;
import java.sql.Date;
public class ConflictExample {
public static void main(String[] args) {
Date date; //变成了 java.sql.Date;
java.sql.Date sqlDate;
}
}
```
这时候,`date`的类型就变成了 `java.sql.Date`。 所以没有星号的是优先级更高的。
如果两个导入语句都替换为星号,那么就会有编译错误。提示命名冲突。
如果同时用到两个同名的类,最清楚的方式就是都使用完全限定名了,fully qualified name。
这样的话,导入语句就变成没有必要了。
没有有到的导入语句,可以使用 Ctrl + Shift + O 优化导入。
还有一个称为“默认包”的包,也就是直接在src目录下保存类。这样就算是放在默认包里了。
这种情况下,我们没有办法导入默认包的类。例如在src目录下创建一个 Main.java
然后想在 io.zwt.ConflictExample 这个类里面使用 Main这个类,是没有办法导入的。
所以一般情况下, 就好就是为项目创建一个顶级包,然后在里边写代码。
在考试里面,很多时候会省略导入语句,然后代码行数就不是从第一行开始了。默认正确地导入了所需要的类。
如果代码行数从第一行开始,那么你就需要看看有没有正确的import 语句了。
很多时候会看到一些代码挤在同一行,为了节省空间,以及迷惑考试者。
例如,有时候你会看到像这样的代码:
```java
public void checkEmpty(List list) {
if (list.isEmpty()) { System.out.println("empty");
} else { System.out.println("not empty");
}}
```
考试你看到这样的代码,如果怕看不清楚,可以试着在纸上重写一遍。
对于上面的代码,问题是,"Does this code compile?"
这样的代码片段可能从6、7行开始,然后假设该导入的类都已经导入了。
然后也可能问你,这段代码输出的结果是什么。
在IntelliJ IDEA可以按下 Ctrl + Alt + L 这样会格式化代码。
这样格式好看了,就可以更容易看懂代码的逻辑了。
```java
public void checkEmpty(List list) {
if (list.isEmpty()) {
System.out.println("empty");
} else {
System.out.println("not empty");
}
}
```
再举个考试可能出现的代码的例子:
```java
public class LineNumbers {
public void checkEmpty(List list) {
if (list.isEmpty()) { System.out.println("empty");
} else { System.out.println("not empty");
} } }
```
在IntelliJ IDEA可以按下 Ctrl + Alt + L 这样会格式化代码。
考试的时候,预计会看到格式很丑的代码,目的是为了让你更难看懂代码。如果你觉得代码能够通过编译,那么你可以在纸上重写一遍代码,以便更容易看懂。
- 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记忆卡片