メンバとは
クラスには属性を表す変数と、
操作を表すメソッドを定義します。
このクラスに用意した変数やメソッドを総称してメンバと呼びます
。
メンバ変数
メンバ変数とはクラス定義の中で下記の部分です。
クラス定義をしている"{"と"}"の中に記述され、そしてメソッドの外に記述されている変数のことです。
class Television{
/**これ*/
int channelNo;
String name;
//クラスの中にあり、メソッドの外にある
void setChannel(int newChannelNo){
channelNo = newChannelNo;
}
void dispChannel(){
System.out.println("現在のチャンネルは " + channelNo + " です");
}
}
では、メンバ変数に直接値を格納するのを禁止し、必ずメソッド経由でしかメンバ変数の値を格納したり参照したり出来ないようにするにはどうすればいいでしょうか。そういった場合はメンバ変数の定義をする時に先頭に「private」を付けるようにします。
class Television{
private int channelNo;
2つめのclassはstaticを付けない。
thisはインスタンスを指す。this.nameだとインスタンス変数に代入する。
修飾子
static装飾子
classのメンバにstaticを付けると、
クラスをインスタンス化しなくてもアクセス出来るようになります
このようなものを静的メンバと呼ぶ。
public class A{
static String hoge = "静的フィールド";
static void foo(){
System.out.print("静的メソッド");
}
}
public static void main(String[] args){
System.out.println(A.hoge);
A.hoo();
//インスタンス化しなくても、呼び出すことが可能
//new Aしなくても呼べる
}
注意点:
静的メソッドからはthisにはアクセスできない
静的メソッドはインスタンスではないので、
インスタンスを示すthisには当然アクセス出来ない
静的フィールドはインスタンスフィールドとは違い、内容を変更した場合
全てのインスタンスに影響を及ぼします。(グローバルな変数みたいなことかな)
静的フィールドの濫用や使用はクラスとの間の依存性が強くなり
、結果可読性が悪くなります。
一般的には静的フィールドは読み取り専門
の用途で利用することをオススメします。
読み取り専用で使いましょう!
また、むやみに変数をstaticにしてはいけません。依存性が強くなるので。
Human classでage変数を作る時、
static ageだと全員年が共通になってしまったりするので。。
変数
//型 変数名 ;
int number;
String name;
int number = 1;
String name = "test";
//クラスで定義した型
MovieType movie = new MovieType<>();
List<MovieType> movies = new ArrayList<MovieType>();
//MovieTypeエンティティが入ったリストの作成が可能に
//movies[0]の中にはmovie.nameやmovie.numberなどで取り出せる(定義していればね)
独自のClassの作成
データ
配列
配列とlistはjavaでは別。
要素数を最初に指定して作る。後で要素数を追加は基本無理なので定数みたいなもんかな。
System.arraycopy()を使えば疑似的に増やすことは可能。
あんまり使わないみたいですね。
配列変数名は複数形が基本
//型[]配列名;
//配列名 = new 型[要素数];
String[]arrays1 = new Arrays[3];
//初期値を入れてない場合は0がデフォルト値になる感じかな。
//初期化
//型[]配列名 = {代入する値1,代入する値2};
String[]arrays1 = {"1","2"};
//指定した値で全て埋めるにはArray.fill(変数名,埋める値);
Array.fill(arrays,0)
List
要素を後から追加が可能!
・要素の取得が早いが、挿入や削除が遅いArrayList
・要素の取得は遅いが、挿入や削除が早いLinkedList
//List<型> リスト名 = new ArrayList<型>();
List<String> list1 = new ArrayList<>();
//<>は左辺で型を宣言しているため、型の省略が可能
//リスト名.add(値)
//リスト名.set(書き換えたいindex,書き換える値)
//リスト名.get(取得したいindex)
list.add("1");
list.set(1,"3");
list.get(1);
配列とListの違い:
・配列
最初の時点で要素数が確定している
何度もピンポイントな要素にアクセスする場合
・List
要素の入れ替えが多い場合
後から追加する必要がある場合
Map
インデックスに名前を付けられるMap
key,valueのやつ
・HashaMap
・LinkedMap
・TreeMap
//Map<キーの型,値の型> マップ名 = new HashMap<キーの型,値の型>();
Map<Integer,String> map1 = new HahsMap<>();
//マップの代入
//マップ名.put(キー,値)
//取得
//マップ名.get(キー)
map1.put(1,"a");
map1.get(1);
Mapは通常「HashMap」を使います。他には「LinkedMap」「TreeMap」があります。