おはようございます!
今回はchaputer15まとめ前編です
参照はJava言語ではとても重要な概念です。
しかし、理解しにくい部分でもあるので注意してみていきます。
参照とは何かというと結構答えにくいものです。
なので、図で説明するとこんな感じになりますwww
右側が作成されたオブジェクト。
それが変数diceに格納された左側の状態になります。
しかし、実際は少し違って下の図のような感じです。
で、左側のdiceの中にあるのヒーブジェクトではなく参照というもの・・・・
オブジェクトは右端にある青いツイタテミタイナブロックで、変数の中でなくヒーブと呼ばれるメモリ領域にあります。
参照は単なるオブジェクトへのリンク情報で、Javaシステムでは、疑似的なオブジェクトとみなして使うことができるようになっています。
1.参照を使う理由
参照を使う理由は、サイズが小さいためコピーに時間がかかりません。
2.参照型
Java言語はすべての要素に何らかの型があり、参照の型は参照型という。
同じ参照型でもその参照がリンクしているオブジェクトの種類によってさらに
クラス型、配列型、インターフェイス型に分けられます。
配列もサイズが大きくなるので、本体はヒーブメモリに置き、
それを参照を使い操作します。
配列はオブジェクトの一種です。
配列についてはもう少し先で出てくるのでその時に詳しく学習します。
☆参照型変数の代入はリモコンが増えるだけ。
参照型の変数を他の変数に代入しても参照がコピーされるだけで、新しいオブジェクトができるわけではではない。
イメージとしてはこんな感じです。
参照型変数の代入はリモコンが増えるだけという説明をしたので、今度は実際に組んで確かめてみます。
その前にここでも同じくDiceクラスを作っておきます
package exercise;
public class Dice {
private int val;
private String color;
public Dice (int val,String color) {
this.val = val;
this.color = color;
}
public Dice(String color) {
this(1,color);
}
public Dice() {
this(1,"白");
}
public void play() {
val=(int)(Math.random()*6)+1;// ここにコードを挿入
}
public int getVal() {
return val;
}
public void setVal(int val) {
this.val=val;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color=color;
}
}
で、
参照型の変数代入のプログラムがコチラ
package exercise;
public class Sample_sample1 {
public static void main(String[] args) {
Dice dice1 = new Dice();
Dice dice2 = dice1;
dice1.play();
System.out.println("dice1.getVal() ="+dice1.getVal());
System.out.println("dice2.getVal() ="+dice2.getVal());
// ここにコードを挿入
}
}
}
こんな感じで( ^ω^)・・・
参照型変数dice1の値をdice2に代入し同じオブジェクトを参照することを確かめます。
Diceオブジェクトを参照をdice1に代入
次に、dice1を同じDice型の変数dice2に代入
ここでは、新たにオブジェクトを作ったわけではなく、dice1にある参照をdice2に代入(コピー)しただけです。
今回は最後にポイントを説明して終わりにしようかな?
point 参照型の変数の代入
参照型変数の代入で、A=B;にすると、AにはBと同じ参照がコピーされるだけ
Java言語では、new演算子によってのみ、オブジェクト新規作成が可能。
javaでは特別な単語が何かの値を表すために使います。
よく使われるものは true&false。
これは bloonean型の 値でした。
では、nullは何型のどんな値でしょうか?
ということで前置きはこの辺にして( ´艸`)
nullについて詳しく学習していきます。
1.nullとは?
nullは、どんなオブジェクトにもリンクしてない参照です。
つまり、
です。
イメージはこんな感じ
nullは参照型の値ではありますが、無効な値です。
2.nullの用途
nullが無効な値と言っても参照型であることは間違いないありません。
ちなみに参照型の変数ならどんな型の変数にでもnullを代入し初期化することが可能です。
上の図はDice型の変数に代入した時のイメージ・・・
nullがセットされているのでコンパイラはdiceには参照型の変数が入っているとみなします。
ただ、次のようなコードを書いてもコンパイルエラーにならないので注意!!!
Dice dice = null();
dice.play();
これは、コンパイルエラーにはなりませんが、実行すると実行例外というものが起こります。
このエラー・・・Javaではよく目にするエラーです。
そのエラーを実際に見ていきます。
package exercise;
import sample.Dice;
public class Sample_sample {
public static void main(String[] args) {
Dice dice=null;
dice.play();
// ここにコードを挿入
}
}
で、Ecripsで起動してみるとこのようなエラーメッセージが出ます
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "exercise.Dice.play()" because "dice" is null
at exercise.Sample_sample.main(Sample_sample.java)
簡単に言うと
というものです。
あと、宣言しただけでは何も入ってない空箱の状態ですので・・・
初期化されていない変数を使って何かしようとするとコンパイルエラーになるので注意しましょうwww
ここまでで、chaputer15まとめ前編終了
ご覧いただきありがとうございました。
BY マんタ
参考書は__________________________________
川場 隆 Kawaba Takashi
秀和システム