JAVA 言語の基礎
JAVA 基本
基本形
Java 命名規則など
- 命名規則
- プロジェクト名--:大文字で始まる名前づけ(多分) :: ProjectX
- パッケージ名----:可能ならすべて小文字 :: jp.co.<<会社名>>
- ドット使用化: package.a , pkg.b とか(階層化は無いらしい。)
- "-"(ハイフン)使用不可。 :: txt_in , txt_out とか
- クラス名-------:大文字で始める :: KyuyoKeisan
- メソッド名-----:小文字で始める :: main(String args[]), kadouNisu()
- 変数名---------:小文字で始める :: nKyuyoGaku, strSyainMei
※大文字・小文字の区別有り。
※単語の区切りは一般的に大文字にする。
※変数名の最初の文字に型名1字を付加する方法も有り。
※パッケージは知らなくても組む上で問題無し。
※パッケージ使用ソース読解にはパッケージの知識必須。
※パッケージを使用した圧縮実行ファイル(.jar)の扱いに多少知識要。
▲上へ [ 編集 ]
予約語+α(キーワード)
abstract assert boolean break byte * case cast catch char class const continue default do double else enum extends final finally float for * future * generic goto if implements import instanceof int interface long native new * null * operator * outer package private protected public * rest return short static strictfp super switch synchronized this throw throws transient try * var void vlatile while (既定数->) true false null(多分:50単語+8追加+3単語-1単語)
但し java では、大・小文字を区別する。
例:new は予約後、New は予約後出ない・・・。
データ型・文字列と値の代入
種類 | 型 | size | 値の範囲 | 適用・代入例 |
論理値型 | boolean | 1 bit(?) | true / false (真偽値) | true , false , x == y , x > y int など他の型代用不可 |
文字型 | char | 2 byte | \u0000 〜 \uFFFF (Unicode UTF-16 規格の文字) | 'あ' , 'A' , '\u4E9C' -> (='亜'??多分??) |
符号付整数 | byte | 1 byte | -128 〜 +127 | 1 , -100 |
^ | short | 2 byte | -32768 〜 +32767 | |
^ | int | 4 byte | -2147483648 〜 +2147483647 | (規定) |
^ | long | 8 byte | -9223372036854775808 〜 9223372036854775807 | 1000000000000L |
単精度浮動 小数点数 | float | 4 byte | ±3.40282347E+38 〜 ±1.40239846E-45 (32bit) | 3.14159F |
^ | double | 8 byte | ±1.79769313486231570E+308 〜 ±4.94065645841246544E-324 (64bit) | (規定) |
文字列 | String | String strMsg = "Hello Java World !!" -------------------------------------- 例によって文字列型というのは無い。 String Class や String 型 Object として保持される。 ここでは便宜上記載しただけ。 |
※他の言語のように”符号無し”の型が無いのでスッキリしてわかりやすい。
※boolean の条件判定が厳密である。他の言語のように 0==false 0<>true ではなく 0(1bit)==false 1(1bit)==true となる。しっかりした条件式の記述が必要なので要注意。
▲上へ [ 編集 ]
専門用語
- クラス(Class)
- 簡単に「型」とか言われる。またはプログラム1単位。JAVA によるプログラミング=クラスの定義の繰り返し。
- 分割されたクラスはインスタンス化やオブジェクト生成などを行い具現化され使用可能となる。
- コンストラクタ(Constructor)
- オブジェクト生成の際に実行される初期化処理を記述した部分
- 一般的に使用の初期化を意味すると思われる(?あやふや)
- インスタンス(instance)
- Class の「型」に対し簡単に「実体」、「データの集合」など
- または「データの集合」->「単一データ」の取扱いが可能と思われる。
- オブジェクト(Object)
- =インスタンスとも言われるが、若干ニュアンスが違うと思われる。
- データのインスタンスに対し method の具現化?、又は画面表示の Object の具現化とか?
必須でないが覚えて置きたい機能・専門用語
- Java package
- 名前解決の手段のようなもの。( C++ namespace みたいな名前解決の機能とか )
- (コンパイルされた)Java package は圧縮ファイル(.jar)に保存でき、圧縮状態で配布、実行が可能。
フィールド
多分同一クラス内で使用可能なグローバル変数が宣言できる場所。Class Main() { void main() { Xxxx xx = new Xxxx(); xx.a = 20; xx.method(); // -> 26 xx.b = 15; xx.method(); // -> 35 } }※クラス Xxxx のフィールド初期値に関わらずメインクラスの指定値で計算される。
※多分インスタンス化の時だけ初期化(コンストラクタ?)されるものと思われる。
※よって不必要となったオブジェクト(インスタンス)は実体削除(デストラクタ)しないとメモリを浪費する。
Class Xxxx { // フィールド int a=5, b=6; void method() { System.out.print(a + b + "\n"); } }※メインクラスでフィールドで変数を使用すると static で宣言しないとエラーとなった。
※サブクラスの場合、static でなくとも動作する(動作確認済み)。
※クラス内の method 外ならすべてフィールドとして昨日するようである。
※メソッドより最下に初期値付きで設定しても正しく動作する。
インスタンス化とコンストラクタ
ClassName instanceVariableName; instanceVariableName = new ClassName();「コンストラクタ」呼出しによりメモリ上に生成されるオブジェクト用変数領域を確保することが「インスタンス化」で、この「オブジェクト」用編集領域が「インスタンス」である。
// インストラクタ化(一行で記述):クラス内のメソッドを使えるようにする。 ClassName instanceVariableName = new ClassName(); // メソッドの利用:クラスを指定してメソッドを実行(呼び出し) instanceVariableName.methodName();
オブジェクトの生成・参照など
■オブジェクトの生成ClassName objectVariableName = new constructorName(initialValue ...);実際は、
ClassName objectVariableName = new ClassName(initialValue ...);となりインストラクタ化と似通っている。
■オブジェクトの参照
objectVariableName.methodName(initialValue ...);となる・・・・「initialValue ...」が内場合もあるようでインスタンス化と何がちがうん?
「initialValue ...」がある場合、多分コンストラクタを経由して初期化を行い Object を使用可能にするのか?
インスタンス < オブジェクト?
「インスタンス」とは「データの具現化」、「オブジェクト」とは「インスタンス」を含むその他(「インターフェース」やその「コンポーネント」など)も含めて用いられる広義の言い回しらしい。「インスタンス」を「オブジェクト」と言い変えても問題なく、逆に「インターフェース」の「インスタンス化」などと言うと多分笑われる。
▲上へ [ 編集 ]
基本的な構文例
1クラス��侫.ぅ襪箸靴得言�気貮�廚鳳�己魅�薀垢離瓮愁奪匹鮓討喀个啓孫圓気譴襦�単一クラスで作成
小さなプログラムでデータ型が単純ならこれがわかりやすい。複雑で大掛かりになると通常(・・・というか通常・・・)クラスを分割して作成する。■1クラス内に従属するメソッドを収めた例
Main.java
public class Main { public static void main(String[] args) { subMethod1(); subMethod2(); } public static void subMethod1() { System.out.print("subMethod 1\n"); } public static void subMethod2() { System.out.print("subMethod 2\n"); } }※インスタンス生成なしにサクッとかけるので簡単!わかりやすい!
▲上へ [ 編集 ]
複数クラスで作成
(1)メインのクラスとサブのクラスを分割した例
ClassMain.java
※メインとなる Class。特に Main でなくともよいが main() プログラムが必須。
/** * main サンプルプログラム * メインで標準出力 -> Test2 実行 -> Test1 実行 * @auther : momo * @version : 1.0 */ public class ClassMain { public static void main(String[] args) { System.out.println("JAVA のサンプルプログラム"); /** * Test2 クラス呼び出し */ Test2 tes2Class = new Test2(); // インスタンス定義 tes2Class.tes(); // tes() の実行 /** * Test1 クラス呼び出し */ Test1 tes1Class = new Test1(); // インスタンス定義 tes1Class.tes(); // tes() の実行 /** * loopN 呼び出し -> データ渡し(引数・戻値)有 */ NewClass nClas = new NewClass(); int i = nClas.loopN("Print Word",11); System.out.println("戻り値 = " + i); } }※このようにクラスを別ファイルに分割すると面倒なので、メインクラス1つ内に複数のメソッドを連記すればそれでも多分動く。(・・・古えよりのプログラミング手法・・・)
ファイル(クラス)を分割すると分割されたクラスの使い回しとかできるので、大掛かりなシステムや分散して作成しやすいなどメリットがある。反面、頭が古い(・・・古えの呪文・・・)と付いていけない・・・。
(1-1)クラス(1)のサブクラス・メソッド Test1.tes()
Test1.java (単純なクラス呼び出し)
/** * Test1 クラス:単純な標準出力 * @auther : momo * @version : 1.0 */ public class Test1 { public void tes() { int numA = 1; System.out.println("No." + numA); } }
(1-2)クラス(1)のサブクラス・メソッド Test2.tes()
Test2.java (単純なクラス呼び出し)
/** * Test2 クラス:文字列連結と単純な標準出力 * @auther : momo * @version : 1.0 */ public class Test2 { public void tes() { /** * 文字列変数:strWd1 strWd2 strWd3 */ String strWd1 = "Hellow"; String strWd2 = " JAVA"; String strWd3 = " World.\n"; // \n 無しで下記出力は改行される。 // 標準出力 System.out.println(strWd1 + strWd2 + strWd3); } }
(1-3)クラス(1)のサブクラス・メソッド int x = NewClass.loopN(String,int)
NewClass.java (データ受け渡し有り)
/** * NewClass.loopN:データの受け渡し * this が無くとも正常動作するが、 * numN を直接使うと正常動作せず。 * @author xface-user */ public class NewClass { private int num; public int loopN(String strWd, int numN) { this.num = numN; for (int i = 1; i < num; i++) { System.out.println(i + " " + strWd); } System.out.print("\n"); return num; } }※this.
▲上へ [ 編集 ]
その他文字列処理、値参照とか
String strB = StrData; // 格納アドレス(参照)を渡す? String strA = strData.substring(0,5); // 文字列処理するが、参照渡し?※このへんかなり曖昧、値参照など理解する必要あり。
※this.intA などの使い方、理解など。
String strA = "北海道小樽市".substring(0,3); String strB = "東京都小金井市"; String strC = "北海道"; if ( strA == strC ) { 〜 処理 (a:true); } else { 〜 処理 (b:false); }これで System.out.print(strA); すると"北海道"がでるが、
strA == strC は常に (b:false) が実行される。
以下対策、
if ( strA.equals(strB) ) { 〜として処理する。(多分)
▲上へ [ 編集 ]
Java Package について
別に知らなくてもプログラムできますが・・・同名クラスの名前解決には必須と思われます。package のイメージ例
具体的なイメージ:eclipse- ProjectA(プロジェクト)
- (デフォルトパッケージ)
- ClassMain(メインのクラス)
- pkg.a(パッケージ)
- ClassSub(同名クラス) :: pkg.a.ClassSub
- pkg.b(パッケージ)
- ClassSub(同名クラス) :: pkg.b.ClassSub
- (デフォルトパッケージ)
具体的なコーディングサンプル
ちょっと見、普通のクラスと変わらないが同名のクラスがつかえることに注意。また、パッケージイメージ?を圧縮した.jar(JRA:実行可能な1圧縮ファイル??)とすることができる。
ProjectA/ClassMain.java
import pkg.a.*; import pkg.b.*; public class ClassMain { public static void main(String[] args) { pkg.a.ClassSub sub_A = new pkg.a.ClassSub(); sub_A.msgPrint(); pkg.b.ClassSub sub_B = new pkg.b.ClassSub(); sub_B.msgPrint(); } }
※パッケージを複数インポートする場合、上記のように * を使用。
※パッケージを1つ且つクラスを1つインポートする場合の例。
import pkg.a.Sub // で OK(・・・のはず・・・)
ProjectA/pkg.a/ClassSub.java
package pkg.a; public class ClassSub { public void msgPrint() { System.out.println("pkg.a.ClassSub の msgPring() 実行結果"); } }
ProjectA/pkg.b/ClassSub.java
package pkg.b; public class ClassSub { public void msgPrint() { System.out.println("pkg.b.ClassSub の msgPring() 実行結果"); } }
▲上へ [ 編集 ]
jar ファイルの作成
別に jar ファイルにしなくても実行できますが・・・- eclipse なら【エクスポート(o)】から【java】【JARファイル】
- デフォルトパッケージ及び各パッケージを選択し・・・
- jar マニフェストのメインクラスをしっかり指定して【終了】
jar ファイルの実行
java -jar <<ファイル名>>.jar
・・・で実行されます・・・
※注:jar マニフェストのメインクラス指定がないと実行されません。
▲上へ [ 編集 ]
関連ページ
- 開発環境関連
- JAVA 関連
- 音源変換メモ
▲上へ [ 編集 ]
2011年03月26日(土) 12:34:37 Modified by cafeboy1