Почему restart() должен быть в try() в этой Java-программе?
Не могли бы вы одолжить мне немного своей мудрости?
Сейчас я ищу причину, по которой метод restart() в [add word mode] должен быть в разделе finally{}, но я до сих пор не понимаю, почему. На данный момент оба способа могут быть скомпилированы либо я помещаю restart() в try{}, либо finally {}. Дело в том, что если я введу его в try{}, эта программа не покажет мне слово, которое я ввел в режиме [добавить слово], когда я выберу [режим просмотра всех слов]. Если я добавлю его в И наконец {}, это будет работать хорошо, но я также беспокоюсь, потому что я узнал, что раздел наконец {} предназначен только для метода close ()... Но он работает хорошо! Зачем?
Еще один маленький вопрос: если я закрою BufferedReader (br) в секции finally {} в addword(), то будет показано сообщение restart() и start(). После их показа, программа заканчивается, не принимая мой ввод с клавиатуры. Зачем?
import java.util.Scanner;
import java.io.*;
import java.io.IOException;
public class EngDic{
public static void main(String[] args) {
try{
Dictionary1 dic1 = new Dictionary1();
dic1.start();
}
catch(IOException e){}
}
}
class Dictionary1 {
FileWriter write_target= null;
FileReader read_target= null;
BufferedReader br = null;
BufferedWriter bw= null;
void start() throws IOException {
System.out.println("Welcome!");
System.out.println("What are you going to do?");
System.out.println("1.add word 2.search word 3. look all words 4.exit");
int sel = System.in.read()-48; //my input through keyboard will be set as sel.
System.in.skip(2);
switch (sel){
case 1:addword();
break;
case 2:searchword();
break;
case 3:lookall();
break;
case 4:System.exit(0);
break;
default:
System.out.println("no such number!");
System.exit(0);
}
}
void addword(){
try{
br = new BufferedReader(new InputStreamReader(System.in));
write_target = new FileWriter("voca.txt",true);
bw= new BufferedWriter(write_target);
System.out.println("[add word mode] has been selected. Please enter the words");
System.out.println("CTR+Z means the end of input!");
String line;
while ((line=br.readLine()) !=null){
System.out.println(line);
bw.write(line);
bw.newLine();
}
//restart();
}
catch(IOException e){
System.out.println("-----error reason ------");
e.printStackTrace();
System.out.println("-----error reason ------");
}
finally {
//if (br != null) try{br.close();} catch(IOException e){}
if (bw != null) try{bw.close();} catch(IOException e){}
restart();
}
}
void searchword(){
try{
System.out.println("[search word mode] has been selected. Please enter the words");
read_target= new FileReader("voca.txt");
br= new BufferedReader(read_target);
Scanner input = new Scanner(System.in);
String search_word =input.nextLine();
String line;
boolean flag = false;
while ((line=br.readLine()) !=null){
String[] searched = line.split("/");
if (searched[0].equals(search_word)){
System.out.println("the meaning of the word you typed is " + searched[1]);
flag = true;
}
}
if (!(flag)){
System.out.println("There's no such word!");
}
restart();
}
catch(IOException e){
System.out.println("-----error------");
e.printStackTrace();
System.out.println("-----error------");
}
finally {
//if (br != null) try{br.close();} catch(IOException e){}
if (bw !=null) try{bw.close();} catch(IOException e){}
}
}
/*look all words mode method */
void lookall() {
System.out.println("[look all words mode] has been selected. Please enter the words");
try{
read_target= new FileReader("voca.txt");
br= new BufferedReader(read_target);
String line;
while ((line=br.readLine()) !=null){
System.out.println(line);
}
restart();
}
catch(IOException e){
System.out.println("-----error------");
e.printStackTrace();
System.out.println("-----error------");
}
finally {
//if (br != null) try{br.close();} catch(IOException e){}
if (bw !=null) try{bw.close();} catch(IOException e){}
}
}
void restart(){
try{
System.out.println("----------restart--------------");
start();
}
catch (IOException e){}
}
}