<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>コンパイルエラー | シノベース</title>
	<atom:link href="https://renewal.shinoarchive.com/tag/%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%82%A8%E3%83%A9%E3%83%BC/feed/" rel="self" type="application/rss+xml" />
	<link>https://renewal.shinoarchive.com</link>
	<description>遊びも、学びも、全力で。</description>
	<lastBuildDate>Wed, 04 Mar 2026 00:07:55 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Javaの「コンパイルエラー」と「実行時エラー」の違いと対処法を解説！</title>
		<link>https://renewal.shinoarchive.com/java-error-exception/</link>
					<comments>https://renewal.shinoarchive.com/java-error-exception/#respond</comments>
		
		<dc:creator><![CDATA[シノ]]></dc:creator>
		<pubDate>Mon, 11 Dec 2023 09:19:22 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[Exception]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[RuntimeException]]></category>
		<category><![CDATA[コンパイルエラー]]></category>
		<category><![CDATA[実行時エラー]]></category>
		<guid isPermaLink="false">https://renewal.shinoarchive.com/?p=646</guid>

					<description><![CDATA[Java言語における「コンパイルエラー」と「実行時エラー」の違いと、エラーメッセージの見方を解説します。複雑で難しいので、一個一個落ち着いて追っていきましょう。]]></description>
										<content:encoded><![CDATA[
<p>プログラミングをするうえで、<strong>エラーとの格闘</strong>は避けては通れません。</p>



<p>しかし、Javaのエラーは色々あり、その対処方法も様々…</p>



<p><span style="text-decoration: underline;">Javaそのものの仕組みが絡む部分</span>もあり、私もかなり苦戦した部分です。</p>



<p><br></p>



<p>そこで、今回は<strong>Javaのエラーまわりを解説</strong>していきましょう。</p>



<p>タイトルにも入れた「<strong>コンパイルエラー</strong>」、「<strong>実行時エラー</strong>」について解説していきます。</p>



<p>それぞれの概要と具体例、出た時の対処方法まで見ていきましょう。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-1" checked><label class="toc-title" for="toc-checkbox-1">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">ひとことで結論：出るタイミングと、何に対してのエラーかが違う！</a></li><li><a href="#toc2" tabindex="0">Javaの仕組み -コンパイルと実行-</a></li><li><a href="#toc3" tabindex="0">コンパイルエラー</a><ol><li><a href="#toc4" tabindex="0">コンパイルエラーの内容と例</a></li><li><a href="#toc5" tabindex="0">コンパイルエラーの対処法</a></li></ol></li><li><a href="#toc6" tabindex="0">実行時エラー</a><ol><li><a href="#toc7" tabindex="0">実行時エラーの種類</a><ol><li><a href="#toc8" tabindex="0">Error</a></li><li><a href="#toc9" tabindex="0">非チェック例外(RuntimeException)</a></li><li><a href="#toc10" tabindex="0">チェック例外(Exception)</a></li></ol></li><li><a href="#toc11" tabindex="0">実行時エラーの対処法</a></li></ol></li><li><a href="#toc12" tabindex="0">まとめ</a></li><li><a href="#toc13" tabindex="0">独学が難しいと思ったら、スクールを検討しよう</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ひとことで結論：出るタイミングと、何に対してのエラーかが違う！</span></h2>



<p>先に、一言で結論を言ってしまいましょう。</p>



<p><strong>コンパイルエラー</strong>は、<span style="text-decoration: underline;">コンパイル時に出る、ソースコードの間違いに対して出るエラー</span>です。</p>



<p><strong>実行時エラー</strong>は、<span style="text-decoration: underline;">実行時に出る、プログラムの動作がおかしいことに対して出るエラー</span>です。</p>



<p>まずはこのおおまかな認識を頭に入れつつ、読み進めてもらえればと思います。</p>



<p><br></p>



<h2 class="wp-block-heading"><span id="toc2">Javaの仕組み -コンパイルと実行-</span></h2>



<p>まず、今回の話を理解するために必要な知識があるため、先に解説しておきましょう。</p>



<p>そもそもの、<span style="text-decoration: underline;">Javaで書かれたプログラムがどう動くか</span>のお話です。</p>



<p><br></p>



<p>eclipseなどのIDEを使わない場合、ソースコードを拡張子.javaで保存します。</p>



<p>これは、そのままでは機械が読み取れず、<span style="text-decoration: underline;">一度別の形式へ変換する</span>必要があります。</p>



<p>そこで、.javaファイルに対して、<code>javac</code>というコマンドで一度別のファイルを生成します。</p>



<p>その生成したファイルに対して<code>java</code>コマンドを使うことで、プログラムが実行できます。</p>



<p>このうち、<span style="text-decoration: underline;"><code>javac</code>で機械が読み取れるファイルを生成する</span>のが、<strong>コンパイル</strong>です。</p>



<p><br></p>



<p>内部でやっていることは大きく2つ。</p>



<p>1つは、人間にわかりやすいソースコードという形から、<strong>機械が実行できる形式に変換</strong>すること。</p>



<p>もう1つが、<strong>文法などのチェック</strong>を行うことです。</p>



<p>以上の内容を踏まえたうえで、早速本編に入りましょう。</p>



<p><br></p>



<h2 class="wp-block-heading"><span id="toc3">コンパイルエラー</span></h2>



<p>まず<strong>コンパイルエラー</strong>から。</p>



<p>読んで字のごとくですが、コンパイルエラーは<span style="text-decoration: underline;">コンパイルのときに発生するエラー</span>です。</p>



<p>コマンドであれば、上で書いた<code>javac</code>コマンドの実行時に発生します。</p>



<p>eclipseだと、エラーのところに赤線が引かれるのでわかりやすいですね。</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="433" height="180" src="https://renewal.shinoarchive.com/wp-content/uploads/2023/12/image.png" alt="" class="wp-image-662" srcset="https://renewal.shinoarchive.com/wp-content/uploads/2023/12/image.png 433w, https://renewal.shinoarchive.com/wp-content/uploads/2023/12/image-300x125.png 300w" sizes="(max-width: 433px) 100vw, 433px" /><figcaption class="wp-element-caption">eclipseでのコンパイルエラー</figcaption></figure>



<p><br></p>



<h3 class="wp-block-heading"><span id="toc4">コンパイルエラーの内容と例</span></h3>



<p>コンパイルエラーは、<span style="text-decoration: underline;">ソースコードの間違い…主に文法やスペルの間違い</span>です。</p>



<p>例えば…</p>



<ul class="wp-block-list">
<li>変数名を間違えた</li>



<li>何か必要な記述が抜けてしまった</li>



<li>カッコの対応がおかしい</li>
</ul>



<p>などで発生します。</p>



<p><br></p>



<p>具体例を挙げてみましょう、以下のソースコードを見てください。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-java" data-file="SampleClass.java" data-lang="Java" data-line="3"><code>public class SampleClass {
  public static void main (String[] args) {
    System.out.prnitln(&quot;Hello World!&quot;);
  }
}</code></pre></div>



<p>このソースコードの3行目、よく見るとスペルミスがありますね。</p>



<p><code>println</code>とすべきところが、<code>prnitln</code>となっています。</p>



<p>これでコンパイルすると…</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="コンパイル結果"><code>(実行コマンド)&gt; javac .\SampleClass.java
.\SampleClass.java:3: エラー: シンボルを見つけられません
        System.out.prnitln(&quot;Hello World!&quot;);
                  ^
  シンボル:   メソッド prnitln(String)
  場所: タイプPrintStreamの変数 out
エラー1個</code></pre></div>



<p>このように、メソッドがないよというコンパイルエラーが出てきます。</p>



<p><br></p>



<p>もう1つ、例を見てみましょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-java" data-file="SampleClass.java" data-lang="Java" data-line="6"><code>public class SampleClass {
  public static void main (String[] args) {
    printHello();
  }

  static printHello () {
    System.out.println(&quot;Hello World!&quot;);
  }
}</code></pre></div>



<p>今度は、メソッドの定義について、戻り値の型が抜けてます。</p>



<p>これでコンパイルすると…</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="コンパイル結果"><code>(実行コマンド)&gt; javac .\SampleClass.java
.\SampleClass.java:6: エラー: 無効なメソッド宣言です。戻り値の型が必要です。
    static printHello () {
           ^
エラー1個</code></pre></div>



<p>今度はそのまま、戻り値が無いよと教えてくれましたね。</p>



<p>これがコンパイルエラーです。</p>



<p><br></p>



<p>ちなみに、発展なのでここでは解説しませんが、<span style="text-decoration: underline;">コンパイルの中では様々な解析を行っています</span>。</p>



<p>気になったら<strong>字句解析</strong>、<strong>構文解析</strong>、<strong>意味解析</strong>などで調べてみましょう。</p>



<p><br></p>



<h3 class="wp-block-heading"><span id="toc5">コンパイルエラーの対処法</span></h3>



<p>では、コンパイルエラーが出たらどうするか。</p>



<p>基本的には、以下の流れで解決していきます。</p>



<ol class="wp-block-list">
<li>エラーが出たポイントと原因を確認する</li>



<li>本来、何が正しいかを判断する</li>



<li>正しい内容に直す</li>
</ol>



<p>先ほど挙げた具体例それぞれで、この対処法を実際にやってみましょう。</p>



<p><br></p>



<p>まず1つ目、ソースコードとエラー内容を再掲します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-java" data-file="SampleClass.java" data-lang="Java" data-line="3"><code>public class SampleClass {
  public static void main (String[] args) {
    System.out.prnitln(&quot;Hello World!&quot;);
  }
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="コンパイル結果"><code>(実行コマンド)&gt; javac .\SampleClass.java
.\SampleClass.java:3: エラー: シンボルを見つけられません
        System.out.prnitln(&quot;Hello World!&quot;);
                  ^
  シンボル:   メソッド prnitln(String)
  場所: タイプPrintStreamの変数 out
エラー1個</code></pre></div>



<p>コンパイルエラーの内容を見ると、<span style="text-decoration: underline;">先頭にファイル名と数字</span>があります。</p>



<p>この数字が、<strong>コンパイルエラーの出た行番号</strong>です。</p>



<p>今回、3行目で「<strong>シンボルが見つからない</strong>」という内容のエラーが出たよ、となります。</p>



<p>その詳細が下の部分で、<code>System.out</code>の次あたりが怪しいぞと提示してくれています。</p>



<p>実際、そこにスペルミスがあるので、しっかり確認して直しましょう。</p>



<p><br></p>



<p>2つ目、同じくソースコードと実行結果を再掲します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-java" data-file="SampleClass.java" data-lang="Java" data-line="6"><code>public class SampleClass {
  public static void main (String[] args) {
    printHello();
  }

  static printHello () {
    System.out.println(&quot;Hello World!&quot;);
  }
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="コンパイル結果"><code>(実行コマンド)&gt; javac .\SampleClass.java
.\SampleClass.java:6: エラー: 無効なメソッド宣言です。戻り値の型が必要です。
    static printHello () {
           ^
エラー1個</code></pre></div>



<p>まずは同じくファイル名とソースコードの何行目かを確認します。</p>



<p><span style="text-decoration: underline;">今回はダイレクトに問題点を指摘してくれている</span>ので、適切な戻り値の型を入れて修正完了です。</p>



<p><br></p>



<p>ちなみに、上の2つはエラーが出た部分を直す必要がありました。</p>



<p>しかし、<strong>エラーが出た個所が絶対に間違っているとは限りません</strong>。</p>



<p>例えば、以下の例を見てみましょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-java" data-file="SampleClass.java" data-lang="Java" data-line="3,6"><code>public class SampleClass {
  public static void main(String args[]){
    testMethod();
  }

  private static void testMethod(int n){
    // do something
  }
}</code></pre></div>



<p>メソッドの定義にはint型を1つ引数として受け取るよう記載していますが、呼び出しで引数を渡していません。</p>



<p>これでコンパイルすると、<span style="text-decoration: underline;">関数を呼び出す3行目側でエラーが出ます</span>。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="コンパイル結果"><code>(実行コマンド)&gt; javac .\SampleClass.java
.\SampleClass.java:3: エラー: クラス SampleClassのメソッド testMethodは指定された型に適用できません。
    testMethod();
    ^
  期待値: int
  検出値: 引数がありません
  理由: 実引数リストと仮引数リストの長さが異なります
エラー1個</code></pre></div>



<p>これで、呼び出した3行目が絶対に間違っているかというと、<strong>そんなことはありません</strong>。</p>



<p>メソッドtestMethodで引数nが使われていなくて、<span style="text-decoration: underline;">その定義(6行目)を修正する可能性もあります</span>。</p>



<p>このように、<span style="text-decoration: underline;">「エラーが起こった場所が間違っている」という先入観が解決を邪魔することもある</span>ので、気を付けましょう。</p>



<p><br></p>



<h2 class="wp-block-heading"><span id="toc6">実行時エラー</span></h2>



<p>次に<strong>実行時エラー</strong>、こちらも読んで字のごとく、<span style="text-decoration: underline;">プログラムを実行したときに出るエラー</span>を指します。</p>



<p>コンパイルは通っているので文法の誤りはないのですが、<strong>動作に問題がある場合</strong>に発生します。</p>



<p>…だけで説明が済めばよかったのですが、ここの複雑さがなかなかに厄介でしょう。</p>



<p>実行時エラーには、いくつかの種類があります。</p>



<p><br></p>



<h3 class="wp-block-heading"><span id="toc7">実行時エラーの種類</span></h3>



<p>実行時エラーは、まず大きく2つに分けることができます。</p>



<p>1つ目が<span style="text-decoration: underline;">狭義のエラー</span>、ややこしいので本記事では<strong>Error</strong>と英語で表記しましょう。</p>



<p>2つ目が<strong>例外</strong>、こちらがさらに<strong>非チェック例外</strong>、<strong>チェック例外</strong>の2つに分かれます。</p>



<ul class="wp-block-list">
<li>実行時エラー
<ul class="wp-block-list">
<li>Error</li>



<li>例外
<ul class="wp-block-list">
<li>非チェック例外</li>



<li>チェック例外</li>
</ul>
</li>
</ul>
</li>
</ul>



<p>順番に、内訳を見ていきます。</p>



<p><br></p>



<h4 class="wp-block-heading"><span id="toc8">Error</span></h4>



<p><strong>Error</strong>は、一言で言うと<span style="text-decoration: underline;">起こってはいけない<span class="bold-red">致命的な問題</span></span>です。</p>



<p>どう致命的かというと、具体的なエラーの内容を見て貰えば分かると思います。</p>



<p>ということで、2つほど具体的なErrorを見てみましょう。</p>



<p><br></p>



<p>まず<strong>OutOfMemoryError</strong>、これは<span style="text-decoration: underline;">プログラムを動かすためのデータ領域が不足したときに発生</span>します。</p>



<p>プログラムのためのデータがもう置けないので、プログラムもそこで止まります。</p>



<p><br></p>



<p>次に<strong>StackOverflowError</strong>、こちらは<span style="text-decoration: underline;">メソッドに関係するお話</span>ですね。</p>



<p>メソッドを呼ぶとき、呼ぶ元で持っていた変数などの情報を、あとで取り出すために一度<strong>スタック</strong>という仕組みで保存しておきます。</p>



<p>もちろん、そのメソッドの中でまたメソッドを呼ぶこともあり、その時はさらにスタックで保存をしていきます。</p>



<p>スタックは<span style="text-decoration: underline;">片方がふさがれている筒</span>をイメージしてもらうとわかりやすく、上から入れれて、上から取り出せる仕組みになっています。</p>



<p>この筒、当然ですが<span style="text-decoration: underline;">入れれるデータの量に限界</span>があります。</p>



<p>その<span style="text-decoration: underline;">限界を超えて、なおメソッドを呼び出そうとすると、このStackOverflowErrorの発生</span>、となるわけですね。</p>



<p>そんなことにはならんやろと思うかもしれませんが、<strong>再帰</strong>(自身を呼び出すメソッド)<strong>で終了条件を忘れる</strong>とよくなります。</p>



<p>これも、プログラムの動作に必要な処理ができなくなるため、プログラムが停止します。</p>



<p><br></p>



<p>他にもいくつか種類はありますが、ようは<span style="text-decoration: underline;">起きた時点でプログラムが終了してしまうような、重大なエラー</span>がこの<strong>Error</strong>です。</p>



<p>原則、Errorは<strong>起こさせないコーディング</strong>をして、そもそも発生させないようにします。</p>



<p><br></p>



<p>…一応、発生したらどうなるかを示すため、サンプルソースと実行結果を記載します。</p>



<p>が、<strong>Errorが起こるソースコードなので、実行しないようにしてください</strong>。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-java" data-file="SampleClass.java" data-lang="Java"><code>public class SampleClass {
  public static void main(String args[]) {
    int res = fibonacci(5);
    System.out.println(&quot;res : &quot; + res);
  }

  private static int fibonacci(int n) {
    return fibonacci(n - 1) + fibonacci(n - 2);
  }
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="実行結果"><code>(実行コマンド)&gt; java SampleClass
Exception in thread &quot;main&quot; java.lang.StackOverflowError
        at SampleClass.fibonacci(SampleClass.java:8)
        at SampleClass.fibonacci(SampleClass.java:8)
        at SampleClass.fibonacci(SampleClass.java:8)
(1000行ほど中略)
        at SampleClass.fibonacci(SampleClass.java:8)</code></pre></div>



<p>今回、終了条件を指定していない再帰で、StackOverflowErrorを起こしました。</p>



<p><br></p>



<p>ここでやろうとしていたのは<strong>フィボナッチ数列</strong>という数列の第n項を求めることです。</p>



<p><strong>フィボナッチ数列</strong>は以下の条件で決まる数列です。</p>



<ul class="wp-block-list">
<li>初項：1 (0とする場合もある)</li>



<li>第2項：1</li>



<li>第n項(n ≧ 3)：第n-1項と第n-2項の和</li>
</ul>



<p>具体的な数字でいうと、小さい順に1, 1, 2, 3, 5, 8, 13, 21, …と続いていきます。</p>



<p>よく<span style="text-decoration: underline;">プログラムで第n項を求める練習問題</span>があったりするので、覚えておくといいでしょう。</p>



<p>ちなみに、正しく動作するものは以下の通りです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-java" data-file="SampleClass.java" data-lang="Java"><code>public class SampleClass {
  public static void main(String args[]) {
    int res = fibonacci(5); // number input
    System.out.println(&quot;res : &quot; + res);
  }

  private static int fibonacci(int n) {
    if(n &lt; 2){
      return 1;
    }
    return fibonacci(n - 1) + fibonacci(n - 2);
  }
}</code></pre></div>



<p>メソッドfibonacciの最初で、引数nが2未満なら1を返すとしているところが、終了条件です。</p>



<p>再帰を使うときは、この<strong>終了条件</strong>に気を付けましょう。</p>



<p><br></p>



<h4 class="wp-block-heading"><span id="toc9">非チェック例外(RuntimeException)</span></h4>



<p>ここから<strong>例外</strong>、Errorと対比させると<strong>対処可能な異常事態</strong>、といったイメージでしょう。</p>



<p>どういうことかというと、<span style="text-decoration: underline;">発生したときの処理</span>である<strong>例外処理</strong>を書けるのが特徴ですね。</p>



<p><br></p>



<p>まずは<strong>非チェック例外</strong>(RuntimeException)を見ていきましょう。</p>



<p>こちらは、<span style="text-decoration: underline;">例外処理を書かなくてもいい例外</span>になります。</p>



<p>書かなくてもいい、つまり書くことも可能ですが…非チェック例外は、Errorと同じく<strong>そもそも発生させないのが定石</strong>でしょう。</p>



<p>というのも、いくつか具体的に非チェック例外を挙げてみると…</p>



<ul class="wp-block-list">
<li><strong>ArrayIndexOutOfBoundsException</strong>：配列の範囲外アクセスによる例外<br>→範囲外だったらアクセスしないよう組むべき</li>



<li><strong>NullPointerException</strong>：nullのオブジェクトへアクセスすることによる例外<br>→nullだったらアクセスしないよう組むべき</li>



<li><strong>ArithmeticException</strong>：ゼロ割など、計算エラーによる例外<br>→そういったエラーが出ないよう組むべき</li>



<li>などなど…</li>
</ul>



<p>といった感じで、<span style="text-decoration: underline;">プログラムを書き換えることで、回避できるものが多いから</span>です。</p>



<p><br></p>



<p>実際に、非チェック例外を起こしてみましょう。</p>



<p>まずは、配列の範囲外にアクセスしてみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-java" data-file="SampleClass.java" data-lang="Java"><code>public class SampleClass {
  public static void main (String[] args) {
    errorTest(0);
    errorTest(1);
    errorTest(2);
    errorTest(3);
    errorTest(4);
    errorTest(5);
  }

  static void errorTest (int index) {
    int[] array = new int[5];
    array[index] = 10;
  }
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="実行結果"><code>(実行コマンド)&gt; java SampleClass
Exception in thread &quot;main&quot; java.lang.ArrayIndexOutOfBoundsException: 5
        at SampleClass.errorTest(SampleClass.java:13)
        at SampleClass.main(SampleClass.java:8)</code></pre></div>



<p>ソースコードを見てもらえれば分かりますが、メソッドerrorTestを、引数5で呼び出したときに、そのメソッド内でエラーが起こっています。</p>



<p>メソッド内で0から4の配列を用意し、その5番目にアクセスしているので、範囲外になるというわけですね。</p>



<p>メッセージがさっきは日本語だったのに今度は英語になっていますが、実は<span style="text-decoration: underline;">よりわかりやすくなっています</span>。</p>



<p>後で、エラー内容も詳しく見ていきましょう。</p>



<p><br></p>



<p>もう1つ、非チェック例外を起こしてみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-java" data-file="SampleClass.java" data-lang="Java"><code>public class SampleClass {
  public static void main (String[] args) {
    String test = null;
    System.out.println(test.length());
  }
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="実行結果"><code>(実行コマンド)&gt; java SampleClass
Exception in thread &quot;main&quot; java.lang.NullPointerException
        at SampleClass.main(SampleClass.java:4)</code></pre></div>



<p>直接nullを代入したオブジェクトのメソッドを呼び出そうとしていて、当然エラーが出ます。</p>



<p>どうでもいいですが、よく言う<strong>ぬるぽ</strong>は、この<strong><span style="text-decoration: underline;">NullPo</span>interException</strong>のことです。</p>



<p><s>そのあとのガッは何なんだろう…？</s></p>



<p><br></p>



<h4 class="wp-block-heading"><span id="toc10">チェック例外(Exception)</span></h4>



<p><strong>非チェック例外</strong>が、<span style="text-decoration: underline;">例外処理を書かなくてもいい例外</span>でした。</p>



<p>それに対し、<strong>チェック例外</strong>は、<span style="text-decoration: underline;">例外処理を書かなければいけない例外</span>です。</p>



<p>例外処理があるかをチェックしているから、チェック例外と呼ばれています。</p>



<p>チェックしているのはコンパイルのとき、つまり<span style="text-decoration: underline;">書き忘れるとコンパイルエラーが出る</span>ので注意しましょう。</p>



<p><br></p>



<p>具体的に、チェック例外を挙げてみます。</p>



<ul class="wp-block-list">
<li><strong>FileNotFoundException</strong>：ファイルを開こうとしたけど無かったときに出る例外</li>



<li><strong>IOException</strong>：なんらかの入出力処理が失敗したときに出る例外</li>



<li><strong>SQLException</strong>：データベースに関するエラーが起こったときに出る例外</li>
</ul>



<p><br></p>



<p>ここから、<span style="text-decoration: underline;">理解しやすくするためのイメージ</span>をお伝えします。</p>



<p>あくまで私の考えであって、<strong>これが正しいわけではない</strong>ことに注意してください。</p>



<p>チェック例外は、基本的に<span style="text-decoration: underline;">プログラムやJavaの範囲外も影響</span>します。</p>



<p>例えば、FileNotFoundExceptionはファイルの有無、つまりプログラムの外に影響されますよね。</p>



<p>他にも、SQLExcepionは接続するデータベースが落ちていたら発生することがあり、これもプログラムの外に原因があります。</p>



<p>そのため、<span style="text-decoration: underline;">プログラム内部だけでは解決することができません</span>。</p>



<p>そして、プログラムから見れば実行するまでファイルの有無はわからないのですから、<span style="text-decoration: underline;">ファイルが無かったらどうしようかと考えるのは自然</span>でしょう。</p>



<p>それによって処理が変わるのですから、むしろ<strong>考えておかないと困ります</strong>。</p>



<p>だから、<strong>起こった場合にどうするかを必ず書く必要がある</strong>、と考えています。</p>



<p><br></p>



<p>エラーになった場合のメッセージは、基本的にErrorや非チェック例外と同じです。</p>



<p>ちなみに、<strong>例外処理の書き方</strong>は別記事で解説するので、更新までしばしお待ちください。</p>



<p><br></p>



<h3 class="wp-block-heading"><span id="toc11">実行時エラーの対処法</span></h3>



<p>ここまで書いた通り、<span style="text-decoration: underline;">Errorと非チェック例外はそもそも発生しないような修正</span>が必要となります。</p>



<p>そのための方針は以下の通り。</p>



<ol class="wp-block-list">
<li>どこを実行したタイミングでエラーが出たかを確認する</li>



<li>その原因となった処理を特定する</li>



<li>何が正しい処理なのかを確認する</li>



<li>正しい処理になるよう修正する</li>
</ol>



<p>コンパイルエラーと似てますが、エラー表記も変わるので詳細を見ていきましょう。</p>



<p><br></p>



<p>具体例で、配列の範囲外アクセスをもう一度貼っておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-java" data-file="SampleClass.java" data-lang="Java"><code>public class SampleClass {
  public static void main (String[] args) {
    errorTest(0);
    errorTest(1);
    errorTest(2);
    errorTest(3);
    errorTest(4);
    errorTest(5);
  }

  static void errorTest (int index) {
    int[] array = new int[5];
    array[index] = 10;
  }
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="実行結果"><code>(実行コマンド)&gt; java SampleClass
Exception in thread &quot;main&quot; java.lang.ArrayIndexOutOfBoundsException: 5
        at SampleClass.errorTest(SampleClass.java:13)
        at SampleClass.main(SampleClass.java:8)</code></pre></div>



<p>この実行結果の見方を説明していきます。</p>



<p><br></p>



<p>メッセージの1行目、<code>Exception in thread "main"</code>の部分、これは<span style="text-decoration: underline;">エラーが発生したスレッド</span>を表しています。</p>



<p>この一文の意味が分からない場合、気にする必要はありません。</p>



<p>ちょこっとだけ補足しておくと、<strong>スレッド</strong>は<span style="text-decoration: underline;">プログラムの処理を進める流れ</span>のようなもの。</p>



<p>意図的に作っていなければ、基本的にはmainの1つだけです。</p>



<p><br></p>



<p>その直後、今回は配列の範囲外アクセスを表す<code>java.lang.ArrayIndexOutOfBoundsException</code>の表記と、そのうしろに数字が書かれています。</p>



<p>配列の範囲外アクセスでエラーが出たときは、<span style="text-decoration: underline;">いくつでアクセスしてエラーが起きたかも表示</span>してくれます。</p>



<p>今回で言えば、5でアクセスしたときにエラーが出たよということですね。</p>



<p>そのほか、発生したエラーによって、ここの内容が変わります。</p>



<p><br></p>



<p>その下から、どこでエラーが起きたかを表しています。</p>



<p>atの後ろに<code>クラス名.メソッド名(ファイル名:行数)</code>という表記が複数行書かれています。</p>



<p>1つ目はSampleClassのerrorTestメソッド、SampleClass.javaファイルの13行目で起こっていますね。</p>



<p>この1つ目が、実際にエラーが発生した行番号になります。</p>



<p>2つ目、これは1つ目がどこから呼ばれているかを表していて、読み方は全く同じ。</p>



<p>今回はこれで終わりですが、さらに他から呼ばれていれば、どんどん記載が長くなっていきます。</p>



<p>つまり、at行の先頭がエラーの出たポイントを指し、2行目が1行目を呼んでるポイントを指し、3行目が2行目を呼んでいるポイントを指し…と続いています。</p>



<p>これを追っていくことで、<span style="text-decoration: underline;">どんな処理を通ってそこに着いたかを確認することができる</span>のです。</p>



<p><br></p>



<p>さて、今回はerrorTestメソッドの10を代入している部分でエラーが発生しました。</p>



<p>そのときの添え字アクセスは5で行っており、呼び出し元はファイル8行目の<code>errorTest(5);</code>です。</p>



<p>この場合、原因となっている個所は、<code>errorTest(5);</code>ですね。</p>



<p>どうやって修正するかは、<span style="text-decoration: underline;">状況によって変わります</span>。</p>



<p>配列の用意する範囲が狭かったのか、メソッドを5で呼び出すのがまずかったのか、メソッド内でチェックを入れるべきだったのか…</p>



<p>そこは、<span style="text-decoration: underline;">状況に合わせて判断してください</span>。</p>



<p><br></p>



<p>チェック例外は、<span style="text-decoration: underline;">そもそもソースコード内の修正が不要な場合もあります</span>。</p>



<p>どこでエラーが起こっているか、何が原因なのかの調査は同じですが、<span style="text-decoration: underline;">そこから先の対応はプログラムの外かもしれない</span>ので、これも何が正しいのかを判断するようにしてください。</p>



<p><br></p>



<h2 class="wp-block-heading"><span id="toc12">まとめ</span></h2>



<p>今回は、<strong>コンパイルエラー</strong>と<strong>実行時エラー</strong>の違いを解説してきました。</p>



<p>ざっと、要点だけ振り返ってみましょう。</p>



<p><br></p>



<p>それぞれ名前の通り、<span style="text-decoration: underline;">コンパイルエラーはコンパイル時</span>に、<span style="text-decoration: underline;">実行時エラーは実行時</span>に出るエラーのことでした。</p>



<p><strong>コンパイルエラー</strong>はソースコードの間違い、主に<span style="text-decoration: underline;">文法やスペルの間違い</span>によって発生します。</p>



<p><strong>実行時エラー</strong>は<span style="text-decoration: underline;">プログラムの動作に問題があった場合に発生するエラー</span>で、さらに細分化できて…</p>



<ul class="wp-block-list">
<li><strong>Error</strong>：発生したらプログラムが終了するような、重大なエラー</li>



<li>例外
<ul class="wp-block-list">
<li><strong>非チェック例外</strong>：例外処理の記載が不要な例外</li>



<li><strong>チェック例外</strong>：例外処理の記載が必須な例外</li>
</ul>
</li>
</ul>



<p>このような形に分けることができます。</p>



<p><br></p>



<p><span style="text-decoration: underline;">Errorや非チェック例外は起こさせない方針</span>であるのに対し、<span style="text-decoration: underline;">チェック例外は発生したらどうするかを考える</span>必要があります。</p>



<p>発生した場合の修正について、両者とも<span style="text-decoration: underline;">発生ヶ所の特定、原因の特定、修正方法の確認、修正</span>という流れになります。</p>



<p>が、傾向として、<span style="text-decoration: underline;">コンパイルエラーはエラー発生ヶ所と原因ヶ所が同じ場合が多く</span>、<span style="text-decoration: underline;">実行時エラーは異なる場合が多い</span>でしょう。</p>



<p><span style="text-decoration: underline;">あくまで傾向で、この限りではない</span>ので注意してください。</p>



<p><br></p>



<p>このエラーまわりは複雑で、しっかり対応しないと<strong>プログラムが止まる危険性</strong>もあります。</p>



<p>慣れないうちは大変ですが、<strong>避けては通れません</strong>。</p>



<p>1つずつ、確実に身に付けていきましょう。</p>



<p><br></p>



<h2 class="wp-block-heading"><span id="toc13">独学が難しいと思ったら、スクールを検討しよう</span></h2>



<p>さて、ここまでの内容を<span style="text-decoration: underline;">独学でやるのはなかなか難しい</span>と思いませんか？</p>



<p>特に、エラーまわりは<span style="text-decoration: underline;">ただでさえ複雑</span>なのに加えて、<strong>しっかり対応しないとプログラムが上手く動作しません</strong>。</p>



<p>また、例外処理も含めて、<strong>ベストプラクティス</strong>まで把握するのは相当難しいでしょう。</p>



<p>特に、2言語目以降ならまだいいですが、<strong>プログラミング初挑戦だと余計に意味不明</strong>だと思います。</p>



<p><br></p>



<p>そこで、目的にもよりますが、本格的に勉強したいならやはり<strong>スクールに通うことをオススメ</strong>します。</p>



<p>今回はJavaの内容を解説してきましたが、どの言語でも<span style="text-decoration: underline;">しっかり学ぶなら人に教えてもらうのがベター</span>でしょう。</p>



<p>何より、<strong>困った時に質問できるのが最大のメリット</strong>です。</p>



<p>スクールによっても扱う内容から特徴まで色々異なるので、まずは<strong>無料カウンセリング</strong>で雰囲気を知り、自分の求めるスクールを選べるようにしてください。</p>



<p><br></p>



<p>いくつか、具体的なスクールをご紹介します。</p>



<figure class="wp-block-table"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>スクール名</th><th>扱う内容</th><th>無料カウンセリング</th><th>形式</th><th>ポイント</th></tr></thead><tbody><tr><td>テックアカデミー<br><a rel="nofollow noopener" href="https://techacademy.jp/" target="_blank">TechAcademy [テックアカデミー]</a></td><td>Webデザイン<br>PHP/Laravel<br>WordPress<br>Ruby on Rails<br>Java<br>Python<br>などなど</td><td>〇</td><td>オンライン、教材での学習</td><td>転職はもちろん、副業を目指すコースもあり<br>副業は実際に案件を受け、納品するところまでサポートしてくれる<br>95%が初心者、かつ30代以上が70%近く、年齢も関係なし</td></tr><tr><td>ウズウズカレッジ(Javaコース)<br><a rel="nofollow noopener" href="https://uzuz-college.jp/java/" target="_blank">【UZUZ　Java】</a></td><td>Java<br>※他コースもあり</td><td>〇</td><td>オンライン、動画での学習</td><td>Javaシルバーという資格の取得も可能<br>質問も常時可能、転職のサポートまで行ってくれる<br>今後IT業界に転職したい場合にオススメ</td></tr><tr><td>忍者CODE<br><a rel="nofollow noopener" href="https://px.a8.net/svt/ejp?a8mat=3TNNXL+7U7IAI+5EPG+5YRHE" target="_blank">【忍者CODE】</a></td><td>Web製作<br>Webデザイン<br>Ruby<br>Python<br>Java<br>Shopify</td><td>〇</td><td>オンライン、動画での学習</td><td>独学コースから転職コースまで幅広い品ぞろえ<br>もちろん、全てのコースで質問は可能<br>自分のペースで進めたい、でも質問はしたいという人にオススメ</td></tr><tr><td>Winスクール<br><a rel="nofollow noopener" href="https://px.a8.net/svt/ejp?a8mat=3TNNXL+A0SQ56+529E+5YRHE" target="_blank">【Winスクール】</a></td><td>Java<br>Python<br>C言語<br>PHP<br>Ruby<br>JavaScript<br>などなど</td><td>〇</td><td>オンライン、対面選択可能</td><td>プログラミングだけでなく、資格取得やグラフィック系、データ分析まで幅広いコースあり<br>特に資格は一度での合格率が99%<br>ほとんどが未経験からのスタート、就職や転職までサポート</td></tr></tbody></table></div></figure>



<p>スクールはこれに限らず、扱う内容や目的によって、多岐にわたります。</p>



<p>是非、通うのならご自身の目的、特徴にあったスクールを選びましょう。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://renewal.shinoarchive.com/java-error-exception/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
