トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF RSS ログイン

Javaの基本
















環境

 環境設定

http://java.sun.com/
JDK をダウンロードしてインストール

他でインストールしたディレクトリをコピーしても良い。
ただし、binにパスを通すこと。

 コンパイル

javac test.java

 実行

java test

変数

 

Java には大きく分けて

  • プリミティブ型
  • オブジェクト型(参照型)

の2種類の型が存在する。

プリミティブ型
byte 1バイト整数(-128〜127)
short 2バイト整数(-32768〜32767)
int 4バイト整数(-2147483648〜2147483647)
long 8バイト整数(-9223372036854775808〜9223372036854775807)
float 4バイト単精度浮動小数点数
double 8バイト倍精度浮動小数点数
char 2バイト文字データ(\u0000〜\uffff)
boolean 論理値 trueまたはfalse

オブジェクト型(参照型)

プリミティブ以外の全て。
配列もオブジェクト型。

 変数定義

int a;
Object b;

 値渡し、参照渡し

基本的には全て値渡し。
オブジェクト型の場合は、アドレスを値渡しするため参照渡しと説明されることもある。

渡し方
プリミティブ 値渡し
オブジェクト型 アドレスを値渡し

文法

 if

   if (a == 1) {
     System.out.println("a is 1");
   }
   

 for

   for (int i = 0; i < 10; i++){
     System.out.println(i);
   }

ループ中断処理

   for (int i = 0; i < 10; i++){
     if (i == 5){
       break; // i == 5 の時、ループを抜ける
     }
     System.out.println(i);
   }

ラベルを使ったループ中断処理

   end:
   for (int i = 0; i < 10; i++){
     for (int j = 0; j < 10; j++){
       if (j == 5){
         break end;
       }
       System.out.println(j);
     }
   }

ループのスキップ処理

   for (int i = 0; i < 10; i++){
     if (i == 5){
       continue; // i == 5 の時、以下の処理を行わずにループのはじめに戻る
     }
     System.out.println(i);
   }

   

 while

while

   while (i < 10){
     System.out.println(i);
     i++;
   }
   

do while

   do {
     System.out.println(i);
     i++;
   } while(i < 10);

 switch

   switch (i) { 
   case 1:
     System.out.println("1です");
     break;
   case 2:
   case 3:
     System.out.println("2か3です");
     break;
   default:
     System.out.println("その他です");
     break;
   }
   

演算子

 算術演算子

演算子 意味
a + b a と b を足す
a - b a から b を引く
a * b a と b をかける
a / b a を b で割る
a % b a を b で割った余り
a++ a の値を1増やす(インクリメント)
a-- a の値を1減らす(デクリメント)

 比較演算子

オブジェクト型の比較は equals メソッドを使うこと。
演算子 意味
a == b 等しい
a != b 等しくない
a > b a が b より大きい
a >= b a が b 以上
a < b a が b より小さい
a <= b a が b 以下

 論理演算子

左辺、右辺両方を判定する
演算子 意味
a & b 論理積(かつ) AND
a | b 論理和(または)OR
a ^ b 排他的論理和 XOR
!a 否定

 ショートサーキット演算子

必要ない場合は右辺は判定されない。
演算子 意味
&& 論理積(かつ)
|| 論理和(又は)

 ビット操作演算子

演算子 意味
>>n 算術右シフト(符号付 n ビット右シフト)
>>>n 論理シフト(0 埋め n ビット右シフト)
<<n n ビット左シフト
~ ビット反転

配列

 通常配列

   int[] a = new int[10];
   int[] b = new int[] {1,2,3,4,5};
   int[] c = {1,2,3,4,5};
   
   System.out.println(a.length);
   System.out.println(b.length);
   System.out.println(c.length);
   

 多次元配列

   int[][] a = new int[10][20];
   int[][] b = new int[][] { {1,2}, {3,4}, {5,6,} };
   int[][] c = { {1,2}, {3,4}, {5,6,} };
   
   System.out.println(a.length + " " + a[0].length);
   System.out.println(b.length + " " + b[0].length);
   System.out.println(c.length + " " + b[1].length);
   

 動的配列

Vector や ArrayList クラスを使う

   Vector vec = new Vector();
   
   vec.add("test1");
   vec.add("test2");
   vec.add("test3");
   
   System.out.println(vec.get(0));


 連想配列

   Hashtable hash = new Hashtable();
   
   hash.put("key1","hogehoge1");
   hash.put("key2","hogehoge2");
   hash.put("key3","hogehoge3");
   
   System.out.println(hash.get("key2"));

 ジャグ配列

   int a[] = {1,2,3};
   int b[] = {4,5};
   int c[][] = new int[2][];
   c[0] = a;
   c[1] = b;
   System.out.println(c.length + " " + c[0].length + " " + c[1].length);

配列は Objectクラスを継承しているので、以下のようなことも可能

   int a[] = {1,2,3};
   int b[] = {4,5};
   Object o[] = new Object[2];
   o[0] = a;
   o[1] = b;
   
   Object o2 = o;
   System.out.println(o2 instanceof Object[]);
   System.out.println(o2.getClass().isArray());

関数

戻り値、引数なし

   public void test(){
     //なにか処理
   }
   

戻り値、引数あり

   public int test(int a, int b){
     return a + b;
   }


オブジェクト指向

 クラス

   class test {
     int a;
     int b;
   }

 インターフェイス

   interface itest {
     public void test();
     public void test2(int a, int b);
   }
   

 継承

クラスがクラスを継承する場合は extends
クラスがインターフェイスを実装する場合は implements

   class test extends Frame implements Runnable {
     public void run() {
     
     }
   }

インターフェイスがインターフェイスを継承する場合は

   interface itest extends Runnable {
   }
  
   

修飾子

修飾子 説明
アクセス修飾子 public 制限はありません。どこからでもアクセス可能です。
protected 同一パッケージ内、またはそのサブクラスからのみアクセス可能です。
private 同一クラス内でのみアクセス可能です。
修飾子 abstract 抽象メソッドや抽象メソッドをもつクラスに指定します。 インターフェースは元々抽象メソッドしか定義できない為、省略されることが多いです。
final 変数を変更したくない場合、このクラスを継承することを禁止する(サブクラスを作成させたくない)場合に指定します。
strictfp 「float」や「double」の浮動小数点を用いた演算を厳密 (プラットフォームに依存しない(IEEE754に従う))に行いたいクラスに指定します。
static クラス固有のものとして、同一クラスからなる全インスタンスに共有させる場合に指定します。
transient シリアライズ(バイトストリーム変換)の時に値を保存したくない(一時的に使用する値・初期化したい値)フィールドに指定します。
volatile コンパイラによる最適化をさせたくないフィールドに指定します。(マルチスレッド等による参照値の相違をなくします。)
native プラットフォーム依存のコードで定義します。 (型、メソッド名、引数の型といったインターフェースにみを定義し、中身はC言語などの他の言語を用いて実装します。)
synchronized マルチスレッド環境において、同期処理(インスタンス単位で排他制御)させる場合に指定します。

[カテゴリ: プログラミング言語 > 基本]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2009年12月25日 21時12分15秒