Java言語を使い始める

Download java eBook

備考

Javaプログラミング言語は...

  • 汎用 :幅広いアプリケーションドメインでソフトウェアを作成するために設計されており、特定のドメインに特化した機能が欠けています。

  • クラスベース :そのオブジェクト構造はクラスで定義されます。クラスインスタンスは、常にそのクラス定義で指定されたフィールドとメソッドを持っています(「 クラスとオブジェクト 」を参照)。これは、JavaScriptなどの非クラスベースの言語とは対照的です。

  • 静的型付き :コンパイラは、変数型が尊重されることをコンパイル時にチェックします。たとえば、メソッドがString型の引数を必要とする場合、メソッドが呼び出されると、その引数は実際には文字列でなければなりません。

  • オブジェクト指向 :Javaプログラムの大部分は、クラスインスタンス、つまり状態(フィールド)と振る舞い(データを操作し、オブジェクトのインタフェースを外部世界に形成するメソッド)です。

  • Portablejavacを使用して任意のプラットフォームでコンパイルすることができ、結果のクラスファイルはJVMを持つ任意のプラットフォームで実行できます。

Javaは、アプリケーション開発者に「一度書いてみよう」(WORA)を可能にします。つまり、コンパイルされたJavaコードは、再コンパイルを必要とせずにJavaをサポートするすべてのプラットフォームで実行できます。

JavaコードはJava仮想マシン(JVM)によって解釈されるバイトコード( .classファイル)にコンパイルされます。理論的には、1つのJavaコンパイラで作成されたバイトコードは、異なる種類のコンピュータ上であっても、すべてのJVMで同じ方法で実行する必要があります。 JVMは、(実際のプログラムでは)頻繁に実行されるバイトコードの部分をネイティブマシンコマンドにコンパイルすることがあります。これは「ジャストインタイム(JIT)コンパイル」と呼ばれています。

Java Editionおよびバージョン

Sun / Oracleによって定義されたJavaの「エデ​​ィション」は3つあります。

  • Java Standard Edition(SE)は、一般向けに設計されたエディションです。
  • Java Enterprise Edition(EE)には、Javaで「エンタープライズグレード」サービスを構築するためのさまざまな機能が追加されています。 Java EEは別途対象となります。
  • Java Micro Edition(ME)は、 Java SEのサブセットに基づいており、限られたリソースを持つ小型デバイスでの使用を目的としています。

Java SE / EE / MEエディションには別のトピックがあります。

各エディションには複数のバージョンがあります。 Java SEのバージョンは以下のとおりです。

Javaのインストール

Java(Standard Edition)のインストールについては別のトピックがあります。

Javaプログラムのコンパイルと実行

別のトピックがあります:

次は何ですか?

ここには、Javaプログラミング言語の学習と理解を継続するためのテーマへのリンクがあります。これらの科目は、Javaプログラミングの基本であり、あなたを始めてくれます。

テスト

Javaには標準ライブラリでのテストはサポートされていませんが、テストをサポートするように設計されたサードパーティライブラリがあります。 2つの最も一般的なユニットテストライブラリは次のとおりです。

その他

  • Javaのためのデザインパターンがで覆われているデザインパターン
  • Android用プログラミングはAndroidでカバーされています
  • Java Enterprise Editionテクノロジーは、 Java EEでカバーされています
  • OracleのJavaFXの技術はで覆われているJavaFXの

OracleはそのパブリックダウンロードサイトへのJava SEの更なる更新情報を掲載停止する時期バージョン 1.セクションエンド・オブ・ライフ(無料)日付です。重要なバグ修正やセキュリティ修正、Java SEの一般的なメンテナンスに継続的にアクセスする必要があるお客様は、 Oracle Java SEのサポートを通じて長期的なサポートを受けることができます。

バージョン

Java SEバージョンコード名エンド・オブ・ライフ(無料1発売日
Java SE 9(アーリーアクセス) 無し 未来 2017-07-27
Java SE 8 クモ未来 2014-03-18
Java SE 7 イルカ 2015-04-14 2011-07-28
Java SE 6 マスタング 2013-04-16 2006-12-23
Java SE 5 2009-11-04 2004年10月4日
Java SE 1.4 マーリン 2009年11月4日より前 2002-02-06
Java SE 1.3 チョウゲンボウ 2009年11月4日より前 2000-05-08
Java SE 1.2 遊び場 2009年11月4日より前 1998年12月8日
Java SE 1.1 無し 2009年11月4日より前 1997-02-19
Java SE 1.0 オーク 2009年11月4日より前 1996年1月21日

最初のJavaプログラムを作成する

HelloWorld.java という名前のテキストエディタまたはIDEで新しいファイルを作成します。次に、このコードブロックをファイルに貼り付けて保存します。

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
 

Ideoneでライブ実行

注意: Javaをpublic class として認識し( コンパイル時エラーをスローしないため )、ファイル名は拡張子が.java のクラス名(この例ではHelloWorld )と同じでなければなりません。それの前にpublic アクセス修飾子もなければなりません。

命名規則では、Javaクラスは大文字で始まり、 キャメルケース形式(各単語の最初の文字が大文字になります)であることが推奨されています。この規則では、アンダースコア( _ )とドル記号( $ )を使用することをお勧めします。

コンパイルするには、ターミナルウィンドウを開き、 HelloWorld.java のディレクトリに移動します。

$ javac HelloWorld.java
 

注: cdはdirectoryを変更するterminalコマンドです。

次のように、 javac 続いてファイル名と拡張子を入力します。

$ C:\Program Files\Java\jdk(version number)\bin\javac HelloWorld.java
 

'javac' is not recognized as an internal or external command, operable program or batch file. というエラーを得るのはかなり一般的'javac' is not recognized as an internal or external command, operable program or batch file. JDK をインストールしていても、 IDE からプログラムを実行することができます。 eclipse パスは、デフォルトで環境に追加されていないので、など。

場合は、Windows上でこれを取得、解決するには、まずjavac.exe パスを参照してみてください、それはおそらくあなたのC:\Program Files\Java\jdk(version number)\bin ます。それから、以下でそれを実行してみてください。

Variable name  : PATH
Variable value : c:\Program Files\Java\jdk1.8.0_xx\bin;[Existing Entries...]
 

以前はjavac を呼び出していたとき、上記のコマンドと同じでした。その場合、あなたのOSjavac がどこに存在しているかを知っていました。今度は、毎回パス全体を入力する必要はありません。これをPATH に追加する必要があります

Windows XP / Vista / PATH 環境変数を編集するには:

  • コントロールパネル⇒システム⇒高度なシステム設定
  • [詳細設定]タブ⇒環境変数
  • 「システム変数」で下にスクロールして「PATH」を選択します⇒編集

これを元に戻すことはできませんので注意してください。まず、既存のパスをメモ帳にコピーします。次にjavac への正確なPATHを取得するにはjavac 存在するフォルダを手動で参照し、アドレスバーをクリックしてコピーします。それはc:\Program Files\Java\jdk1.8.0_xx\bin ように見えるはずです

「変数値」フィールドに、既存のすべてのディレクトリのIN FRONTとそれに続くセミコロン(;)を貼り付けます。既存のエントリは削除しないでください。

$ java HelloWorld
 

今これは解決するはずです。

Linuxベースのシステムでは、 ここで試してみてください

注意: javac コマンドはJavaコンパイラを起動します。

コンパイラはHelloWorld.class というバイトコードファイルを生成し、 Java仮想マシン(JVM)で実行することができます。 Javaプログラミング言語コンパイラjavac は、Javaプログラミング言語で記述されたソースファイルを読み込み、 bytecode クラスファイルにコンパイルします。オプションで、コンパイラは、 Pluggable Annotation Processing APIを使用して、ソースファイルおよびクラスファイルにあるアノテーションを処理することもできます。コンパイラはコマンドラインツールですが、JavaコンパイラAPIを使用して呼び出すこともできます。

プログラムを実行するには、 java 後にmain メソッド(この例ではHelloWorld )を含むクラスの名前を入力します。 .class がどのように省略されているかに注意してください:

public class HelloWorld {
 

注: java コマンドはJavaアプリケーションを実行します。

これはコンソールに出力されます:

こんにちは世界!

最初のJavaプログラムを正常にコーディングしてビルドしました!

注意: Javaコマンド( javajavac など)が認識されるようにするには、次のことを確認する必要があります。

JVMが提供するコンパイラ( javac )とエグゼキュータ( java )を使用する必要があります。インストールしたバージョンを確認するには、コマンドラインでjava -versionjavac -version と入力しjava -version 。プログラムのバージョン番号が端末に表示されます( 1.8.0_73 )。


Hello Worldプログラムを詳しく見る

"Hello World"プログラムには、 HelloWorld クラス定義、 main メソッド、およびmain メソッド内のステートメントで構成される単一のファイルが含まれています。

    public static void main(String[] args)  {
 

class キーワードは、 HelloWorld クラスのクラス定義を開始します。すべてのJavaアプリケーションには、少なくとも1つのクラス定義( クラスに関する詳細情報 )が含まれています。

        System.out.println("Hello, World!");
 

これはJVM がプログラムを実行できるエントリーポイントメソッドです(名前とpublic static void main(String[]) シグネチャで定義されています)。すべてのJavaプログラムには1つが必要です。それは:

  • public :メソッドはプログラムの外側からでもどこからでも呼び出すことができます。詳細については、 Visibilityを参照してください。
  • static :オブジェクトが存在し、クラスレベルでオブジェクトを作成せずにそれ自身で実行できることを意味します。
  • void :値を返さないことを意味します。 注:これはCやC ++と異なり、 int などのリターンコードが必要です(Javaの方法はSystem.exit() )。

この主な方法は以下を受け入れる:

これのほとんどはJavaのエントリーポイントメソッドに必要です。

必須ではない部品:

  • 名前args は変数名なので、通常はargs と呼ばれますが、任意の名前で呼び出すことができます。
  • 配列がvarargsに渡されるので、そのパラメータ型が配列( String[] args )かVarargsString... args )かどうかは関係ありません。

注: 1つのアプリケーションには、エントリーポイント( main )メソッドを含む複数のクラスが存在する場合があります。アプリケーションのエントリポイントは、 java コマンドの引数として渡されるクラス名によって決まります。

mainメソッドの内部では、次の文が表示されます。

    }  // end of main function scope
}      // end of class HelloWorld scope 
 

このステートメントを要素ごとに分解しましょう:

素子目的
System これは、後続の式がjava.lang パッケージのSystem クラスを呼び出すことを示します。
. これは「ドット演算子」です。ドット演算子はクラスメンバー1へのアクセスを提供します。すなわちそのフィールド(変数)とそのメソッド。この場合、ドット演算子を使用すると、参照することができますout 内の静的フィールドをSystem クラス。
out これは、標準出力機能を含むSystem クラス内のPrintStream 型の静的フィールドの名前です。
. これは別のドット演算子です。このドット演算子は、 out 変数内のprintln メソッドへのアクセスを提供out ます。
println これはPrintStreamクラス内のメソッドの名前です。特にこのメソッドは、パラメータの内容をコンソールに出力し、その後に改行を挿入します。
( この括弧は、メソッドがアクセスされている(フィールドではない)ことを示し、 println メソッドに渡されるパラメータを開始します。
"Hello, World!" これは、パラメータとしてprintln メソッドに渡されるStringリテラルです。各端の二重引用符は、テキストを文字列として区切ります。
) この括弧は、 println メソッドに渡されるパラメータのクロージャを示します。
; このセミコロンはステートメントの終わりを示します。

注: Javaの各ステートメントは、セミコロン( ; )で終わらなければなりません。

メソッド本体とクラス本体が閉じられます。

public class Team {
    Member member;
    public Team(Member member) {  // who is in this Team?
        this.member = member;  //  one 'member' is in this Team!
    }
}
 

ここでは、オブジェクト指向のパラダイムを示す別の例があります。 1つの(はい、1つ!)メンバーでフットボールチームをモデル化してみましょう。もっと多くのことがあるかもしれませんが、私たちが配列になったときにそれについて議論します。

まず、 Team クラスを定義しましょう:

class Member {
    private String name;
    private String type;
    private int level; // note the data type here
    private int rank; // note the data type here as well

    public Member(String name, String type, int level, int rank) {
        this.name = name; 
        this.type = type;
        this.level = level;
        this.rank = rank;
    }
}
 

では、 Member クラスを定義しましょう:

public class Team {
    Member member;
    public Team(Member member) {  
        this.member = member;  
    }

    // here's our main method
    public static void main(String[] args) {
       Member myMember = new Member("Aurieel", "light", 10, 1); 
       Team myTeam = new Team(myMember); 
       System.out.println(myTeam.member.getName());
       System.out.println(myTeam.member.getType());
       System.out.println(myTeam.member.getLevel());
       System.out.println(myTeam.member.getRank());
    }
}

class Member {
    private String name;
    private String type;
    private int level;
    private int rank;

    public Member(String name, String type, int level, int rank) {
        this.name = name; 
        this.type = type;
        this.level = level;
        this.rank = rank;
    }
    
    /* let's define our getter functions here */
    public String getName() { // what is your name?
        return this.name; // my name is ...
    }
   
    public String getType() { // what is your type?
        return this.type; // my type is ...
    }
    
    public int getLevel() { // what is your level?
        return this.level; // my level is ...
    }
    
    public int getRank() { // what is your rank?
        return this.rank; // my rank is
    }
}
 

なぜ私たちはここでprivate を使用しますか?まあ、あなたの名前を知りたい人は、あなたのポケットに入ってあなたの社会保障カードを引き出す代わりに、あなたに直接尋ねるべきです。このprivate は、外部のエンティティがあなたの変数にアクセスするのを防ぎます。 private メンバーは、ゲッター関数(以下に示す)を介してのみ返すことができます。

すべてをまとめてゲッターとメインメソッドを追加した後は、次のようになります。

Aurieel
light
10
1
 

出力:

cd /path/to/containing/folder/
 

イデオンで走る

もう一度、 Test クラスのmain メソッドは、プログラムのエントリポイントです。 main メソッドがなければ、Java仮想マシン(JVM)にプログラムの実行開始位置を伝えることはできません。


1 - HelloWorld クラスはSystem クラスとの関連が少ないため、 public データにのみアクセスできます。

Stats

13735 Contributors: 176
Tuesday, July 18, 2017
ライセンスを受けた: CC-BY-SA

所属していない Stack Overflow
Rip Tutorial: info@zzzprojects.com

eBookをダウンロード