## 命名沖突與代碼格式
在這一個視頻,我們會講到
- 命名沖突
- 使用多個相同命名的類
- 通配符導入
- 考試的代碼格式
等下會演示考試過程中一些代碼格式,讓你更加迷惑,會選錯答案的情況。
所有首先,我們先創建一個新的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記憶卡片