Java
勉強会

【社内勉強会】Javaの基礎~IDEを使わずに実行~(2017/07/06)

More than 1 year has passed since last update.

0.はじめに


対象者など

対象者

  • 普段Javaを使っている人
  • Java8から利用できるラムダ式を使ったことがない人

前提知識

  • 基本的なJavaの使い方

伝えたいこと

  • コマンドでJavaを実行する方法
  • ラムダ式

参考図書

Java本格入門.jpg
『Java本格入門
~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで』技術評論社


目次

  1. Javaの概要
  2. IDEを使わずコマンドでJavaを実行

1. Javaの概要


Javaの特長

1995年、Sun Microsystemより発表されたプログラミング言語

  • オブジェクト指向を前提としている
  • プラットフォーム非依存。
    • OSごとにプログラムを修正する必要がない。
    • Java仮想マシン(Java VM)がOSの依存部分を吸収
  • 利用者が多い
    • 優れたライブラリ、ミドルウェアが多い

Java仮想マシン(Java Virtual Machine: JVM)の図

JVMのスライド.jpg

SlideShare: Java Night Seminar for Java Begineers 引用


Javaの3つのエディッション

  • Java SE(Standard Edition)
    • Java VMや標準的なAPIなど。
  • Java EE(Enterprise Edition)
    • サーバアプリケーションの開発に必要な機能(Webサービスなど)
  • Java ME(Micro Edition)
    • 家電製品、携帯電話などの組み込み系

Javaの環境

  • JRE(Java Runtime Environment)

    • Javaアプリケーションの実行環境。
    • jarファイルやクラスファイルを実行できる。
  • JDK(Java Development Kit)

    • Javaアプリケーションの開発環境。
    • コンパイラー、デバッガなどのツールが含まれている。

※「Java本格入門」P16-17参照


Javaの概念図

JREとJDK.PNG

Java Platform Standard Edition 8ドキュメント 引用


2. IDEを使わずコマンドでJavaを実行


IDEを使わずにコマンドで試す目的

  • IDEが行ってくれている内容を、理解する
    • IDEでできること、できないことを知る
    • IDEで適切な設定が行える
  • IDEで発生したエラーを解決できるようになる

※個人的見解


事前準備

  • 環境変数PATHに、JDKのbinフォルダを追加。
  • java, javacコマンドが使えるようにする。

[Try] コマンドでコンパイル&実行

  • javacコマンドでコンパイルすると、sample\Hello.classが生成される。
javac sample\Hello.java
sample/Hello.java
package sample;
/** Print Hello World */
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}
  • javaコマンドで実行する
java sample.Hello 
REM ⇒ "Hello"

Javaクラスファイル

Javaクラスファイルは、Java仮想マシン (JVM) 上で実行可能なJavaバイトコードを含む(.class拡張子付きの)ファイルである。

Wikipedia: Javaクラスファイル 引用

[Try] javapコマンドで逆アセンブル

javap -verbose sample\Hello

3. Javaの基本的な用語


クラスパス

外部ライブラリを参照(jarファイルなど)するのに、設定する必要がある。

クラス・パスは、Java Runtime Environment(JRE)がクラスおよびその他のリソース・ファイルを検索するパスです。

クラス検索パス(クラス・パス)は、JDKツールを呼び出すときに-classpathオプションを付ける(推奨される方法)か、CLASSPATH環境変数を設定して設定できます。-classpathオプションが推奨されているのは、アプリケーションごとに個別に設定できるので、ほかのアプリケーションに影響を与えたり、ほかのアプリケーションからこの値が変更されたりすることがないためです。

Oracleリファレンス クラス・パスの設定 引用


jarファイル

Java ARchiveの略。

jarコマンドは、ZIPおよびZLIBの圧縮形式に基づいた汎用のアーカイブおよび圧縮ツールです。ただし、jarコマンドの主な目的は、いくつかのJavaアプレットやアプリケーションを1個のアーカイブにパッケージ化することです。

Oracleリファレンス jar

[Try] jarファイルの拡張子を"zip"に変更して、zip展開できることを確認。
[Try] jarコマンドでjarファイルを展開。

REM -x: 展開, -v:詳細情報出力, -f:ファイル名指定
jar -xvf sample.jar

[補足] マニフェストファイル

jarファイル中には、META-INF/MANIFEST.MFというマニフェストファイルがある。

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: 1.5.0_22 (Sun Microsystems Inc.)
Built-By: hen
Build-Jdk: 1.5.0_22
Implementation-Title: Commons Lang
Implementation-Vendor: The Apache Software Foundation
Implementation-Vendor-Id: org.apache
Implementation-Version: 3.0

~以下省略~

commons-lang3-3.0.jar のマニフェストファイル

マニフェストファイルには、バージョンや、jarファイルの作成に使用したツールが記述される。

KAB-studio マニフェストファイル


Javaコマンドのオプション

Javaオプションのカテゴリの一部。

  • 標準オプション

    • Java仮想マシン(JVM)のすべての実装でサポートされる
  • 非標準オプション

    • Java HotSpot仮想マシンに固有の汎用オプション。すべてのJVM実装でサポートされる保証はない
    • -Xから始まる
  • 拡張ランタイム・オプション

    • Java HotSpot仮想マシンの操作の特定の領域のチューニングに使用するための開発者用オプション
    • -XXから始まる
    • ブール-XXオプションはプラス記号で有効、マイナス記号で無効を表す。(-XX:+OptionName , -XX:-OptionName)

Oracle リファレンス java 参照


使ったことがあるJavaオプション

  • -Dproperty=value : システム・プロパティの値を設定

    • -Duser.language=ja, -Duser.country=JPなど
    • Javaソースでは、System.getProperty("user.language"); で値を取得できる
    • Tomcat Configure Managerでは、JVM引数で指定
  • -Xmxsize :メモリー割当てプールの最大サイズ(バイト単位)を指定

    • -Xmx1024m:1024MBを指定
  • -XX:+UseGCLogFileRotation:GCログのローテーションを有効にする

※ 参考サイト
Java HotSpot VM Options


付録


Java EE

  • javax.*パッケージ(Java SEでもjavaxから始まるクラスもある)
  • Tomcatのライブラリにも含まれている(servlet-api.jarなど)

Javaのバージョン

Javaコマンドのバージョンの確認方法。

 java -version
 ⇒ java version "1.8.0_131"

オラクルでは定期的に更新が利用可能になります。更新が発生すると、バージョン文字列に更新版のバージョン番号も含まれます。つまり、JDK 8 update 5(JDK 8u5)ではバージョン文字列は"1.8.0_5"になります。

Java Platform, Standard Edition 8の名前とバージョン 引用


Javaの環境変数

Javaを使うアプリケーション(Tomcatなど)は、環境変数JAVA_HOMEJAVA_OPTSなどを設定する場合がある。