透2018/1/122019/8/72017年9月にリリースされたJava9は新しい機能が90個くらい追加されているそうです。まとめJavaとは?Javaの特長Java9の説明に入る前に、まずはJavaについて簡単におさらいしておきましょう。Microsystemsが開発・発表したオブジェクト指向という考え方を取り入れた言語です。2010年にOracleが買収し、Oracle製品の1つになりました。Javaは家電やモバイル機器を始めとして、多くのデバイスに搭載されています。国内でもスマートフォンなどに搭載されていて、アプリ開発を行うにはJava言語を使って開発することになります。2017年9月にリリースされたJava9では多くの新機能が追加されているので、その新機能について解説していきます。これまでのJavaについては、こちらのサイトでも詳しく解説していますので、ぜひ参考にしてください。2019年8月21日Java9の新機能一覧Java9のリリースJava9は2017年9月22日に正式リリースされました。Jigsaw」でのモジュール化の開発が難航し、今回のリリースとなっています。Oracle社の発表によると今後のJavaのアップデートは6ヶ月ごとに行う提案がされています。これまでは数年ごとに大きな機能追加を行ってきましたが、この場合だと数年ごとにしか進化しないというデメリットがあるために、6ヶ月ごとの定期的アップデートを今後は行う予定のようです。新機能一覧それではJava9で追加された新機能について解説していきます。新機能といっても全部で90個くらいあるようですが、ここではよく使われると思われる代表的な9つの新機能について簡単に解説します。9つの新機能について簡単にまとめました。forRemoval(削除されるか?)、since(いつから?)の追加これらの他にも、JavaScriptエンジン「Nashorn」用APIの強化、Javadocの検索機能の追加などがあります。それでは表にまとめた9つの新機能について解説していきます!Java9の環境構築Java9の新機能を確認する前にJava9での開発環境を構築しなければなりません。ダウンロードとインストールJava9はこちらからダウンロードできます。http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.htmlOSを選択してダウンロードしましょう!インストールについては、Java8以前と大きく変わりません。こちらのサイトで詳しく解説していますので、参考にしてください。2019年4月29日アップデートJava9にアップデートするためには現在パソコンにインストールされているJavaのバージョンがJava9かJava8以前か確認する必要があります。ここでは、使うパソコンのOSはWindows10の場合を代表例として説明します。Javaのバージョンを確認する方法は以下のとおりです。10-プログラムの確認1.「スタート」をクリックします。2.「設定」を選択します3.「システム」を選択します4.「アプリと機能」を選択します5.プログラムの一覧からJavaを探し出してバージョンを確認しますこの画像ではJava8がインストールされています。Java8以前がインストールされている場合は、Javaをアンインストールする必要があります。Javaをアンインストールできたら、前章のダウンロードの方法を参考にしてJava9をインストールしてください。10-プログラムのアンインストール1.「スタート」をクリックします。2.「設定」を選択します3.「システム」を選択します4.「アプリと機能」を選択します5.アンインストールするプログラムを選択し、「アンインストール」ボタンをクリックします。6.プロンプトに従って、アンインストールを完了します公式参考サイトhttps://java.com/ja/download/faq/remove_olderversions.xml32bit版がない?Java9のダウンロードサイトには64bit版のみが並んでいて、32bit版は探しても見つかりません。32bit版のOSには対応していませんので、注意しましょう!公式サイトにも以下のコメントが掲載されています。VMhttps://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-59701F80-5BB1-416D-835D-C39A9112FC1EEclipseでの注意点こちらのサイトで解説しているPleiadesでJava9の開発環境も自動構築することができます。One」を選択するとJava9に対応しています。2019年5月7日Pleiadesの環境が構築できたらJavaのプロジェクトを新規作成するときに「JavaSE-9」を選択してください。これでJava9を使うことができます。Eclipseで開発環境を構築する場合はNoClassDefFoundErrorというエラーが発生する場合があります。Eclipse4.7.1a以降をインストールするようにしましょう。詳細はこちらのサイトに記載されています。https://wiki.eclipse.org/Configure_Eclipse_for_Java_9JShellでスクリプトJava9の大きな変更点の1つにJShellを使って、スクリプトでJavaを記述、動作確認できるようになりました。JShellはJavaのREPLツールです。Loop」の略で、読んで字のごとく「読んで評価して出力を繰り返す」ということになります。簡単に言うと、JShellを使うとコンパイルなしで対話型で動作確認しながら記述することができます。Java9!”を出力表示してみましょう。JShellはコマンドラインで「jshell」と入力し、実行すると使えるようになります。「jshell>」の後にJavaのコードを記述します。最後に「;」(セミコロン)を記述する必要はありません。タブキーを押すと入力候補も表示されますので、入力するのも簡単です。ちなみに、Rubyなどのスクリプト言語とコンパイル言語との違いについてはこちらで詳しく解説しています。2019年10月8日Jigsawでのモジュール化Java9の大きな変更点の1つにモジュールシステムというものが導入されました。モジュールとはJavaのパッケージをまとめたもので、他のモジュールをどのように使うか、また他のモジュールからどのように使われるかを制御します。module-info.javaというソースファイルでモジュール間のアクセスを制御します。使い方については下記のクイックスタートで紹介されていますので参考にしてください。http://openjdk.java.net/projects/jigsaw/quick-start不変コレクションの生成ListやMapなどのコレクションで要素を初期化して値を変更されたくない場合があります。Java8までは以下のサンプルコードのように数行に渡って記述する必要があり、とても面倒でした。d]これがJava9ではofメソッドを使うことで、簡潔に記述することができるようになりました。d]ただし、要素の値を変更されたくない場合に使うものですので、以下のように変更しようとするとエラーが発生します。Main.main(Main.java:8)ListやMapの使い方については、こちらのサイトで詳しく解説していますので、ぜひ参考にしてください。匿名クラスでのダイヤモンド演算子Java7からダイヤモンド演算子を使って、以下の記述のように右辺で型の指定を省略することができます。ArrayList<>();Java9ではこれが強化されて、匿名クラスでも使えるようになりました。ジェネリクス(総称型)については、こちらのサイトで詳しく解説していますので、ぜひ参考にしてください。匿名クラスについては、こちらのサイトでも詳しく解説していますので、ぜひ参考にしてください。2018年10月29日Interface内のprivateメソッドJava8からInterface内でdefautメソッドとstaticメソッドが定義できるようにりました。こちらのサイトで詳しく解説していますので、参考にしてください。2018年10月26日Java9ではさらにprivateメソッドが定義できるようになりました。defaultメソッドやstaticメソッドの処理内でprivateメソッドを使うことができます。Interfaceの使い方については、こちらのサイトで詳しく解説していますので、ぜひ参考にしてください。2019年4月26日try-with-resources文の改良ファイルやデータベースにアクセスするとリソースを解放するためにclose処理を記述する必要がありました。これを忘れるとメモリリークの原因になったりします。Java7よりtry-with-resources文が追加され、リソースが確実に閉じられるようになりました。finallyブロックでcloseメソッドを呼び出さなくても自動でcloseしてくれます。以下の記述のようにtry節内でクラスを宣言する必要がありました。}}これがJava9よりtry節内で宣言する必要がなくなりました。以下のように記述できます。APIが追加され、簡潔に記述できるようになりました。APIについては、こちらのサイトで詳しく解説していますので、参考にしてください。APIにさらにメソッドが追加されています。それぞれのメソッドの使い方についてみていきましょう。takeWhiletakeWhileメソッドは、条件を満たしている間だけ処理が行われます。一度条件を満たさなくなると、その後の処理は実行されません。break文でforループを抜ける記述を簡潔にすることができます。サンプルコードで確認しましょう。}実行結果:sabreak文でループを抜ける方法については、こちらのサイトで詳しく解説していますので、ぜひ参考にしてください。2019年4月4日dropWhiledropWhileメソッドは、条件を満たしている間は処理が行われません。一度条件を満たさなくなると、その後の処理を実行します。サンプルコードで確認しましょう。}実行結果:muraiofNullableofNullableメソッドは引数に指定する値がnullでない場合はStreamを返します。nullの場合は空のStreamを返します。nullチェックが必要なくなります。サンプルコードで解説しましょう。名古屋このサンプルコードでは、List型のオブジェクトlistの要素をKeyの値に指定し、Map型のオブジェクトmapのValueを返すように記述しています。listの要素”Oosaka”はmapのKeyには含まれていないので、Keyに"Oosaka"を指定するとnullを返します。ofNullableメソッドの引数がnullですので、その場合はエラーも発生せず、出力表示もされていません。このようにnullチェックが必要なく、簡潔に記述することができます。Optionalクラスでのメソッドの追加Java8でOptionalクラスが追加されました。値のない状態を「null」と言いますが、開発中はnullが原因で意図しないエラーが起こることがよくあります。そのためif文などを使ってnullチェックの処理を書く必要がありましたが、Optionalクラスを使うと簡潔に書くことができます。Java9ではこのOptionalクラスにさらにメソッドが追加されました。Optionalクラスの使い方についてはこちらのサイトで詳しく解説していますので、参考にしてください。新たに追加されたメソッドの使い方についてみていきましょう。ifPresentOrElseJava8で追加されたifPresentメソッドを使うと、nullでない場合のみ引数で指定した処理を行うことができました。ifPresentOrElseメソッドではnullの場合も処理を行うことができます。nullでない場合の処理を第1引数に指定します。nullの場合の処理を第2引数に指定します。サンプルコードで確認しましょう。}実行結果:nullですororメソッドはnullの場合のみ処理を実行します。orメソッドはOptional型のオブジェクトを返します。サンプルコードで確認しましょう。}実行結果:nullですstreamstreamメソッドを使うと、nullチェックをせずにOptional型のオブジェクトからnullでないものだけを取り出すことができます。サンプルコードで確認しましょう。}実行結果:TokyoOsakaList型のオブジェクトlist1はnullではないので、streamメソッドで要素を取得できています。list2の場合はnullであるにもかかわらず、エラーは発生ぜずに処理を実行できています。Deprecatedアノテーションの強化Java9ではDeprecatedアノテーションでforRemoval(削除されるか?)、since(いつから?)を指定できるようになりました。ちなみにDeprecatedアノテーションは、Javaのバージョンが新しくなって以前の記述では非推奨となるけれども、以前の記述のまま残しておきたい場合に使います。サンプルコードで確認しましょう。1ですこのサンプルコードでは、ClassSampleクラスのget_numメソッドをgetNumメソッドにメソッド名を変更しています。旧のget_numメソッドに@Deprecatedアノテーションを付けることで、非推奨の警告が出ますが旧のメソッドを削除することなく使用することも出来ています。forRemovalで将来削除されるかどうか指定することができます。sinceでいつから非推奨になったかバージョンを指定することができます。Deprecatedをはじめ、アノテーションの使い方については、こちらのサイトで詳しく解説しています。2019年4月16日このままJavaを学び続けて大丈夫?あなたがJavaを学んでいる理由は何でしょうか?プログラミングと言えばJavaだからプログラミング言語人気ランキングで1位だから授業で一度習ったことがあるからもしあなたがJavaでできることやJavaエンジニアの働き方などを知らずに学習を始めているのなら、Javaの特徴があなたのやりたいことと本当に合っているのか?を見直す必要があります。Javaは誕生して30年経ち様々な企業で使われて求人数や需要も多く、汎用性の高い非常に優れている言語です。そんなJavaエンジニアの特徴としては、アンドロイドアプリや業務アプリ向きでWebサービスには別言語の方が向いている基本的に客先常駐型かつチームで開発していくスタイル、複数の仕事を掛け持ちしたり、場所を問わずに働きたいという人には向いていないJavaは単体で動作する言語ではなく、他の様々な技術と掛け合わせる言語のため、習得難易度は高いもしあなたがWebサービス開発経験を積みつつ、自分でもサービスを作れるようになりたい。場所問わずに自由に働きたい。いうイメージでしたら、Ruby、Python、PHPなどの言語のほうが適しています。自分に合った言語を知りたい方は、質問に答えていくだけであなたにおすすめのプログラミング言語を知れるプログラミング学習診断アプリがありますので、こちらを見てみてください。おすすめの言語だけでなく、理想の生活を手に入れるキャリア設計や、そのキャリアに直結する効率の良い学習方法など、1からあなたにあったものを知りたい方は弊社「侍エンジニア塾」の無料体験レッスンでお答えいたします。オンラインでも受講可能なため、お気軽にお申し込みください。無料体験レッスンを申し込むまとめ今回はJava9の主な新機能について解説してきましたが、いかがでしたか?JShellやJigsawなどの大きな変更があるため細かい部分まで解説しきれなかったのは残念ですが、これらの機能を使いより楽をして品質の高いコードをかけるといいですね!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。お問合せはこちらでも受け付けています。