title: How to stop java method execution after throwing exception inside of 'inner' method?
body: <p>I wrote an example which depicts my issue.
  I have a simple exception:</p>
  
  <pre class="lang-java prettyprint-override"><code>public class TryToSpeakException extends RuntimeException {
  
      public TryToSpeakException(String message) {
          super(message);
      }
  }
  </code></pre>
  
  <p>Then I have a chain of methods that invoke each other one by one:</p>
  
  <pre class="lang-java prettyprint-override"><code>public class TryToSpeak {
  
      public static void speakToPerson1() {
          throw new TryToSpeakException("Person 1 don't wanna speak to anyone.");
      }
  
      public static void speakToPerson2() {
          try {
              speakToPerson1();
          } catch (Exception e) {
              System.out.println("speakToPerson2 caused exception");
              e.printStackTrace();
          }
      }
  
      public static void speakToPerson3() {
          try {
              speakToPerson2();
  
          } catch (Exception e) {
              System.out.println("speakToPerson3 caused exception");
              e.printStackTrace();
          }
      }
  
      static void keepSilentToPerson() {
          System.out.println("Keeping silent to person 1");
      }
  
      public static void communicate() {
          try {
              speakToPerson3();
  
              keepSilentToPerson(); // Why it reaches this part?
          } catch (Exception e) {
              System.out.println("Communication exception.");
              e.printStackTrace();
          }
      }
  
      public static void main(String[] args) {
          communicate();
      }
  }
  </code></pre>
  
  <p>The method from the very 'bottom' throws an exception. In method <code>communicate()</code> after invocation of method <code>speakToPerson3()</code> the execution keeps going.
  What i need - is to Stop execution, so that invocation of method <code>keepSilentToPerson()</code> is never reached and gives me the message <code>"Communication exception."</code>.</p>
  
  <p>This is what i get in console now:</p>
  
  <pre><code>speakToPerson2 caused exception
  exceptions.TryToSpeakException: Person 1 don't wanna speak to anyone.
      at exceptions.TryToSpeak.speakToPerson1(TryToSpeak.java:7)
      at exceptions.TryToSpeak.speakToPerson2(TryToSpeak.java:12)
      at exceptions.TryToSpeak.speakToPerson3(TryToSpeak.java:22)
      at exceptions.TryToSpeak.communicate(TryToSpeak.java:36)
      at exceptions.TryToSpeak.main(TryToSpeak.java:46)
  Keeping silent to person 1
  </code></pre>
  
  <p>But if i call <code>speakToPerson2()</code> from my Main method like this:</p>
  
  <pre><code>public static void speakToPerson1() {
      throw new TryToSpeakException("Person 1 don't wanna speak to anyone.");
  }
  
  public static void speakToPerson2() {
      try {
          speakToPerson1();
  
          keepSilentToPerson();
      } catch (Exception e) {
          System.out.println("speakToPerson2 caused exception");
          e.printStackTrace();
      }
  }
  
  static void keepSilentToPerson() {
      System.out.println("Keeping silent to person 1");
  }
  
  public static void main(String[] args) {
      speakToPerson2();
  }
  </code></pre>
  
  <p>I get an obvious result:</p>
  
  <pre><code>    speakToPerson2 caused exception
      exceptions.TryToSpeakException: Person 1 don't wanna speak to anyone.
      at exceptions.TryToSpeak.speakToPerson1(TryToSpeak.java:7)
      at exceptions.TryToSpeak.speakToPerson2(TryToSpeak.java:12)
      at exceptions.TryToSpeak.main(TryToSpeak.java:26)
  </code></pre>
  
  <p><code>keepSilentToPerson()</code> is not reached.</p>
  
  <p>What am i doing wrong?</p>