Курс по java. Часть 3

Опять всем привет.
Как я и обещал начнем с исключений (try catch).
Это очень полезная фишка (такое есть в C++ и, если не ошибаюсь, в PHP).
Исключения очень полезны, когда какой либо объект не инициализировался или не может быть инициализирован. Как пример могу привести код:
            BufferedReader br=new BufferedReader(new FileReader(new File("D://test.txt"))); 
            newString=br.readLine(); 
            br.close();  
Что бы произошло, если бы файла test.txt небыло в этом месте, а исключение не стояло бы (при условии что пишем в IDE, которая не следит за исключениями (NetBeans и Eclipse следят за этим))?
Произошла бы ошибка, из-за которой приложение не отработало бы до конца.
В случае с try-catch при возникновении ошибки можно увидеть где произошла ошибка, причину.
Если после объявления функции написать «throw класс_исключения», то если будет ошибка функция не обратит на нее внимания, но если функция с throw вызвана в try-catch, то произойдет обработка исключения.
Думаю с этим более или менее разобрались. В примере будут и примеры исключений.
Перейдем к Thread. Это класс потоков (нитей). Многопоточность мы будем использовать в графическом интерфейсе, так что запоминаем.
Самые важные методы класса Thread — start (запускает новый поток параллельно выполнению программы), run (запускает новый поток, при этом программа ждет его завершения), stop (останавливает поток) и sleep(замораживает поток на указанное время (в миллисекундах))
Начиная с этой части вся информация по коду будет находиться внутри.
package hello;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Hello {
    private static Scanner scan;// эта переменная перенесена сюда, чтоб она была доступна из потока
    public static void main(String[] args){
        scan=new Scanner(System.in);
        Thread t=new Thread(new Runnable() {

            @Override
            public void run() {
                    try {
                        Thread.sleep(1000);// делаем задержку выполнения потока на 1 секунду
                    } catch (InterruptedException ex) {
                        Logger.getLogger(Hello.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    String File=scan.nextLine();
                    String Text=scan.nextLine();
                    try {
                        saveToFile(File, Text);// Функция с прописанным throw
                    } catch (IOException ex) {
                        System.out.println("Ошибка");// вывод сообщения об ошибке
                        Logger.getLogger(Hello.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    System.out.println("Поток закончился");
            }
        });
        t.start();
        System.out.println("Начало");// это сообщение будет первым, т.к. в потоке задержка
    }
    
    private static void saveToFile(String File, String Text) throws IOException{
        BufferedWriter bw=new BufferedWriter(new FileWriter(new File(File)));
        bw.write(Text);
        bw.close();
    }
}


URL: https://visavi.net/articles/356