Scanner為什么前面要加private static
package?com.imooc.proj_1;
import?java.util.Scanner;
public?class?BookManagerEasy?{
private?static?Scanner?console?=?new?Scanner(System.in);
public?static?void?main(String[]?args)?{
//定義”圖書“數組
String[]?books?=?{?"C語言",?"數據結構",?"匯編語言",?"高數",?"大學語文",?"毛概"?};
while?(true)?{
System.out.println("輸入命令:1-按照名稱查找圖書;2-按照序號查找圖書");
String?book;
try?{
//取得整型命令
int?command?=?inputCommand();
//根據不同命令值,進行不同操作
switch?(command)?{
case?1://按照圖書名稱選擇圖書
book?=?getBookByName(books);
System.out.println("book:"?+?book);
break;
case?2://按照圖書序號(數組下標)選擇圖書
book?=?getBookByNumber(books);
System.out.println("book:"?+?book);
break;
case?-1://返回值為-1,說明輸入有誤
System.out.println("命令輸入錯誤!請根據提示輸入數字命令!");
continue;
default://其他值的命令均認為是錯誤命令
System.out.println("命令輸入錯誤!");
continue;
}
break;//退出程序
}?catch?(Exception?bne)?{
//捕獲”圖書不存在異常“時,要求重新輸入命令
System.out.println(bne.getMessage());
continue;
}?
}
}
//按照圖書名稱查詢圖書
private?static?String?getBookByName(String[]?books)
throws?Exception?{
System.out.println("輸入圖書名稱:");
//獲取輸入的圖書名稱
String?name?=?console.next();
for?(int?i?=?0;?i?<?books.length;?i++)?{
if?(name.equals(books[i]))
//輸入的名稱與某一圖書名稱匹配,返回該圖書
return?books[i];
}
//若無匹配,拋出”圖書不存在異?!? throw?new?Exception("圖書不存在!");
}
//根據圖書序號(數組下標)查詢圖書
private?static?String?getBookByNumber(String[]?books)
throws?Exception?{
while?(true)?{
System.out.println("輸入圖書序號:");
try?{
//獲取輸入的圖書序號(數組下標)
int?index?=?inputCommand();
//若返回值為-1
if(index?==?-1){
System.out.println("命令輸入錯誤!請根據提示輸入數字命令!");
continue;
}
//若不出現”數組下標越界異常“,則返回相應位置的圖書
String?book?=?books[index];
return?book;
}?catch?(ArrayIndexOutOfBoundsException?e)?{
//輸入的序號不存在(引發”數組下標越界異常“),則拋出”圖書不存在異?!? Exception?bookNotExists?=?new?Exception("圖書不存在!");
bookNotExists.initCause(e);
throw?bookNotExists;
}
}
}
//從控制臺輸入命令,用于輸入命令和輸入圖書序號
private?static?int?inputCommand(){
int?command;
try?{
command?=?console.nextInt();
return?command;
}?catch?(Exception?e)?{
//若輸入字符型或者字符串,則拋出異常,捕獲該異常,拋出”錯誤命令異常“
console?=?new?Scanner(System.in);
//返回-1
return?-1;
}
}
}在代碼中對Scanner進行了private static的聲明,這個是什么原因呢,用public??static可以嗎?小白求教,謝謝
2016-08-03
private?static?int?inputCommand()方法中引用了private?static?Scanner?console?=?new?Scanner(System.in);中的console對象。inputCommand()方法是private?static修飾的故Scanner前面也要加!
2019-07-16
inputCommand()方法用static修飾 即此方法為靜態方法 而Java中靜態方法中不能調用非靜態變量或方法 所以要使用Scanner的引用對象時 應將其申明為靜態 而private確定此變量在此類可見 而不能用于其他類 而public不僅僅在此類中可見 在其他地方也可見 在此處用public也可以
2016-11-30
請問為什么inputCommand()方法中,在捕獲異常時,要再寫一個console = new Scanner(System.in);
我發現如果不寫的話將會陷入死循環,但是想不通為什么不寫,請賜教。
2016-08-03
可以,public是一個全局的,他可以在其它類里面去調用你這個類里定義的東西,private是一個表示私有的表示符,只允許你在這個類里面去調用
2016-08-03
應該是可以的? 對內都是可見的? 所以用public 和private區別不大