Почему 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){}
}

}

0 ответов

Другие вопросы по тегам