Java Language チュートリアル
Java言語を使い始める
サーチ…
備考
Javaプログラミング言語は...
汎用 :幅広いアプリケーションドメインでソフトウェアを作成するために設計されており、特定のドメインに特化した機能が欠けています。
クラスベース :そのオブジェクト構造はクラスで定義されます。クラスインスタンスは、常にそのクラス定義で指定されたフィールドとメソッドを持っています(「 クラスとオブジェクト 」を参照)。これは、JavaScriptなどの非クラスベースの言語とは対照的です。
静的型付き :コンパイラは、変数型が尊重されることをコンパイル時にチェックします。たとえば、メソッドが
String
型の引数を必要とする場合、メソッドが呼び出されると、その引数は実際には文字列でなければなりません。オブジェクト指向 :Javaプログラムの大部分は、クラスインスタンス、つまり状態(フィールド)と振る舞い(データを操作し、オブジェクトのインタフェースを外部世界に形成するメソッド)です。
Portable :
javac
を使用して任意のプラットフォームでコンパイルすることができ、結果のクラスファイルは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ソースコードのコンパイル
- JARファイルの作成を含むJavaデプロイメント
- 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!");
}
}
注意: Javaをpublic class
として認識し( コンパイル時エラーをスローしないため )、ファイル名は拡張子が.java
のクラス名(この例ではHelloWorld
)と同じでなければなりません。それの前にpublic
アクセス修飾子もなければなりません。
命名規則では、Javaクラスは大文字で始まり、 キャメルケース形式(各単語の最初の文字が大文字になります)であることが推奨されています。この規則では、アンダースコア( _
)とドル記号( $
)を使用することをお勧めします。
コンパイルするには、ターミナルウィンドウを開き、 HelloWorld.java
のディレクトリに移動します。
cd /path/to/containing/folder/
注: cdはdirectoryを変更するterminalコマンドです。
次のように、 javac
続いてファイル名と拡張子を入力します。
$ 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
ます。それから、以下でそれを実行してみてください。
$ C:\Program Files\Java\jdk(version number)\bin\javac HelloWorld.java
以前はjavac
を呼び出していたとき、上記のコマンドと同じでした。その場合、あなたのOS
はjavac
がどこに存在しているかを知っていました。今度は、毎回パス全体を入力する必要はありません。これをPATH
に追加する必要があります
Windows XP / Vista / PATH
環境変数を編集するには:
- コントロールパネル⇒システム⇒高度なシステム設定
- [詳細設定]タブ⇒環境変数
- 「システム変数」で下にスクロールして「PATH」を選択します⇒編集
これを元に戻すことはできませんので注意してください。まず、既存のパスをメモ帳にコピーします。次にjavac
への正確なPATHを取得するにはjavac
存在するフォルダを手動で参照し、アドレスバーをクリックしてコピーします。それはc:\Program Files\Java\jdk1.8.0_xx\bin
ように見えるはずです
「変数値」フィールドに、既存のすべてのディレクトリのIN FRONTとそれに続くセミコロン(;)を貼り付けます。既存のエントリは削除しないでください。
Variable name : PATH
Variable value : c:\Program Files\Java\jdk1.8.0_xx\bin;[Existing Entries...]
今これは解決するはずです。
Linuxベースのシステムでは、 ここで試してみてください 。
注意: javac
コマンドはJavaコンパイラを起動します。
コンパイラはHelloWorld.class
というバイトコードファイルを生成し、 Java仮想マシン(JVM)で実行することができます。 Javaプログラミング言語コンパイラjavac
は、Javaプログラミング言語で記述されたソースファイルを読み込み、 bytecode
クラスファイルにコンパイルします。オプションで、コンパイラは、 Pluggable
Annotation Processing APIを使用して、ソースファイルおよびクラスファイルにあるアノテーションを処理することもできます。コンパイラはコマンドラインツールですが、JavaコンパイラAPIを使用して呼び出すこともできます。
プログラムを実行するには、 java
後にmain
メソッド(この例ではHelloWorld
)を含むクラスの名前を入力します。 .class
がどのように省略されているかに注意してください:
$ java HelloWorld
注: java
コマンドはJavaアプリケーションを実行します。
これはコンソールに出力されます:
こんにちは世界!
最初のJavaプログラムを正常にコーディングしてビルドしました!
注意: Javaコマンド( java
、 javac
など)が認識されるようにするには、次のことを確認する必要があります。
JVMが提供するコンパイラ( javac
)とエグゼキュータ( java
)を使用する必要があります。インストールしたバージョンを確認するには、コマンドラインでjava -version
とjavac -version
と入力しjava -version
。プログラムのバージョン番号が端末に表示されます( 1.8.0_73
)。
Hello Worldプログラムを詳しく見る
"Hello World"プログラムには、 HelloWorld
クラス定義、 main
メソッド、およびmain
メソッド内のステートメントで構成される単一のファイルが含まれています。
public class HelloWorld {
class
キーワードは、 HelloWorld
クラスのクラス定義を開始します。すべてのJavaアプリケーションには、少なくとも1つのクラス定義( クラスに関する詳細情報 )が含まれています。
public static void main(String[] args) {
これはJVM
がプログラムを実行できるエントリーポイントメソッドです(名前とpublic static void main(String[])
シグネチャで定義されています)。すべてのJavaプログラムには1つが必要です。それは:
-
public
:メソッドはプログラムの外側からでもどこからでも呼び出すことができます。詳細については、 Visibilityを参照してください。 -
static
:オブジェクトが存在し、クラスレベルでオブジェクトを作成せずにそれ自身で実行できることを意味します。 -
void
:値を返さないことを意味します。 注:これはCやC ++と異なり、int
などのリターンコードが必要です(Javaの方法はSystem.exit()
)。
この主な方法は以下を受け入れる:
これのほとんどはJavaのエントリーポイントメソッドに必要です。
必須ではない部品:
- 名前
args
は変数名なので、通常はargs
と呼ばれますが、任意の名前で呼び出すことができます。 - 配列がvarargsに渡されるので、そのパラメータ型が配列(
String[] args
)かVarargs (String... args
)かどうかは関係ありません。
注: 1つのアプリケーションには、エントリーポイント( main
)メソッドを含む複数のクラスが存在する場合があります。アプリケーションのエントリポイントは、 java
コマンドの引数として渡されるクラス名によって決まります。
mainメソッドの内部では、次の文が表示されます。
System.out.println("Hello, World!");
このステートメントを要素ごとに分解しましょう:
素子 | 目的 |
---|---|
System | これは、後続の式がjava.lang パッケージのSystem クラスを呼び出すことを示します。 |
. | これは「ドット演算子」です。ドット演算子はクラスメンバー1へのアクセスを提供します。すなわちそのフィールド(変数)とそのメソッド。この場合、ドット演算子を使用すると、参照することができますout 内の静的フィールドをSystem クラス。 |
out | これは、標準出力機能を含むSystem クラス内のPrintStream 型の静的フィールドの名前です。 |
. | これは別のドット演算子です。このドット演算子は、 out 変数内のprintln メソッドへのアクセスを提供out ます。 |
println | これはPrintStreamクラス内のメソッドの名前です。特にこのメソッドは、パラメータの内容をコンソールに出力し、その後に改行を挿入します。 |
( | この括弧は、メソッドがアクセスされている(フィールドではない)ことを示し、 println メソッドに渡されるパラメータを開始します。 |
"Hello, World!" | これは、パラメータとしてprintln メソッドに渡されるStringリテラルです。各端の二重引用符は、テキストを文字列として区切ります。 |
) | この括弧は、 println メソッドに渡されるパラメータのクロージャを示します。 |
; | このセミコロンはステートメントの終わりを示します。 |
注: Javaの各ステートメントは、セミコロン( ;
)で終わらなければなりません。
メソッド本体とクラス本体が閉じられます。
} // end of main function scope
} // end of class HelloWorld scope
ここでは、オブジェクト指向のパラダイムを示す別の例があります。 1つの(はい、1つ!)メンバーでフットボールチームをモデル化してみましょう。もっと多くのことがあるかもしれませんが、私たちが配列になったときにそれについて議論します。
まず、 Team
クラスを定義しましょう:
public class Team {
Member member;
public Team(Member member) { // who is in this Team?
this.member = member; // one 'member' is in this Team!
}
}
では、 Member
クラスを定義しましょう:
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;
}
}
なぜ私たちはここでprivate
を使用しますか?まあ、あなたの名前を知りたい人は、あなたのポケットに入ってあなたの社会保障カードを引き出す代わりに、あなたに直接尋ねるべきです。このprivate
は、外部のエンティティがあなたの変数にアクセスするのを防ぎます。 private
メンバーは、ゲッター関数(以下に示す)を介してのみ返すことができます。
すべてをまとめてゲッターとメインメソッドを追加した後は、次のようになります。
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
}
}
出力:
Aurieel
light
10
1
もう一度、 Test
クラスのmain
メソッドは、プログラムのエントリポイントです。 main
メソッドがなければ、Java仮想マシン(JVM)にプログラムの実行開始位置を伝えることはできません。
1 - HelloWorld
クラスはSystem
クラスとの関連が少ないため、 public
データにのみアクセスできます。