【Java】リフレクション周り

型を扱う

呼び出し先メソッド

public Orm find(int id){}

失敗例:Integerを引き数にとる

Class<?> type = Class.forName("java.lang.Integer");
Class<?> clazz = Class.forName("orm.EmployeeOrm");
Method method = clazz.getDeclaredMethod("find", type);

method.invoke(clazz.newInstance(), 1);

成功例:intを用意して引き数に取る

Class<?> type = int.class;
Class<?> clazz = Class.forName("orm.EmployeeOrm");
Method method = clazz.getDeclaredMethod("find", type);

method.invoke(clazz.newInstance(), 1);

【Java】連想配列を扱う

Map<String, String> RELATED_TABLE = new HashMap<String, String>() {
    {
        put("hoge", "ほげ");
        put("fuga", "ふが");
        put("piyo", "ぴよ");
    }
};


for(Map.Entry<String, String> t: RELATED_TABLE.entrySet()){
    System.out.println(t.getValue()+":"+  t.getKey());
}

【Eclipse】ライブラリのインポートメモ

  1. ライブラリのDL
  2. プロジェクトルートに lib ディレクトリの作成
  3. lib ディレクトリへDLしてきた .jar を格納
  4. Eclipseの起動
    • 起動してある場合はサイドバーのプロジェクトツリーの対象のプロジェクトを右クリック>リフレッシュ
  5. プロジェクトツリーから lib > DLしたライブラリ.jar >右クリック> ビルド・パス> ビルド・パスの追加

【Java】スレッド

マルチスレッドの書き方
MacBookでテストしてみたものの性能良すぎて動作確認できてない模様
もしかしたら間違ってるかもしれないけどサンプル通りだからあってるはず!

 
public class ThreadTest {
	public static void main(String[] args) {
		ExThread et1 = new ExThread();
		ExThread et2 = new ExThread();

		et1.go();
		et2.go();
		
		System.out.println("ここまで継承、ここからインターフェイス");
		
		ImpThread it1 = new ImpThread();
		ImpThread it2 = new ImpThread();

		it1.run();
		it2.run();
	}
}

// その1:継承
class ExThread extends Thread{
	void go(){
		for(int i=0;i<50;i++){
			System.out.println(this.getName());
		}
	}
}

// インターフェイスの使用
class ImpThread implements Runnable{
	@Override
	public void run() {
		for(int i=0;i<50;i++){
			System.out.println(i);
		}
	}
}

【Java】ビット操作

すごいあやふや
そのうち理解したら更新

NOT演算子(~)

数値がプラスの場合+1してマイナスにする
マイナスの場合-1してプラスにする

byte x = 10;	// 0000 1010

System.out.println(~x); // 1111 0101 // -11

AND演算子(&)

ビット同士を比較して両者が1になっているもののみを1とする

byte x = 10;	// 0000 1010
byte y = 6;		// 0000 0110
		
System.out.println(x&amp;y); // 0000 0010 // 2

OR演算子(|)

ビット同士を比較し、どちらかが1になっていものを1とする

byte x = 10;	// 0000 1010
byte y = 6;		// 0000 0110
		
System.out.println(x|y); // 0000 1110 // 14

XOR演算子(^)

2つの値のここのビット同士を比較し、
どちらか一方のみが1になっているビットを1とする

byte x = 10;	// 0000 1010
byte y = 6;		// 0000 0110
		
System.out.println(x|y); // 0000 1100 // 12

右シフト(>>)

すべてのビットを指定された分だけ右にシフトさせる
左端には最上位ビットと同じ符号が入る

byte x = -10;	// 1111 0110

System.out.println(x&gt;&gt;2); // 1111 1101 // -3

符号なし右シフト(>>>)

すべてのビットを指定された分だけ右にシフトさせる
左端には0が入る

byte x = 10;	// 0000 1010

System.out.println(x&gt;&gt;&gt;2); // 0000 0010 // 2

左シフト(<<)※タグに認識されるため全角

すべてのビットを指定された分だけ左にシフトさせる
右端には0が入る

byte x = 10;	// 0000 1010

System.out.println(x<<2); // 0010 1000 // 40
//※タグに認識されるため全角

【Java】例外処理

class Test{
	// throws [例外クラス]
	// 例外が発生した場合、呼び出し元で対応させる
	void hoge() throws Exception {
		// 処理
	}
}

public class Anomaly {
	// mainでthrowsをし、try/catchをしなかった場合JVMは停止する
	//public static void main(String[] args) throws Exception{
	public static void main(String[] args){
		Test test = new Test();
		try{
			test.hoge();
		} catch (Exception ex){
			ex.printStackTrace();
		} finally{
			// 必ず実行される
		}
	}
}

【Java】オーバーライドとオーバーロードの違い

オーバーライド

 スーパークラスで定義されたメソッドをサブクラスで再定義すること

 

class TestA{
	void hoge(){
		// 処理
	}
}
class TestB{
	void hoge(){
		// TestAと違う処理が書ける
	}
}

オーバーロード

 メソッド名が同一で引数が異なるもの
 型、数、順番が同じものはエラー

class Test{
	void hoge(){
		// 処理
	}
	void hoge(String str){
		// String型が引数にあるときの処理
	}
	void hoge(int num){
		// int型が引数にあるときの処理
	}

}

【Java】変数、メソッドの修飾子

変数、メソッドの修飾子

省略時 同じパッケージ内からのみアクセスが可能

public 全ての場所からアクセスが可能

protected 同じパッケージ及びサブクラスからのみアクセスが可能

private 同じクラス内からのみアクセスが可能

final 継承・オーバーライドのできないメンバ

static インスタンス化せずに使用できる

static:

基本的にインスタンス名ではなくクラス名に対して呼び出す。

 

class Test(){
	static void method(){
		// 処理
	}
}
// ~~~~~~~~~~~~~~~~~

Test hoge = new Test();
hoge.method() 	// ☓
Test.method() 	// ○