Курс по 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