javaの例外処理について理解できないのですが、例外処理について書く理由、役割といったのがいまいちわかりません。

class ThreadX extends Thread{
   public void run(){
       try{
           while(true){
              Thread.sleep(2000);
              System.out.println("hello");
           }
       }
       catch(InterruptedException ex){
           ex.printStackTrace();
       }
   }
}
class ThreadDemo1{
    public static void main(String args[]){
        ThreadX tx = new ThreadX();
        tx.start();
    }
}

といったコードを実行したところ2000ミリ秒まってからhelloというのがでますが、

  class ThreadX extends Thread{
    public void run(){
           while(true){
               Thread.sleep(2000);
               System.out.println("hello");
           }
       }
   }
   class ThreadDemo1{
       public static void main(String args[]){
          ThreadX tx = new ThreadX();
           tx.start();
      }
   }

として実行しようとしましたが例外処理コード(try/catch)を書かないとできませんといわれました。
実際に例外処理を行っているのかと考えてみて正しいかわかりませんが

class ThreadX extends Thread{
    public void run(){
        try{
            while(true){
                Thread.sleep(2000);
                System.out.println("hello");
            }
        }
        catch(InterruptedException ex){
            System.out.println("Bye");
            ex.printStackTrace();
        }
    }
}
class ThreadDemo1{
    public static void main(String args[]){
        ThreadX tx = new ThreadX();
        tx.start();
    }
}

と System.out.println("Bye");を記述してみて例外処理が行われるならBYEが表示されると考えやってみたのですが表示されません。
これは例外処理が行われてないため表示されなかったのでしょうか。それともやり方が間違っていたのでしょうか。また例外処理が行われていなかったのにどうして必要となのか。
また 

class sample1{
    public static void main(String args[]){
        int i = 0;
        int s = 0;
        System.out.println("S / i = " + i / s);
    }
}

こちらは実行できるのにエラーがでます。0÷0 といったものができないためでるのはわかりますが明らかなエラープログラムにもかかわらず例外処理プログラム?を書けといわれませんでした。
また書かれているコードなどをみると例外処理はIf関数のようなもののようにみえたのですがそれと似たものととらえてもいいのでしょうか。
よろしくお願い致します。