Today: Yesterday: Total: Online:
カテゴリー
その他
  • RSS1.0
  • RSS2.0
  • atom0.3
  • valid XHTML1.0
  • valid CSS2
  • Credit
RSSリーダーで購読する | この日記のはてなブックマーク数 | プロフィール
コメントが一番多い記事(233コメント):人の心理の裏をかくホームページ集客術:リピータになってもらうためには
ツイートが一番多い記事(94ツイート):ちょっと待て!twitterやfacebookに子供の写真を掲載する親達への警告
いいねが一番多い記事(574いいね):facebookスパムに要注意。なりすましの見分け方とアカウント乗っ取りの手口(2013年度版)

[ カテゴリー » JAVA ]

カテゴリー » JAVA February 03, 2011

equalsとhashcode ID:1296715470


equals(Object)メソッドを用いる場合は、それがオーバライドされているかどうかを確認する必要がある。
オーバライドされていたら、equalsはそのまま使える。


・equals(Object)メソッドをオーバライドしているクラス

Boolean、Byte、Character、Double、Float、Integer、Long、Short、String

・equals(Object)メソッドをオーバライドしていないクラス

Class、Process、Runtime、StringBuffer、Thread、ThreadGroup


例)
StringBufferで比較したら、値が違った


String test1 = "aaa";
String test2 = "aaa";

StringBuffer test3 = new StringBuffer("aaa");
StringBuffer test4 = new StringBuffer("aaa");

if(test1.equals(test2)){
System.out.println("string:等しい");
}
else{
System.out.println("string:等しくない");
}

if(test3.equals(test4)){
System.out.println("stringBuf:等しい");
}
else{
System.out.println("stringBuf:等しくない");
}

実行結果
string:等しい
stringBuf:等しくない


StringBufferはオーバーライドしていないので、比較が違ってきてしまった。


比較するには、
「equals(Object)メソッドをオーバライドする」
「同時にhashCodeメソッドをオーバライドして、「等価なオブジェクトは等価なハッシュコードを保持する必要がある」


http://www.atmarkit.co.jp/fjava/javatips/174java059.html

— posted by midilin @ 03:44PM

カテゴリー » JAVA February 03, 2011

Java cloneとは ID:1296714268


同じ型のオブジェクトからオブジェクトへ値の複製処理をしたい時
setter/getterメソッドで一個一個セットするのが面倒なので
Javaのcloneを使うとコピーできる。


クラスAはクローン機能を提供したい場合、java.lang.Cloneableインタフェースを実装し、
java.lang.Object#clone()をオーバーライドすればよい。

public class A extends Cloneable {
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
//throw (new InternalError(e.getMessage()));
return null;
}
}
}
http://www.syboos.jp/java/doc/object-clone.html

— posted by midilin @ 03:24PM

カテゴリー » JAVA February 03, 2011

メンバ変数とローカル変数 ID:1296713930


メンバ変数はオブジェクトの状態を保持する変数
オブジェクトに属し、どのメソッド、コンストラクタにも属さない


ローカル変数は各メソッド、コンストラクタに限定して使用する変数
他のメソッド、コンストラクタから使用することはできない。

public class ExClass4 {
//メンバ変数
int memberVar = 10;
void methodA() {
//methodAに属するローカル変数localVarA
int localVarA = 20;
System.out.println("メンバ変数(memberVar):" + memberVar); //(5)
System.out.println("ローカル変数(localVarA):" + localVarA); //(6)
}


public static void main(String[] args) {
ExClass4 object4 = new ExClass4();
object4.methodA();

}
}

http://www.javaroad.jp/java_class4.htm

— posted by midilin @ 03:18PM

カテゴリー » JAVA February 03, 2011

Java 参照渡し 値渡し StringBuffer ID:1296712117


・値渡し:普通の関数の値渡し
プリミティブ型(int,boolean等)であれば値渡し

・参照渡し
JAVA言語は配列、及びオブジェクトは参照渡し


String型は参照渡しができないので、
もし参照渡しをしたければ以下のようにStringBufferクラスを使う

http://wisdom.sakura.ne.jp/programming/java/java23.html
http://www.tec-q.com/note/java/
http://d.hatena.ne.jp/haradago/20080226/p1


public static void main(String[] args) throws IOException {


ArrayList array = new ArrayList();
array.add("a");
func_array(array);
for (int i = 0; i < array.size(); i++) {
System.out.println(array.get(i));
}

String str = "c";
func_str(str);
System.out.println(str);

StringBuffer buf = new StringBuffer("e");
func_stringBuf(buf);
System.out.println(buf);


String hairetu[] = new String[]{"FFF","GGG"};
func_hairetu(hairetu);

for (int i = 0; i < hairetu.length; i++) {
System.out.println(hairetu[i]);
}


}

static private void func_array(ArrayList array){
array.add("b");
}

static private void func_str(String str){
str = str + "d";
}

static private void func_stringBuf(StringBuffer buf){
buf.append("f");
}

static private void func_hairetu(String[] str){
str[0] = "hhh";
}



実行結果

a
b
c
ef
hhh
GGG


オブジェクトの参照渡し例
class test {
String name;
int age;

public static void main(String args[]) {
test hina = new test();
hina.name = "成瀬川なる";
hina.age = 17;
System.out.println("名前\t\t年齢");
hina.write();

ref(hina , "前原しのぶ" , 13);
hina.write();

}

void write() {
System.out.println(name + "\t" + age);
}

static void ref(test obj , String name , int age) {
obj.name = name;
obj.age = age;
}
}

— posted by midilin @ 02:48PM

カテゴリー » JAVA February 03, 2011

暗黙的スーパーコントラクター ID:1296710274


サブクラスのコンストラクタは、その処理の最初でスーパークラスのコンストラクタを呼び出す。
スーパークラスのコンストラクタが複数ある場合、「どのスーパークラスのコンストラクタを呼ぶか」、
つまりどの引数のコンストラクタを呼ぶのか指定しないといけない。

しかし、一つだけスーパークラスのコンストラクタを省略できる場合があり、
スーパークラスの引数なしのコンストラクタ、つまり「super();」を呼ぶ場合
このコンストラクタを呼び出す場合に限り、スーパークラスのコンストラクタの呼び出しを省略できる。


スーパークラスの暗黙的コンストラクタ呼び出しは、
引数のないコンストラクタを呼び出すので、
引数を持つコンストラクタだけしか
定義していない場合はコンパイルエラーとなる。

class Oya {
Oya(String str) {
System.out.println("My name is " + str + "!");
}
}
class Ko extends Oya {//Oyaを継承
Ko() {
// 暗示的に Oya() が呼び出される
System.out.println("I am Ko!");
}
}
class Main {
public static void main(String[] args) {
Ko obj = new Ko();
}
}


上記の場合、コンパイルエラーとなり
class Oya {
Oya(String str) {
System.out.println("My name is " + str + "!");
}
}
class Ko extends Oya {
Ko() {
super("sugai"); // 明示的スーパークラスコンストラクタ呼び出し
System.out.println("I am Ko!");
}
}
class Main {
public static void main(String[] args) {
Ko obj = new Ko();
}
}
スーパークラスのコンストラクタは super() で明示的に参照できるので、
上記のように行うとコンパイルエラーはなくなり、
実行結果として
My name is sugai!
I am Ko!
と出力される。


http://oshiete.goo.ne.jp/qa/2855972.html
http://msugai.fc2web.com/java/overrideConstructor.html

— posted by midilin @ 02:17PM

カテゴリー » JAVA February 03, 2011

Java コンストラクタとは ID:1296709816


オブジェクトを生成する際に必ず実行される初期化処理を記載した部分
コンストラクタは複数定義できる

public class SetNumber {
private int numberA;
private int numberB;
private double numberC;
//引数を3つ持つコンストラクタ
SetNumber (int a, int b, double c) {
numberA = a;
numberB = b;
numberC = c;
}
//int型の引数を1つ持つコンストラクタ
SetNumber (int a) {
numberA = a;
numberB = 20;
numberC = 250.35;
}
//double型の引数を1つ持つコンストラクタ
SetNumber (double c) {
numberA = 10;
numberB = 20;
numberC = c;
}
public static void main(String[] args) {
//コンストラクタの呼び出しにdouble型の引数1つを指定
SetNumber objectA = new SetNumber(110.55);
------その他の処理------
}
}


http://www.javaroad.jp/java_class6.htm

— posted by midilin @ 02:10PM

カテゴリー » JAVA February 03, 2011

Java ガーベッジコレクション ID:1296701709


Garbage Collection

オブジェクトはメモリ容量の許す限り幾つでも作成することが可能であり、
明示的にメモリ上から削除する必要がない。
Java 実行環境(runtime environment)は、それ以上使わないオブジェクトを特定し、削除してくれます。
このプロセスは Garbage Collection (ゴミ集め)と言う。

http://msugai.fc2web.com/java/perform/garbage.html

— posted by midilin @ 11:55AM

カテゴリー » JAVA February 03, 2011

Java プリミティブとは ID:1296691783


プリミティブ:原始的。プリミティブ型はJavaにおいて値を扱うための基本的な型。
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または
を示す。
http://www.makino-style.org/education/jed03.html

— posted by midilin @ 09:09AM

カテゴリー » JAVA February 03, 2011

アサーションとは ID:1296691567


アサーションは、プログラムの仕様をソースコードに明記するもの

プログラムの実行時には発生し得ない場合を false とする boolean 式を含み、
仮に false になるようなら java.lang.AssertionError を発生させる

AssertionError が発生する場合は、プログラムが予期しない動作を実行していることを示している。

// x が null だと AssertionError
assert x != null;

// y が 負だと AssertionError
// 詳細メッセージは "y = " + y
assert y >= 0: "y = " + y;

http://msugai.fc2web.com/java/assertion.html

— posted by midilin @ 09:06AM

カテゴリー » JAVA February 02, 2011

Java finalとは ID:1296636519


 クラス宣言時にfinalを使用:そのクラスはサブクラスで継承できなくなる
 メソッド宣言時にfinalを使用:そのメソッドはサブクラスでオーバーライドできなくなる
 メンバ変数宣言時にfinalを使用:するとそのメンバ変数は定数として扱われる
http://www.javaroad.jp/java_class12.htm

— posted by midilin @ 05:48PM


カウンター