プログラムは年々簡単にできるようになってきていますね。
特にゲームはUnityとか。
今はもっと簡単なやつがあるか?
移り変わりが早い!
その中でも、基本は押さえておかないとと思って、Javaについて色々と勉強したときの備忘録。
キーボードからの入出力
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str=br.readLine();
このままだと、String型(文字列)としてしか入力されていないので、数字として取り扱いたい場合は以下を追記する。
int num=Integer.parseInt(str);
ファイルに出力
PrintWriter pw=new PrintWriter(new bufferedWriter(new FileWriter(“test1.txt”)));
pw.println(“hello!”);
pw.println(“bye!”);
pw.close();
ファイルから入力
BufferedReader br=new BufferedReader(new FileReader(“test1.txt”));
String str1=br.readLine();
String str2=br.readLine();
br.close();
public static void main(String[] args) は決まり文句として覚えてください。
念のため,一つ一つの言葉の意味をざっと説明しておきます。 詳しい意味は,この講座を読み進むにつれて明らかになるはずです。
public は,メソッド(ここでは main)の利用を誰にでも許可するということです。
static は,メソッドがコンパイルの直後から存在するということです。
void は,メソッドが値を返さないということです。
String[] args は,コマンドラインで入力した引数(ひきすう)が入る文字列の配列です。 コマンドライン引数については後で詳しく説明します。 なお,args という綴り自体に意味はありません。 C言語では習慣的に argv と書きますが,Javaでは args と書く人と argv と書く人がいます。 さらに,String[] args という書き方と,String args[] と書く人とがありますが,まったく同じことです。 今は String[] args という書き方が優勢です。
★はJavaの強みである3つの機能
クラス(名前:car)
サブクラス(名前:RacingCar)
フィールド(性質:型名)
privateメンバ:外部からアクセスできないようになる。(設計上重要)
★カプセル化★
上記のように、保護したいメンバにprivateをつけて勝手にアクセスできなくする機能のこと。
protectedメンバ
サブクラスからはアクセスしたい場合、privateからprotectedに変更する。
変数:箱
数値や文字を入れる箱
メソッド(機能:戻り値の型)
publicメンバとして、外部からのアクセスは一度ここを介して、OKならprivateメンバのフィールドへ書き込みを許可するのが設計上重要です。
public:誰でもアクセスできるよ~
private:クラスからしかアクセスできないよ~
引数(数字を扱うかどうか?みたいな)の有り無し
【外部からクラスへ】
bikenumber():引数に数字がない場合
bikenumber(int n):引数に数字があるの場合
戻り値(returnで呼び出し元に数字を返すかどうか?みたいな)の有り無し
【クラスから外部へ】
void bikenumber():戻り値に数字が無い場合
int bikenumber():戻り値に数字がある場合
コンストラクタ(初期化:オブジェクトのメンバに自動的に初期値を設定する)
記述形式がメソッドとよく似ているが、違います。
1。戻り値がない
2。名前はクラス名と同じ
3。コンストラクタを自由に自分で呼び出す記述はできない。
まっ、コンストラクタで初期化しなくても、intやdoubleと型を指定した段階で、勝手に初期化されているのであんまり必要はないけどね。
あと、メソッドの時と同じで、オーバーロードもできますよ。
フィールド+メソッド=クラスのメンバ
carクラスで一台車を作ると=オブジェクト(インスタンス)が一つできる
car rapan;
rapan=new car();
car rapan=new car();としても記述できる。どっちも一緒。
これで、rapanという変数にオブジェクトが作成されました。
素体人形を作って、それに髪の毛とか目とか好きに作れる状態。
やっぱなし、rapanという名前を消したいおいうときは以下のように記述する。
rapan=null;
nullを代入すると、オブジェクトを指し示さなくなる。(素体人形で言えば、髪の毛とか目を飾り付けにいけない。素体人形がどこにあるか分からない状態。)
インスタンス変数
オブジェクトに関連付けられているフィールドのこと。
インスタンスメソッド
オブジェクトに関連付けられているメソッドのこと。
オブジェクトが作成されたときに初めてアクセスすることができるフィールドやメソッド(メンバ)のことだね。
オブジェクトに関連付けられていないフィールドやメソッド(メンバ)を持つ事もできるんです!それが下の二つ。
クラス変数
クラスに関連付けられているフィールドのこと。
クラスメソッド
クラスに関連付けられているメソッドのこと。
宣言・定義方法【staticと修飾子をつけるだけ。】簡単だね!
インスタンスメソッドは、オブジェクトが作成されなければ呼び出せない。
クラスメソッドは、オブジェクトが作成されていなくても呼び出せる。
だたし、特定のオブジェクトに関連付けられているインスタンス変数・インスタンスメソッドにアクセスできない。
★メソッドのオーバーロード★(多様性)(多重定義:over-loading)
一つのクラスに何個も同じメソッドを使うこと。(ただし、引数の型や個数が異なるようしておく。)
例:一つのクラスに三つ入ったタイプ。
public void bikegass(int n);
public void bikegass(double g);
public void bikegass(int n,double g);
このように、一つの名前(上ではbikegass)が状況に応じて別々のはたらきをもつことを多様性という。
メソッドのオーバーライド
スーパークラスとサブクラスに同じメソッドがある場合、サブクラス内のプログラムからメソッドを呼び出すと、サブクラスに記述されたメソッドが実行される。
例:
class Car(){
public void show(){
}
}
class RacingCar(){
public void show(){
}
}
class shiken(){
public static void main(String[]args){
RacingCar a=new RacingCar;
a.show();//こうすると、class RacingCar()内のpublic void show()が呼び出される。
やさしいjavaの第10章は一覧表でまとめておいた方が良いかもね。
文字の場合:char 囲いは’a’
文字列の場合:String 囲いは”moziretu”
★継承★
例:車クラスとレーシングカークラス
車クラス:スーパークラス
レーシングカークラス:サブクラス
車クラスを拡張して、レーシングカークラスを作る。
class car;
class re-shingucar extends car;
これで、carクラス内のフィールド及びメソッドはそのまま利用でき、追記でレーシングカークラスの作成ができる。
this():そのクラスの別のコンストラクタを呼び出す
this.○:ローカル変数とインスタンス変数が同じ名前の場合はthis.をつけて区別できる。
例:
public Car(){
}
public Car(int a,intb){
this();//これでpublic Car()のコンストラクタを呼び出すことができる。
}
super():そのクラスのスーパークラスのコンストラクタを呼び出す
super.○:サブクラスからスーパークラスの同じ名前のメンバにアクセスする場合はsuper.をつけて区別できる。
例:
スーパークラス
public Car(int a,intb){
}
サブクラス
public RacingCar(inta,intb,intc){
super(a,b);//これでpublic Car(inta,intb)のコンストラクタを呼び出すことができる。
}
final:クラスやメンバにfinalをつけると、変更できなくなる。」
・メソッドの場合:サブクラスでオーバーライドできなくなる。
・フィールドの場合:値を変更できなくなる。
・クラスの場合:クラスを拡張できなくなる。(サブクラスを宣言できなくなる。)
抽象クラス
クラスの前にabstract(抽象クラス):オブジェクトが作成できなくなる。Car rapan=new Car();とか新しく作れなくなる。
クラスの前にabstract(抽象メソッド):処理内容が定義されていないメソッドをもつ。メソッドは書けるが処理は書かない。
じゃあ、どうやって使うの???これは、サブクラスを作ったときに威力を発揮する。
【抽象クラスから継承した抽象メソッドの内容をサブクラスできちんと定義してオーバーライドする。】
例:
抽象クラスで abstract void show();と書いて、抽象クラスを継承したサブクラスでpublic void show()と記述する。
そして、抽象クラスの箱にサブクラスのオブジェクトを作成しshow()を実行すると、show()が実行される。
これは、抽象クラスを継承したサブクラスがたくさんある時に威力を発揮するんだね。
instanceof演算子:オブジェクトのクラスを調べることができる。
if(vc[i] instanceof Car)とすると、vc[i]がCarクラスかどうか調べることができる。
多重継承
サブクラスは、スーパークラスを2個持つことができない。けど、インターフェイスを2個持つことはできる。
スーパークラスからサブクラスの拡張:class サブクラス名 extends スーパークラス名
スーパーインターフェイスからサブインターフェイスの拡張:
インターフェイスからクラスの拡張
例外処理
実行中にエラーが出ても、そのエラーに対して処理を記述することで、最後まで実行できるようにする。
try{
この中でエラーを検出
}
catch{
エラーとなった場合の処理(例外のクラスはP439に記載)
}
finally{
エラーが出たとしても実行して欲しい処理
}
Androidでおんがくを再生する
参考にさせて頂いたブログ。