private/JavaBronze
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[private]]
* Java Bronze [#n3f7479a]
#contents
* 第1章 プログラムの流れ [#ce0dd3d3]
** 問5 main()メソッド [#d7ab4e17]
- mainメソッドの解説~
Javaプログラムは必ず、1つのmainメソッドを定義しなければ...
''mainメソッドの定義''
public static void main(String[] args)
⇒なぜなら、JVMが実行する際に「必ず」mainメソッドを呼び出...
※仮にmainメソッドを実装しなかった場合は、コンパイルは成功...
--ex)mainメソッドを実装しなかった場合~
#highlighter(java,number){{
public class Sample1_6 {
// mainメソッドではなく、Mainメソッドにして実行する。
public static void Main(String[] args) {
System.out.println("Hello World!");
}
}
}}
&ref(javaBronze1.PNG);~
--ex)mainメソッドを実装した場合~
#highlighter(java,number){{
public class Sample1_5 {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
}}
&ref(javaBronze2.PNG);
~
-回答
-- 選択肢Cはmainメソッドの定義(公式)通りである為、正解。
-- 選択肢Dは修飾子の順序は変更可能である為、正解。
-- その他選択肢は、定義通りでない為、不正解。
* 第2章 データの宣言と使用 [#xa976ab5]
** 問4 データ型と暗黙の型変換 [#d98da95f]
- データ型について
-- Javaで使用される8つの基本データ型(問1の解説引用)~
|>|データ型|サイズ|表現できる値|h
|整数|byte|8bit|-128~127|
|~|short|16bit|-32768~32767|
|~|int|32bit|-2147483648~2147483647|
|~|long|64bit|-9223372036854775808~9223372036854775808|
|浮動小数点数|float|32bit|IEEE754に基づいた表現|
|~|double|64bit|IEEE754に基づいた表現|
|文字|char|16bit|Unicodeで表現できる1文字|
|boolean|byte|-|true or false|
- 型変換(キャスト)
-- 暗黙の型変換~
データ型が異なる「サイズの小さな型」から「サイズの大きな...
プログラム上で「自動的に」行われる型変換の事。~
~
基本データ型の暗黙の型変換が起こる一覧~
|変換元の基本型|型変換が可能な変更先の基本型|h
|boolean|なし|
|char|int, long, float, double|
|byte|short, int, long, float, double|
|short|int, long, float, double|
|int|long, float, double|
|long|float, double|
|float|double|
|double|なし|
ex)
#highlighter(java,number){{
public class Sample2_4_1 {
public static void main(String[] args) {
String s = "Hello";
double d = 10.34;
// 代入する値がchar型である為、暗黙な型変換が行われる。
int i = 'x';
System.out.println(s);
System.out.println(d);
System.out.println(i);
}
}
}}
&ref(javaBronze3.PNG);
-- 明示的型変換~
データ型が異なる変数に対して、代入する際に行う型変換の事。~
ex)
#highlighter(java,number){{
public class Sample2_4_2 {
public static void main(String[] args) {
long l = 50;
// int型のサイズが小さい為、暗黙の型変換は行われない。
// 明示的にint型に変換するように処理を記述する。
int i = (int)l;
System.out.println(1+i);
}
}
}}
&ref(javaBronze4.PNG);
- 回答
--選択肢A,Dは型に対して同じ型を代入している為、正解。
--選択肢Eは型に対して異なる型を代入しているが、型の大きさ...
--選択肢Bはchar型に対して文字列を代入している。型の大きさ...
--選択肢Cはboolean型に文字列を代入している。暗黙な型変換...
--選択肢Fは型に対して異なる型(double型)を代入している。代...
※明示的型変換を行えば代入可能。
#highlighter(java,number){{
public class Sample2_4_3 {
public static void main(String[] args) {
float f = (float)3.14;
System.out.println(f);
}
}
}}
** 問5 基本データ型のサイズ [#hb3d76bd]
- データ型
-- Javaで使用される8つの基本データ型(問1の解説引用)~
|>|データ型|サイズ|表現できる値|h
|整数|byte|8bit|-128~127|
|~|short|16bit|-32768~32767|
|~|int|32bit|-2147483648~2147483647|
|~|long|64bit|-9223372036854775808~9223372036854775808|
|浮動小数点数|float|32bit|IEEE754に基づいた表現|
|~|double|64bit|IEEE754に基づいた表現|
|文字|char|16bit|Unicodeで表現できる1文字|
|boolean|byte|-|true or false|
- 回答
-- 選択肢Aは、表現できる値の範囲外である為、正解。
-- その他の選択肢は、表現できる値の範囲内の為、不正解。~
※int型を越えるlong型の範囲の数値をプログラムの中で記述す...
** 問7 final修飾子 [#qc4a1f23]
- final修飾子~
final修飾子がついてる変数は、一度代入した値以降、値を変更...
ex) final修飾子に初期値を設定
#highlighter(java,number){{
public class Sample2_7 {
public static void main(String[] args) {
// この代入後、この変数に値を設定することは不可。
final double PI = 0;
// 文字列の初期化
String COMPANY_NAME = " ";
// 代入している値は問題ないが、
// 既に値が設定されているfinal修飾子が指定されている...
// 代入している為、エラーとなる。
PI = 3.14;
// 標準出力処理
System.out.println(PI);
System.out.println(COMPANY_NAME);
}
}
}}
&ref(javaBronze5.PNG);~
ex2) final修飾子変数のみ定義
#highlighter(java,number){{
public class Sample2_7_1 {
public static void main(String[] args) {
// 代入していない為、後で代入可能。
final double PI;
// 文字列の初期化
String COMPANY_NAME = " ";
// final修飾子の変数の為、これ以降、代入不可。
PI = 3.14;
// 標準出力処理
System.out.println(PI);
System.out.println(COMPANY_NAME);
}
}
}}
&ref(javaBronze6.PNG);~
- 回答
-- 選択肢Dは、既に値が設定されたfinal修飾子の変数に対して...
-- 選択肢Aは、実行できない為、不正解
-- 選択肢Bは、final修飾子に最初の代入を行っている為、問題...
-- 選択肢Cは、初期化時の代入の為、問題ない。不正解
-- 選択肢Eは、final修飾子がついていない変数への代入の為、...
** 問8 変数の有効範囲 [#z4ecea90]
- スコープ~
スコープとは変数やメソッドなどが見える範囲のこと。
- ブロック~
ブロックとは { } で囲まれた部分のこと。~
ブロック内で定義された変数は、ブロック内でしか使用するこ...
このブロック内で定義された変数を、「ローカル変数」という。~
クラス内変数とブロック内変数と同じ変数が定義されている場...
「ブロック内の変数が優先」される。~
ex) ブロック内変数をブロック外で参照
#highlighter(java,number){{
public class Sample2_8_1 {
public static void main(String[] args) {
// int xの有効範囲は、mainメソッド内全て
int x;
x = 1;
{// ブロック1開始-------------------
x = 2;
// int yの有効範囲は、ブロック1内全て
int y = 1;
y = 2;
}// ブロック1終了-------------------
x = 3;
// ブロック1外の為、参照出来ない為、エラーになる。
y = 3;
System.out.println(x + y);
}
}
}}
&ref(javaBronze7.PNG);~
ex) 同一変数名をブロック内とクラス内変数で定義
#highlighter(java,number){{
public class Sample2_8_2 {
// int yの有効範囲は、クラス内全て
static int y;
public static void main(String[] args) {
// int xの有効範囲は、mainメソッド内全て
int x;
x = 1;
y = 1;
{// ブロック1開始-------------------
x = 2;
// int yの有効範囲は、ブロック1内全て
int y = 1;
// ブロック1内のyを編集
y = 2;
System.out.println(x + y);
}// ブロック1終了-------------------
x = x + 1;
// ブロック1内で編集したy はブロック1内で
// 定義した変数yに代入されている為、
// クラス内変数のyは1のまま。
y = y + 1;
System.out.println(x + y);
}
}
}}
&ref(javaBronze8.PNG);
- 回答
-- 選択肢Eは、ブロック内でしか定義されていないyをブロック...
-- その他の選択肢は、実行出来ない。もしくは、ブロック内の...
** 問11 配列 [#kde2dfc1]
- 配列~
配列とは、同じデータの型の集合体。電車の車両のイメージ。~
※配列は、要素1個目は配列の0番目になるので注意。~
宣言方法
データ型 [] 配列名 = new データ型[要素数];
データ型 配列名[] = new データ型[要素数];
初期化+宣言方法
データ型 [] 配列名 = {要素1,要素2,要素3,・・・};
データ型 配列名[] = {要素1,要素2,要素3,・・・};
ex)
#highlighter(java,number){{
public class Sample2_11 {
public static void main(String[] args) {
// 配列を宣言
int [] ary3 = new int[5];
int ary3_1[] = new int[4];
// 初期化+宣言
int [] ary5 = {1,3,5,7};
int ary5_1[] = {2,4,6};
// 配列の要素数を出力
System.out.println(ary3.length);
System.out.println(ary3_1.length);
System.out.println(ary5.length);
System.out.println(ary5_1.length);
}
}
}}
&ref(javaBronze9.PNG);
- 回答
-- 選択肢C,Eは、定義通りの宣言の為、正解
-- その他の選択肢は、定義外の宣言の為、不正解
* 第3章 演算子と分岐文 [#y2496f6e]
** 問4 複合代入演算子 [#q595bd9f]
- 複合代入演算子
複合代入演算子は、通常の代入処理と計算処理を加えた省略形...
-- 複合代入演算子一覧(抜粋)
|複合代入演算子|展開結果(省略前)|h
|A += B|A = A + B |
|A -= B|A = A - B |
|A *= B|A = A * B |
|A /= B|A = A / B |
|A %= B|A = A % B |
ex) 省略系と省略前で値が一致する
#highlighter(java,number){{
public class Sample3_4 {
public static void main(String[] args) {
int A = 10;
int B = 9;
int C = 8;
int D = 7;
int E = 6;
int F = 5;
int G = 12;
int H = 3;
int I = 17;
int J = 5;
int A_a = 10;
int B_b = 9;
int C_c = 8;
int D_d = 7;
int E_e = 6;
int F_f = 5;
int G_g = 12;
int H_h = 3;
int I_i = 17;
int J_j = 5;
// 足し算
A += B;
A_a = A_a + B_b;
System.out.println(A + "足し算");
System.out.println(A_a);
// 引き算
C -= D;
C_c = C_c - D_d;
System.out.println(C + "引き算");
System.out.println(C_c);
// 掛け算
E *= F;
E_e = E_e * F_f;
System.out.println(E + "掛け算");
System.out.println(E_e);
// 割り算
G /= H;
G_g = G_g / H_h;
System.out.println(G + "割り算");
System.out.println(G_g);
// 余り
I %= J;
I_i = I_i % J_j;
System.out.println(I + "余り");
System.out.println(I_i);
}
}
}}
&ref(javaBronze10.PNG);
- 回答~
6行目のソースを分解すると~
a = a + b;~
a = a - b;~
変数a は元に戻る
7行目のソースを分解すると~
b = b * a;~
b = b % a;~
変数b は0が設定される。~
-- 選択肢Bは、aにあたるyが8、bにあたるxが0になっている為...
-- その他の選択肢は、不正解。
** 問6 論理演算子について [#d18731c7]
- 論理演算子
論理演算子とは条件を複数記載する場合に使用する
|論理演算子|評価種別|意味|h
|&|通常|左辺、右辺ともにtrueの場合、trueになる。|
|||通常|左辺、右辺どちらか片方がtrueの場合、trueにな...
|&&|短絡評価|左辺、右辺ともにtrueの場合、trueになる。|
||||短絡評価|左辺、右辺どちらか片方がtrueの場合...
- 短絡評価(ショートサーキット演算子)~
短絡評価とは、論理演算式の左辺(第一引数)を評価した段階で~
式全体の値が定まらない場合のみ右辺(第二引数)を評価する...
※左辺を評価した段階で、式全体の値が定まった場合、右辺の評...
ex)
#highlighter(java,number){{
public class Sample3_6_1 {
public static void main(String[] args) {
int x = 1;
int y = 2;
int z = 0;
// 左辺を評価した段階で、式全体がfalseになる為、
// 右辺は評価されない。
// 仮に右辺を評価した場合、 2/0なので、0除算のエラー...
if( x == y && x/z == 0) {
System.out.println("True");
}
else {
System.out.println("False");
}
// 左辺を評価した段階で、式全体がtrueになる為、
// 右辺は評価されない。
// 仮に右辺を評価した場合、 2/0なので、0除算のエラー...
if( x != y || x/z == 0) {
System.out.println("True");
}
else {
System.out.println("False");
}
try {
// 左辺を評価した段階で、式全体がfalseになるが
// 右辺も評価する、 2/0なので、0除算のエラーが発生...
if( x == y & x/z == 0) {
System.out.println("True");
}
else {
System.out.println("False");
}
}catch(Exception e) {
e.printStackTrace();
}
try {
// 左辺を評価した段階で、式全体がtrueになるが、
// 右辺を評価する、 2/0なので、0除算のエラーが発生...
if( x != y | x/z == 0) {
System.out.println("True");
}
else {
System.out.println("False");
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}}
&ref(javaBronze11.PNG);
** 問11 if文について [#j293106d]
- if文について~
if文は if(条件式) で定義される。この時の条件式の結果は~
bool値(true or false)でなくてはならない。~
それ以外の場合はコンパイルエラーとなる。~
ex)
#highlighter(java,number){{
public class Sample3_7_1 {
public static void main(String[] args) {
int i=3;
// 代入式を条件に入れる。bool値じゃない為、コンパイル...
if(i = 3) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}
}}
&ref(javaBronze12.PNG);
- 回答
-- 選択肢Dは、代入式である為、返却値がbool値でない為、エ...
-- その他の選択肢は、結果がbool値になっている為、エラーに...
* 第4章 ループ処理 [#y298d2c7]
** 問12 do-while文 [#l68bedf1]
- do-while文について~
''構文''~
do{ ループ処理 } while(継続条件);
''特徴''
ループ処理を必ず1回以上実行する。
(ループ処理をした後、継続条件を処理する)
- while文について~
''構文''
while(継続条件) { ループ処理 } ;
''特徴''
ループ処理実行しない場合がある。
(継続条件を処理をした後、ループ処理を処理する)
~
ex) do-while文とwhile文
#highlighter(java,number){{
public class Sample4_1_12 {
public static void main(String[] args) {
int num = 1;
// do-while文 ⇒ whileの中の条件に関わらず、do{}の中...
do {
System.out.println("A");
}while(num != 1);
num = 1;
// while文⇒whileの中の条件によっては、ループ内の処理は...
while(num != 1){
System.out.println("B");
}
}
}
}}
&ref(javaBronze13.PNG);
- インクリメントとデクリメントについて
-- インクリメントとは~
数値を1つだけ加算すること。~
Java上では、「i++」または「++i」で表現される。
-- デクリメントとは~
数値を1つだけ減算すること~
Java上では、「i--」または「--i」で表現される。
- 前置と後置について
-- 前置とは~
変数よりも前に演算子が配置されている記載方法。~
ex)
++i , --i
前置法では、次行う処理よりもインクリメント、デクリメント...
ex)
x = ++y ⇒
y = y + 1
x = y
-- 後置とは~
変数よりも後に演算子が配置されている記載方法。~
ex)
i++ , i--
後置法では、インクリメント、デクリメント処理より先に、次...
ex)
x = y++ ⇒
x = y
y = y + 1
- 複雑な演算
--前置法 + 前置法(x = ++y + ++z)
+ 左辺は前置法なので、加算処理よりも先にインクリメントを...
+ 右辺は前置法なので、加算処理よりも先にインクリメントを...
+ 加算処理を行う。
+ 計算結果をx に代入する。
--前置法 + 後置法(x = ++y + z++)
+ 左辺は前置法なので、加算処理よりも先にインクリメントを...
+ 右辺は後置法なので、インクリメントよりも先に加算処理を...
+ 計算結果をx に代入する。
+ 右辺のインクリメントを行う。
--後置法 + 前置法(x = y++ + ++z)
+ 左辺は後置法なので、インクリメントよりも先に加算処理を...
+ 右辺は前置法なので、インクリメントよりも先に加算処理を...
+ 計算結果をx に代入する。
+ 左辺のインクリメントを行う。
--後置法 + 後置法(x = y++ + z++)
+ 左辺は後置法なので、インクリメントよりも先に加算処理を...
+ 右辺は後置法なので、インクリメントよりも先に加算処理を...
+ 計算結果をx に代入する。
+ 左辺のインクリメントを行う。
+ 右辺のインクリメントを行う。
#highlighter(java,number){{
public class Sample4_1_12_1 {
public static void main(String[] args) {
int num = 1;
int left = 2;
int right = 3;
// 前置法 + 前置法
num = ++left + ++right;
System.out.println("left:" + left);
System.out.println("right:" + right);
System.out.println("A:" + num);
num = 1;
left = 2;
right = 3;
// 前置法 + 後置法
num = ++left + right++;
System.out.println("left:" + left);
System.out.println("right:" + right);
System.out.println("A:" + num);
num = 1;
left = 2;
right = 4;
// 後置法 +前置法
num = left++ + ++right;
System.out.println("left:" + left);
System.out.println("right:" + right);
System.out.println("A:" + num);
num = 1;
left = 2;
right = 4;
// 後置法 +後置法
num = left++ + right++;
System.out.println("left:" + left);
System.out.println("right:" + right);
System.out.println("A:" + num);
}
}
}}
&ref(javaBronze14.PNG);
- 回答~
ポイントは、~
do-while文の特徴と演算の順番。~
do-whileの特徴は前述に述べたとおり、~
''条件に関わらずループ処理は1回以上実行される''。~
演算の順番については、''前置法が処理前''に行われ、~
''後置法が処理した後''に実行される。~
今回の場合、 「++num - num++ < 0 」は~
++ ++num実行~
(num = num + 1 ⇒ num は2)
++ 1の計算結果 - num~
( num - num ⇒ 0)
++ 2の計算結果 < 0~
( 0 < 0 ⇒ false)
++ num++実行~
(num = num + 1 ⇒ num は3)~
~
になる。~
よって、継続条件を満たさない為、1度Aを出力して処理を終了...
#highlighter(java,number){{
public class Sample4_1_12_2 {
public static void main(String[] args) {
int num = 1;
do {
// ループ処理
System.out.println("A");
} while(++num - num++ < 0 );//継続条件
System.out.println(num);// 計算結果のnum値
}
}
}}
&ref(javaBronze15.PNG);
** 問19 while文のネスト [#m4115007]
- 二次元配列について~
1次元配列(通常の配列 int[] a = new int[3])の要素一つ(a[0]...
配列がある状態。~
''宣言方法''
データ型 [][] 配列名 = new データ型[要素数][要素数];
データ型 配列名[][] = new データ型[要素数][要素数];
''初期化+宣言方法''
データ型 [][] 配列名 = {{要素1,要素2,要素3},{要素1,要素2...
データ型 配列名[][] = {{要素1,要素2,要素3},{要素1,要素2...
イメージ(データ型 配列[][] = {{要素1,要素2,要素3},{要素a,...
|行列|配列[0][0]|配列[0][1]|配列[0][2]|h
|配列[0][0]|要素1|要素2|要素3|
|配列[1][0]|要素a|要素b|要素c|
|配列[2][0]|要素α|要素β|要素γ|
- ラベル付きbreak文~
通常break文を実行した場合、一番内側のループのみを終了する...
ラベル付きでbreakした場合、指定したラベルまでのループ処理~
を終了させることが出来る。~
構文
ラベル名: ループ処理
※ラベル名:の後に{}を定義することも可能。
ex)
#highlighter(java,number){{
public class Sample4_1_19 {
public static void main(String[] args) {
int num[][] = new int[3][3];
// ラベル設定
start:
// 一つ目のループ
for(int x = 0; x < 3; x++) {
// 2つ目のループ
for(int y = 0; y < 3; y++) {
// 2次元配列に値を設定。
num[x][y] = x + y;
System.out.println("x:" + x + ",y:" + y);
// xが1になった時に、startから下にあるループを抜ける。
if(x == 1) break start;
}
}
}
}
}}
&ref(javaBronze16.PNG);
- 回答~
2次元配列の~
[0][] が{0,1,2}~
[1][] が{3,4,5}~
[2][] が{6,7,8}~
であること。~
~
ラベル付きbreak文は、ラベルまでのループを抜けること。~
つまり、~
i = 0 の時は、全て出力。~
i = 1の時は、j=0の場合のみ出力して、~
ループを抜けることが分かる為、0123のCになる。~
#highlighter(java,number){{
public class Sample4_1_19_1 {
public static void main(String[] args) {
int num[][] = { {0,1,2},{3,4,5},{6,7,8} };
int i = 0;
// ラベル設定
label:
// 一つ目のループ
while(true) {
// 2個目のループ用に初期化
int j = 0;
// 2つ目のループ
while(j < 3) {
// 2次元配列出力。
System.out.println(num[i][j]);
j++; //jのインクリメント
// iが1になった時に,label以下のループを抜ける。
if(i == 1) break label;
}
i++; // iのインクリメント
}
}
}
}}
&ref(javaBronze17.PNG);
* 第5章 オブジェクト指向コンセプト [#s508f14b]
** 問1 クラス定義 [#l7df2f7d]
- [[抽象クラス>Java/抽象クラス]]とは~
抽象クラスは、抽象メソッドを1つ以上持つことが出来るクラ...
宣言方法
abstract class クラス名
-- 抽象メソッドとは~
実装の中身を持たない、定義だけのメソッド。~
宣言方法
abstract 戻り値の型名 メソッド名(引数);
ex)
#highlighter(java,number){{
// 抽象クラス(抽象メソッドを1つ以上持つクラス)
abstract class Sample_abstract {
private int ans = 0;
//抽象メソッド(中身の処理を持たない)
abstract void setQ(int i);
//具象メソッド(中身の処理を持つ)
public int getA(){
return ans;
}
}
}}
-- 抽象クラスの特徴
+++ 抽象クラスは、インスタンス化(new 抽象クラス)が出来な...
#highlighter(java,number){{
// 抽象クラス
abstract class Sample_abstract {
private int ans = 0;
//抽象メソッド
abstract void setQ(int i);
//具象メソッド
public int getA(){
return ans;
}
}
// 実行クラス
public class Sample5_1_1 {
public static void main(String[] args) {
// 抽象クラスのインスタンス生成
Sample_abstract obj = new Sample_abstract();
}
}
}}
&ref(javaBronze18.PNG);
+++ 抽象クラスを継承したクラスは、抽象メソッドをオーバラ...
#highlighter(java,number){{
// 抽象クラス
abstract class Sample_abstract {
private int ans = 0;
//抽象メソッド
abstract void setQ(int i);
//具象メソッド
public int getA(){
return ans;
}
}
// 抽象クラスを継承した実行クラス
public class Sample5_1_2 extends Sample_abstract {
public static void main(String[] args) {
}
}
}}
&ref(javaBronze19.PNG);
+++ 抽象クラスには、抽象メソッド以外に、実装を持つメソッ...
#highlighter(java,number){{
// 抽象クラス
abstract class Sample_abstract {
private int ans = 0;
//抽象メソッド
abstract void setQ(int i);
//具象メソッド(実装を持つメソッド)
public int getA(){
return ans;
}
}
// 実行クラス
public class Sample5_1 extends Sample_abstract {
private int ans;
public static void main(String[] args) {
}
@Override
public void setQ(int i) {
ans = i;
}
}
}}
&ref(javaBronze20.PNG);
- 具象クラス~
抽象クラスを1つも持たない、定義されている全てのメソッドは...
-- 具象クラスの特徴
+++ 具象クラスはインスタンス化(new クラス名)可能。
#highlighter(java,number){{
// 具象クラス
class Sample {
private int ans = 0;
//具象メソッド
public void setQ(int i){
ans = i;
}
//具象メソッド
public int getA(){
return ans;
}
}
// 実行クラス
public class Sample5_1_4 {
public static void main(String[] args) {
// 具象クラスのインスタンス化
Sample obj = new Sample();
}
}
}}
&ref(javaBronze22.PNG);
+++ 具象クラスは抽象メソッドを宣言出来ない。
#highlighter(java,number){{
// 具象クラス
class Sample {
private int ans = 0;
//抽象メソッド
abstract void setQ(int i);
//具象メソッド
public int getA(){
return ans;
}
}
// 具象クラスを継承した実行クラス
public class Sample5_1_3 extends Sample {
public static void main(String[] args) {
}
}
}}
&ref(javaBronze21.PNG);
- 回答
-- A.abstractメソッドは抽象メソッドのなので、具象クラスで...
-- B.抽象クラスは、具象メソッド(実装を持つメソッド)を定...
-- C.具象クラスは、インスタンス化(new クラス)が出来るので...
-- C.抽象クラスは、インスタンス化(new クラス)が出来ないの...
** 問6 データ隠蔽とカプセル化 [#a897f1e8]
-オブジェクト指向用語
-- 属性とは~
クラス内で定義された変数のこと。「プロパティ」とも呼んだ...
-- 操作とは~
クラス内で定義されたメソッドのこと。「振る舞い」とも呼ん...
- データの隠蔽とは~
カプセル化の具体例の一つ。特徴は以下。
--クラス内に定義されている属性(クラス内変数)に対して、~
直接に値の設定(操作)出来ないようにすること。~
--データ操作に必要な情報(メソッド)のみを外部に提供するこ...
- カプセル化とは~
データ構造を隠蔽、データに必要な操作を「ひとつの纏まりに...
- データ隠蔽とカプセル化の利点
++ 内部構造を理解していなくとも、公開されている操作で利用...
++ データへのアクセスが制限されている為、~
カプセル化したクラス内部の変更が外部に影響しない。(再利用...
++ 変更がクラス内で完結する為、変更が容易。(システムの安...
~
ex)
#highlighter(java,number){{
// 操作、データを一つにまとめたクラス
// ⇒ カプセル化
class Sample {
// private を設定することで、Sampleクラス以外からの
// アクセスを禁止する
// ⇒ データの隠蔽
private int ans = 0;
//-- ans 変数にアクセスするためのメソッドのみ外部に公開...
// ⇒ データの隠蔽
//属性に対して、アクセスするためのメソッド(操作)
public void setQ(int i){
ans = this.calc(i);
}
//属性に対して、アクセスするためのメソッド(操作)
public int getA(){
return ans;
}
//-- ここまで
//
private int calc(int i) {
return i+i;
}
}
// 実行クラス
public class Sample5_6 {
public static void main(String[] args) {
// 具象クラスのインスタンス化
Sample obj = new Sample();
// obj.ans=5
// int x = obj.ans は出来ない為、
// setQメソッドとgetAメソッドを使って操作する
obj.setQ(5);
System.out.println(obj.getA());
}
}
}}
&ref(javaBronze23.PNG);
- 回答
-- A. データの隠蔽の話なので、正解
-- B. 属性と操作一つのまとまりにするのがカプセル化なので...
-- C. データのアクセスを制限し、内部の変更を用意すること...
-- D. B同様、一つのまとまりにするのが、カプセル化なので、...
-- E. データと操作を1つにまとまりするだけなので、プログラ...
** 問9 カプセル化 [#yaeccc8d]
- 回答~
データの隠蔽と迷いそうだが、データの隠蔽は、~
--外部からのアクセスを制限すること。
--制限したデータに対しての操作を公開すること。~
であり、「まとめてオブジェクトを表現」することではない。~
属性と属性に対する操作を~
「まとめてオブジェクトを表現」するのはカプセル化になる為...
* 第6章 クラス定義とオブジェクトの生成、使用 [#bdfb0692]
** 問9 オーバーロード [#d75d611a]
- オーバーロード~
オーバーロードとは、同名のメソッド名で、~
「引数が異なる(引数の数、と型の並び)メソッド」の関係の事...
ex)
#highlighter(java,number){{
public class Sample6_9 {
public static void main(String[] args) {
dispPlay(10,20);
dispPlay(10,"30");
dispPlay("30", 10);
dispPlay(10,30,40);
}
// ここから下に定義するメソッドは全て
//オーバーロードの関係にある。
// 引数の個数2個で型がint int の順-- ①
public static void dispPlay(int i, int h) {
System.out.println("result" + i + h);
}
// 引数の個数2個で型がint Stringの順-- ②
public static void dispPlay(int i, String h) {
System.out.println("result" + i + h + "文字");
}
// 引数の個数2個で型がString int の順-- ③
public static void dispPlay(String i, int h) {
System.out.println("result:文字" + i + h);
}
// 引数の個数3個で型がint int intの順 -- ③
public static void dispPlay(int i, int h, int j) {
System.out.println("result" + i + h * j);
}
}
}}
&ref(javaBronze24.PNG);
- 演算子の優先順位~
下記の演算子の優先順で同列にあるものは基本的に左から評価...
|優先順位|演算子|結合規則|h
|高い|[ ] . (パラメータのリスト) x++ x--|左|
||++x --x +x ~ !|右|
|↓|new (型)x|右|
|↓|* / %|左|
|↓|+ -|左|
|↓|<< >> >>>|左|
|↓|< > <= >= instanceof|左|
|↓|== !=|左|
|↓|&|左|
|↓|^|左|
|↓|||左|
|↓|&&|左|
|↓||||左|
||? :|右|
|低い|= += -= *= /= %= &= ^= |= <<= >>= >...
ex)
#highlighter(java,number){{
public class Sample6_9_1 {
public static void main(String[] args) {
dispPlay(10,20);
dispPlay(10,30,40);
}
public static void dispPlay(int i, int h) {
// 左から評価するため、文字列結合が優先される
// "result"とint型iを文字列結合 そのあとint型hと文字列...
System.out.println("result" + i + h);
}
public static void dispPlay(int i, int h, int j) {
// 優先順位の高い演算子*がある為、先にh*jを計算する
// その後、左から順番に評価する。
System.out.println("result" + i + h * j);
}
}
}}
&ref(javaBronze25.PNG);
-回答~
引数の型と数により、呼び出されるメソッドを選択する。~
その後、"result"と結合して出力する。~
この時、演算子の優先順位が存在しない場合、~
左から評価される為、10行目のメソッドでは~
文字列結合が行われ、数値の計算は行われない。~
11行目のメソッドでは、優先順位の高い演算子()がある為、~
()内を処理した後、文字列結合(左から順番に)が行われる為、...
** 問10 コンストラクタ [#iffa4a6d]
- コンストラクタとは~
コンストラクタとは、インスタンス生成時に、呼び出される特...
クラス名と同じ名称を持つ。主に、内容の初期化に使用する。~
-- コンストラクタ定義
+++ クラス名と同名
+++ 戻り値を設定出来ない。
+++ 引数は設定出来る
+++ 引数違いのを宣言出来る(オーバーロード)
+++ final修飾子は指定できない。
ex)~
#highlighter(java,number){{
class TestClass {
private int x;
// コンストラクタ
public TestClass() {
x = 10;
}
// コンストラクタのオーバーロード
TestClass(int j) {
x = j;
}
// 返却値を設定している為、コンストラクタではない。
public void TestClass(int j) {
x = j;
System.out.println("コンストラクタじゃない");
}
public int getValue() {
return x;
}
}
public class Sample6_10_1 {
public static void main(String[] args) {
// インスタンス生成
TestClass obj = new TestClass();
// インスタンス生成
TestClass obj2 = new TestClass(100);
System.out.println(obj.getValue());
System.out.println(obj2.getValue());
// メソッドを呼出し。
obj2.TestClass(200);
System.out.println(obj2.getValue());
}
}
}}
&ref(javaBronze26.PNG);
- 回答~
dispメソッドを修正出来ない為、~
インスタンス生成時に呼び出されるコンストラクタを使用する...
コンストラクタは返却値の設定、final修飾子の設定が出来ない...
bとeは不正解。その他の選択肢は、コンストラクタの定義とし...
cはprivateを指定している為、同一クラス内からしか呼べなく...
不正解。よって答えはaとdになる。~
** 問13 コンストラクタとthis [#ad133b67]
- this~
java上でthisとは、自分自身を表す。(使用しているクラス自身)
--thisの利用
+++ コンストラクタ内から自クラス内の他のコンストラクタを...
但し、1行目に記述しないといけない。
#highlighter(java,number){{
class TestClass {
private int x;
// コンストラクタ
public TestClass(int x) {
this.x = x;
this(x, 100);// 2行目にコンストラクタの呼出しを記載エラ...
}
// コンストラクタのオーバーロード
public TestClass(int x, int y) {
this.x = x + y;
System.out.println("引数2個だよ");
}
public int getValue() {
return x;
}
}
public class Sample6_13_2 {
public static void main(String[] args) {
// インスタンス生成
TestClass obj = new TestClass(10);
System.out.println(obj.getValue());
}
}
}}
&ref(javaBronze28.PNG);
+++ 自クラス内のメソッドやメンバ変数を呼ぶ
ex)~
#highlighter(java,number){{
class TestClass {
private int x;
// コンストラクタ
public TestClass(int x) {
this(x, 100);// thisは自分自身を呼び出せる為、コンスト...
}
// コンストラクタのオーバーロード
public TestClass(int x, int y) {
//本来であれば、x = x; で値を設定出来るが
//引数の名前とクラス内変数(インスタンス変数)
//が同じである為、クラス内変数に設定したいところが、引...
x = x;
System.out.println(this.x);
//明示的に、thisを使って指定する。
//thisはクラスそのもの「私の」と読み替えればわかりすい...
this.x = x + y;
System.out.println("引数2個だよ");
}
public int getValue() {
return x;
}
}
public class Sample6_13_1 {
public static void main(String[] args) {
// インスタンス生成
TestClass obj = new TestClass(10);
System.out.println(obj.getValue());
}
}
}}
&ref(javaBronze27.PNG);
- 回答~
9行目のコンストラクタの呼出しが2行目に記載されている為
エラーになる。よって、回答はe
** 問16 クラスの修飾子 [#l8f8b6e5]
- クラスの修飾子について
-- クラスの修飾子のルール
+++ 1つjavaソース内に、複数のpublicクラスを定義することは...
+++ public修飾子指定したクラスは、ソースファイル名と同じ...
ex)ファイル名:Sample6_16_1.java~
#highlighter(java,number){{
//public 修飾子を複数に持つ。
public class TestClass {
}
public class Sample6_16_1 {
public static void main(String[] args) {
// インスタンス生成
}
}
}}
&ref(javaBronze29.PNG);
+++ クラス修飾子を指定していないクラスにアクセスできるの...
ex)
#highlighter(java,number){{
package pack1;
class TestClass {
public void disp(){
System.out.println("pack1");
}
}
public class Sample6_16_2 {
public static void main(String[] args) {
// インスタンス生成
}
}
}}
#highlighter(java,number){{
package pack2;
import pack1.TestClass;
public class Sample6_16_3 {
public static void main(String[] args) {
// インスタンス生成
}
}
}}
&ref(javaBronze30.PNG);
- 回答
クラス修飾子のルールに従い、回答はa,c
** 問24 staicメソッド [#wf65b0b1]
- staticついて
staticを付けることで、以下の事が可能になります。
++ staticメソッドは、インスタンス生成せずにアクセス可能に...
++ static変数は、インスタンス生成せずにアクセス可能になり...
ex)
#highlighter(java,number){{
class TestClass {
static String name ="static Class";
static public void disp() {
System.out.println("static");
}
}
public class Sample6_24 {
public static void main(String[] args) {
// インスタンス生成せずに、クラス指定で呼び出せる
System.out.println(TestClass.name);
// インスタンス生成せずに、クラス指定で呼び出せる
TestClass.disp();
}
}
}}
&ref(javaBronze31.PNG);
++ staticなメソッドから非staticなメソッドへのアクセスはで...
ex)
#highlighter(java,number){{
public class Sample6_25 {
public static void main(String[] args) {
// staticメソッドから非staticメソッドを呼出し
mainDisp();
}
public void mainDisp() {
System.out.println("mainメソッド");
}
}
}}
&ref(javaBronze32.PNG);
- 回答~
staticメソッドから呼ばれるメソッドなので、staticメソッド...
よって選択肢cが正解になる。
* 第7章 継承とポリモフィズム [#hb7ac506]
** 問14 ポリモフィズム [#k2f25012]
- 回答
#highlighter(java,number){{
// クラス
class Engineer {
String name,lang;
// コンストラクタ
Engineer(String name) {
this.name = name;
}
public void print() {
System.out.println(name);
}
}
// Enfineerクラスを継承したProgrammerクラス
class Programmer extends Engineer {
private String lang;
// コンストラクタ
Programmer(String name, String lang) {
// super()は、親クラスのコンストラクタを呼び出す
super(name);
// thisを使用しているので、自クラスのlangに値を設定
this.lang = lang;
}
public void print() {
// 自クラスにnameはない為、親クラスのnameが参照され...
// 仮に自クラスにnameがあった時は、自クラスのnameが...
// 自クラスにlangがある為、自クラスのlangが参照され...
System.out.println(name + " : " + lang);
}
}
public class Sample7_14_1 {
public static void main(String[] args) {
// Engineerクラス型で宣言
Engineer eng1, eng2;
// Engineerクラスのインスタンス生成
eng1 = new Engineer("Sato");
// Programmerクラスのインスタンス生成
// この時、代入先の型がEnginnerクラスだが
// ProgrammerクラスがEnginnerクラスを継承している為、
// 代入可能となる。
eng2 = new Programmer("Suzuki", "Java");
// enginnerクラスのprintメソッド
eng1.print();
// インスタンス自体は、programmerクラスの為、
// programmerクラスのprint()メソッドが呼び出される。
eng2.print();
}
}
}}
&ref(javaBronze33.PNG);
** 問16 ポリモフィズム [#b629609e]
#highlighter(java,number){{
//インターフェースクラス
interface Inter {
void disp();
}
// Interクラスを継承したTest1クラス
class Test1 implements Inter {
// Inerクラスのオーバーライド
public void disp() {
System.out.print("Hello");
}
}
// Test1クラスを継承したTest2クラス
class Test2 extends Test1 {
// Test1クラスのオーバーライド
public void disp() {
System.out.print("Java");
}
}
// 実行クラス
public class Sample7_16_1 {
public static void main(String[] args) {
// Interクラス型の変数宣言
Inter obj1;
// Test1のインスタンス生成
Test1 obj2 = new Test1();
// Test2のインスタンス生成
Test2 obj3 = new Test2();
// Test2のインスタンスをInterクラス型の変数に代入
// Test2クラスは、Test1クラスを継承しており、
// Test1クラスは、Interクラスを継承している。
// 間接的にTest2クラスはInterクラスを継承している為、
// 代入可能。 Test2クラスにとって、Test1が親、Inter...
obj1 = obj3;
// Interクラス型だが、中身は、Test2クラスのインスタ...
// Test2クラスのdispが呼び出される。
obj1.disp();
}
}
}}
&ref(javaBronze34.PNG);
** 問20 スーパークラスのコンストラクタ [#ta6539e5]
- super~
java上でsuperとは、継承した時の親クラスを表す。~
--superの利用
+++ 子クラスから、親クラスのコンストラクタを呼び出す。
+++ 子クラスから、親クラスの変数、メソッドを呼び出す。
- 回答~
ex)選択肢C~
明示的にAccountクラスのコンストラクタを呼んでいない為~
Accountクラスの引数なしのコンストラクタが呼ばれようとする...
存在しない為、エラーになる。~
#highlighter(java,number){{
class Account {
int balance;
Account(int balance) {
this.balance = balance;
}
}
// Accountクラスを継承
public class Sample7_20_1 extends Account {
protected double rate;
// コンストラクタ
Sample7_20_1(int balance, double rate) {
// insert code here
// この処理をうまく動かすには
// ①自クラスのrateに値を設定する処理
// ②親クラスのbalanceに値を設定する処理
// が必要になる。
super.balance = balance;
this.rate = rate;
}
public static void main(String[] args) {
// Sample7_20_1クラスのインスタンスを生成
Sample7_20_1 sa = new Sample7_20_1(50000, 0.05);
// Sample7_20_1クラスにbalance変数はない為、親クラス...
System.out.println(sa.balance);
// Sample7_20_1クラスにrate変数がある為、自クラスのr...
System.out.println(sa.rate);
}
}
}}
&ref(javaBronze35.PNG);~
ex)選択肢D
#highlighter(java,number){{
class Account {
int balance;
Account(int balance) {
this.balance = balance;
}
}
// Accountクラスを継承
public class Sample7_20_2 extends Account {
protected double rate;
// コンストラクタ
Sample7_20_2(int balance, double rate) {
// insert code here
// この処理をうまく動かすには
// ①自クラスのrateに値を設定する処理
// ②親クラスのbalanceに値を設定する処理
// が必要になる。
super(balance);
this.rate = rate;
}
public static void main(String[] args) {
// Sample7_20_1クラスのインスタンスを生成
Sample7_20_2 sa = new Sample7_20_2(50000, 0.05);
// Sample7_20_1クラスにbalance変数はない為、親クラス...
System.out.println(sa.balance);
// Sample7_20_1クラスにrate変数がある為、自クラスのr...
System.out.println(sa.rate);
}
}
}}
&ref(javaBronze36.PNG);
** 問21 参照型の型変換 [#t2b456fa]
- 参照型の型変換~
参照している型が、継承しているクラスまたは~
自クラスの場合、明示的型変換、もしくは、暗黙の型変換で代...
ex)
#highlighter(java,number){{
class Base {
public void disp() {
System.out.println("base");
}
}
class Test1 extends Base {
// Baseクラスのオーバーライド
public void disp() {
System.out.println("Hello");
}
}
class Test2 extends Test1 {
// Test1クラスのオーバーライド
public void disp() {
System.out.println("Java");
}
}
// 実行クラス
public class Sample7_21_1 {
public static void main(String[] args) {
Base obj1 = new Base();
Test1 obj2;
Test2 obj3;
// 暗黙的な型変換 (継承している為、可能)
Base obj4 = new Test1();
Test1 obj5 = new Test2();
try {
// obj1に入ってるインスタンスはBaseクラスの為、
// 型変換が行えずエラーになる。
obj2 = (Test1)obj1;
}catch(Exception e) {
e.printStackTrace();
}
// Baseクラス型のobj4はTest1クラスを参照している為、
// 変換可能(明示的な型変換
obj2 = (Test1)obj4;
// Test1のobj5はTest2クラスを参照している為、
// 変換可能(明示的な型変換
obj3 = (Test2)obj5;
// Test1のobj5はTest2クラスを参照している為、
// 継承しているTest1クラスに変換可能である
Test1 obj6 = (Test1)obj5;
obj2.disp();
obj3.disp();
obj6.disp();
}
}
}}
&ref(javaBronze37.PNG);
- 回答~
Coffeクラスは、CoffeMochaクラスの親クラス~
cofオブジェクトの参照先は、Coffeクラスの為、~
CoffMochaクラスに型変換することは出来ない。~
逆に、Coffe型のcofオブジェクトの参照先がCoffeMochaのオブ...
型変換可能になる。よって今回は実行時に型変換のエラーにな...
Dが正解になる。
** 問22 参照型の型変換 [#keb9962e]
-回答
#highlighter(java,number){{
// Teaクラス
class Tea {
String flavor;
}
// Teaクラスを継承したMilkTeaクラス
class MilkTea extends Tea {
MilkTea(String flavor) {
this.flavor = flavor;
}
void addFlavor() {
System.out.println("Add: " + flavor);
}
}
public class Sample7_22_1 {
public static void main(String[] args) {
Tea tea = new MilkTea("Milk");
// insert code here
// Teaクラス型のteaオブジェクトの参照先はMilkTeaのイ...
// Teaクラス型には、addFlavorメソッドは用意されてい...
// MilkTeaクラスにキャストする必要がある。
// teaオブジェクトの参照先は、MilkTeaクラスなので、...
((MilkTea)tea).addFlavor();
// 上記は変数に一度格納しないだけで
// Milktea milk = (MilkTea)tea;
// milk.addFlavor()とやっているのと同じ処理になる。
}
}
}}
&ref(javaBronze38.PNG);
* 実績 [#s8b4cc0f]
- 9/8 第4章の問9迄(++とwhile文について、追記必要。)
- 9/15 第4章の問9から第5章終わりまで
- 9/17 第6章~第7章 模試 44/60
- 9/18 試験 55%非常におしい。
* 関連 [#s94c78b1]
#ls2
終了行:
[[private]]
* Java Bronze [#n3f7479a]
#contents
* 第1章 プログラムの流れ [#ce0dd3d3]
** 問5 main()メソッド [#d7ab4e17]
- mainメソッドの解説~
Javaプログラムは必ず、1つのmainメソッドを定義しなければ...
''mainメソッドの定義''
public static void main(String[] args)
⇒なぜなら、JVMが実行する際に「必ず」mainメソッドを呼び出...
※仮にmainメソッドを実装しなかった場合は、コンパイルは成功...
--ex)mainメソッドを実装しなかった場合~
#highlighter(java,number){{
public class Sample1_6 {
// mainメソッドではなく、Mainメソッドにして実行する。
public static void Main(String[] args) {
System.out.println("Hello World!");
}
}
}}
&ref(javaBronze1.PNG);~
--ex)mainメソッドを実装した場合~
#highlighter(java,number){{
public class Sample1_5 {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
}}
&ref(javaBronze2.PNG);
~
-回答
-- 選択肢Cはmainメソッドの定義(公式)通りである為、正解。
-- 選択肢Dは修飾子の順序は変更可能である為、正解。
-- その他選択肢は、定義通りでない為、不正解。
* 第2章 データの宣言と使用 [#xa976ab5]
** 問4 データ型と暗黙の型変換 [#d98da95f]
- データ型について
-- Javaで使用される8つの基本データ型(問1の解説引用)~
|>|データ型|サイズ|表現できる値|h
|整数|byte|8bit|-128~127|
|~|short|16bit|-32768~32767|
|~|int|32bit|-2147483648~2147483647|
|~|long|64bit|-9223372036854775808~9223372036854775808|
|浮動小数点数|float|32bit|IEEE754に基づいた表現|
|~|double|64bit|IEEE754に基づいた表現|
|文字|char|16bit|Unicodeで表現できる1文字|
|boolean|byte|-|true or false|
- 型変換(キャスト)
-- 暗黙の型変換~
データ型が異なる「サイズの小さな型」から「サイズの大きな...
プログラム上で「自動的に」行われる型変換の事。~
~
基本データ型の暗黙の型変換が起こる一覧~
|変換元の基本型|型変換が可能な変更先の基本型|h
|boolean|なし|
|char|int, long, float, double|
|byte|short, int, long, float, double|
|short|int, long, float, double|
|int|long, float, double|
|long|float, double|
|float|double|
|double|なし|
ex)
#highlighter(java,number){{
public class Sample2_4_1 {
public static void main(String[] args) {
String s = "Hello";
double d = 10.34;
// 代入する値がchar型である為、暗黙な型変換が行われる。
int i = 'x';
System.out.println(s);
System.out.println(d);
System.out.println(i);
}
}
}}
&ref(javaBronze3.PNG);
-- 明示的型変換~
データ型が異なる変数に対して、代入する際に行う型変換の事。~
ex)
#highlighter(java,number){{
public class Sample2_4_2 {
public static void main(String[] args) {
long l = 50;
// int型のサイズが小さい為、暗黙の型変換は行われない。
// 明示的にint型に変換するように処理を記述する。
int i = (int)l;
System.out.println(1+i);
}
}
}}
&ref(javaBronze4.PNG);
- 回答
--選択肢A,Dは型に対して同じ型を代入している為、正解。
--選択肢Eは型に対して異なる型を代入しているが、型の大きさ...
--選択肢Bはchar型に対して文字列を代入している。型の大きさ...
--選択肢Cはboolean型に文字列を代入している。暗黙な型変換...
--選択肢Fは型に対して異なる型(double型)を代入している。代...
※明示的型変換を行えば代入可能。
#highlighter(java,number){{
public class Sample2_4_3 {
public static void main(String[] args) {
float f = (float)3.14;
System.out.println(f);
}
}
}}
** 問5 基本データ型のサイズ [#hb3d76bd]
- データ型
-- Javaで使用される8つの基本データ型(問1の解説引用)~
|>|データ型|サイズ|表現できる値|h
|整数|byte|8bit|-128~127|
|~|short|16bit|-32768~32767|
|~|int|32bit|-2147483648~2147483647|
|~|long|64bit|-9223372036854775808~9223372036854775808|
|浮動小数点数|float|32bit|IEEE754に基づいた表現|
|~|double|64bit|IEEE754に基づいた表現|
|文字|char|16bit|Unicodeで表現できる1文字|
|boolean|byte|-|true or false|
- 回答
-- 選択肢Aは、表現できる値の範囲外である為、正解。
-- その他の選択肢は、表現できる値の範囲内の為、不正解。~
※int型を越えるlong型の範囲の数値をプログラムの中で記述す...
** 問7 final修飾子 [#qc4a1f23]
- final修飾子~
final修飾子がついてる変数は、一度代入した値以降、値を変更...
ex) final修飾子に初期値を設定
#highlighter(java,number){{
public class Sample2_7 {
public static void main(String[] args) {
// この代入後、この変数に値を設定することは不可。
final double PI = 0;
// 文字列の初期化
String COMPANY_NAME = " ";
// 代入している値は問題ないが、
// 既に値が設定されているfinal修飾子が指定されている...
// 代入している為、エラーとなる。
PI = 3.14;
// 標準出力処理
System.out.println(PI);
System.out.println(COMPANY_NAME);
}
}
}}
&ref(javaBronze5.PNG);~
ex2) final修飾子変数のみ定義
#highlighter(java,number){{
public class Sample2_7_1 {
public static void main(String[] args) {
// 代入していない為、後で代入可能。
final double PI;
// 文字列の初期化
String COMPANY_NAME = " ";
// final修飾子の変数の為、これ以降、代入不可。
PI = 3.14;
// 標準出力処理
System.out.println(PI);
System.out.println(COMPANY_NAME);
}
}
}}
&ref(javaBronze6.PNG);~
- 回答
-- 選択肢Dは、既に値が設定されたfinal修飾子の変数に対して...
-- 選択肢Aは、実行できない為、不正解
-- 選択肢Bは、final修飾子に最初の代入を行っている為、問題...
-- 選択肢Cは、初期化時の代入の為、問題ない。不正解
-- 選択肢Eは、final修飾子がついていない変数への代入の為、...
** 問8 変数の有効範囲 [#z4ecea90]
- スコープ~
スコープとは変数やメソッドなどが見える範囲のこと。
- ブロック~
ブロックとは { } で囲まれた部分のこと。~
ブロック内で定義された変数は、ブロック内でしか使用するこ...
このブロック内で定義された変数を、「ローカル変数」という。~
クラス内変数とブロック内変数と同じ変数が定義されている場...
「ブロック内の変数が優先」される。~
ex) ブロック内変数をブロック外で参照
#highlighter(java,number){{
public class Sample2_8_1 {
public static void main(String[] args) {
// int xの有効範囲は、mainメソッド内全て
int x;
x = 1;
{// ブロック1開始-------------------
x = 2;
// int yの有効範囲は、ブロック1内全て
int y = 1;
y = 2;
}// ブロック1終了-------------------
x = 3;
// ブロック1外の為、参照出来ない為、エラーになる。
y = 3;
System.out.println(x + y);
}
}
}}
&ref(javaBronze7.PNG);~
ex) 同一変数名をブロック内とクラス内変数で定義
#highlighter(java,number){{
public class Sample2_8_2 {
// int yの有効範囲は、クラス内全て
static int y;
public static void main(String[] args) {
// int xの有効範囲は、mainメソッド内全て
int x;
x = 1;
y = 1;
{// ブロック1開始-------------------
x = 2;
// int yの有効範囲は、ブロック1内全て
int y = 1;
// ブロック1内のyを編集
y = 2;
System.out.println(x + y);
}// ブロック1終了-------------------
x = x + 1;
// ブロック1内で編集したy はブロック1内で
// 定義した変数yに代入されている為、
// クラス内変数のyは1のまま。
y = y + 1;
System.out.println(x + y);
}
}
}}
&ref(javaBronze8.PNG);
- 回答
-- 選択肢Eは、ブロック内でしか定義されていないyをブロック...
-- その他の選択肢は、実行出来ない。もしくは、ブロック内の...
** 問11 配列 [#kde2dfc1]
- 配列~
配列とは、同じデータの型の集合体。電車の車両のイメージ。~
※配列は、要素1個目は配列の0番目になるので注意。~
宣言方法
データ型 [] 配列名 = new データ型[要素数];
データ型 配列名[] = new データ型[要素数];
初期化+宣言方法
データ型 [] 配列名 = {要素1,要素2,要素3,・・・};
データ型 配列名[] = {要素1,要素2,要素3,・・・};
ex)
#highlighter(java,number){{
public class Sample2_11 {
public static void main(String[] args) {
// 配列を宣言
int [] ary3 = new int[5];
int ary3_1[] = new int[4];
// 初期化+宣言
int [] ary5 = {1,3,5,7};
int ary5_1[] = {2,4,6};
// 配列の要素数を出力
System.out.println(ary3.length);
System.out.println(ary3_1.length);
System.out.println(ary5.length);
System.out.println(ary5_1.length);
}
}
}}
&ref(javaBronze9.PNG);
- 回答
-- 選択肢C,Eは、定義通りの宣言の為、正解
-- その他の選択肢は、定義外の宣言の為、不正解
* 第3章 演算子と分岐文 [#y2496f6e]
** 問4 複合代入演算子 [#q595bd9f]
- 複合代入演算子
複合代入演算子は、通常の代入処理と計算処理を加えた省略形...
-- 複合代入演算子一覧(抜粋)
|複合代入演算子|展開結果(省略前)|h
|A += B|A = A + B |
|A -= B|A = A - B |
|A *= B|A = A * B |
|A /= B|A = A / B |
|A %= B|A = A % B |
ex) 省略系と省略前で値が一致する
#highlighter(java,number){{
public class Sample3_4 {
public static void main(String[] args) {
int A = 10;
int B = 9;
int C = 8;
int D = 7;
int E = 6;
int F = 5;
int G = 12;
int H = 3;
int I = 17;
int J = 5;
int A_a = 10;
int B_b = 9;
int C_c = 8;
int D_d = 7;
int E_e = 6;
int F_f = 5;
int G_g = 12;
int H_h = 3;
int I_i = 17;
int J_j = 5;
// 足し算
A += B;
A_a = A_a + B_b;
System.out.println(A + "足し算");
System.out.println(A_a);
// 引き算
C -= D;
C_c = C_c - D_d;
System.out.println(C + "引き算");
System.out.println(C_c);
// 掛け算
E *= F;
E_e = E_e * F_f;
System.out.println(E + "掛け算");
System.out.println(E_e);
// 割り算
G /= H;
G_g = G_g / H_h;
System.out.println(G + "割り算");
System.out.println(G_g);
// 余り
I %= J;
I_i = I_i % J_j;
System.out.println(I + "余り");
System.out.println(I_i);
}
}
}}
&ref(javaBronze10.PNG);
- 回答~
6行目のソースを分解すると~
a = a + b;~
a = a - b;~
変数a は元に戻る
7行目のソースを分解すると~
b = b * a;~
b = b % a;~
変数b は0が設定される。~
-- 選択肢Bは、aにあたるyが8、bにあたるxが0になっている為...
-- その他の選択肢は、不正解。
** 問6 論理演算子について [#d18731c7]
- 論理演算子
論理演算子とは条件を複数記載する場合に使用する
|論理演算子|評価種別|意味|h
|&|通常|左辺、右辺ともにtrueの場合、trueになる。|
|||通常|左辺、右辺どちらか片方がtrueの場合、trueにな...
|&&|短絡評価|左辺、右辺ともにtrueの場合、trueになる。|
||||短絡評価|左辺、右辺どちらか片方がtrueの場合...
- 短絡評価(ショートサーキット演算子)~
短絡評価とは、論理演算式の左辺(第一引数)を評価した段階で~
式全体の値が定まらない場合のみ右辺(第二引数)を評価する...
※左辺を評価した段階で、式全体の値が定まった場合、右辺の評...
ex)
#highlighter(java,number){{
public class Sample3_6_1 {
public static void main(String[] args) {
int x = 1;
int y = 2;
int z = 0;
// 左辺を評価した段階で、式全体がfalseになる為、
// 右辺は評価されない。
// 仮に右辺を評価した場合、 2/0なので、0除算のエラー...
if( x == y && x/z == 0) {
System.out.println("True");
}
else {
System.out.println("False");
}
// 左辺を評価した段階で、式全体がtrueになる為、
// 右辺は評価されない。
// 仮に右辺を評価した場合、 2/0なので、0除算のエラー...
if( x != y || x/z == 0) {
System.out.println("True");
}
else {
System.out.println("False");
}
try {
// 左辺を評価した段階で、式全体がfalseになるが
// 右辺も評価する、 2/0なので、0除算のエラーが発生...
if( x == y & x/z == 0) {
System.out.println("True");
}
else {
System.out.println("False");
}
}catch(Exception e) {
e.printStackTrace();
}
try {
// 左辺を評価した段階で、式全体がtrueになるが、
// 右辺を評価する、 2/0なので、0除算のエラーが発生...
if( x != y | x/z == 0) {
System.out.println("True");
}
else {
System.out.println("False");
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}}
&ref(javaBronze11.PNG);
** 問11 if文について [#j293106d]
- if文について~
if文は if(条件式) で定義される。この時の条件式の結果は~
bool値(true or false)でなくてはならない。~
それ以外の場合はコンパイルエラーとなる。~
ex)
#highlighter(java,number){{
public class Sample3_7_1 {
public static void main(String[] args) {
int i=3;
// 代入式を条件に入れる。bool値じゃない為、コンパイル...
if(i = 3) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}
}}
&ref(javaBronze12.PNG);
- 回答
-- 選択肢Dは、代入式である為、返却値がbool値でない為、エ...
-- その他の選択肢は、結果がbool値になっている為、エラーに...
* 第4章 ループ処理 [#y298d2c7]
** 問12 do-while文 [#l68bedf1]
- do-while文について~
''構文''~
do{ ループ処理 } while(継続条件);
''特徴''
ループ処理を必ず1回以上実行する。
(ループ処理をした後、継続条件を処理する)
- while文について~
''構文''
while(継続条件) { ループ処理 } ;
''特徴''
ループ処理実行しない場合がある。
(継続条件を処理をした後、ループ処理を処理する)
~
ex) do-while文とwhile文
#highlighter(java,number){{
public class Sample4_1_12 {
public static void main(String[] args) {
int num = 1;
// do-while文 ⇒ whileの中の条件に関わらず、do{}の中...
do {
System.out.println("A");
}while(num != 1);
num = 1;
// while文⇒whileの中の条件によっては、ループ内の処理は...
while(num != 1){
System.out.println("B");
}
}
}
}}
&ref(javaBronze13.PNG);
- インクリメントとデクリメントについて
-- インクリメントとは~
数値を1つだけ加算すること。~
Java上では、「i++」または「++i」で表現される。
-- デクリメントとは~
数値を1つだけ減算すること~
Java上では、「i--」または「--i」で表現される。
- 前置と後置について
-- 前置とは~
変数よりも前に演算子が配置されている記載方法。~
ex)
++i , --i
前置法では、次行う処理よりもインクリメント、デクリメント...
ex)
x = ++y ⇒
y = y + 1
x = y
-- 後置とは~
変数よりも後に演算子が配置されている記載方法。~
ex)
i++ , i--
後置法では、インクリメント、デクリメント処理より先に、次...
ex)
x = y++ ⇒
x = y
y = y + 1
- 複雑な演算
--前置法 + 前置法(x = ++y + ++z)
+ 左辺は前置法なので、加算処理よりも先にインクリメントを...
+ 右辺は前置法なので、加算処理よりも先にインクリメントを...
+ 加算処理を行う。
+ 計算結果をx に代入する。
--前置法 + 後置法(x = ++y + z++)
+ 左辺は前置法なので、加算処理よりも先にインクリメントを...
+ 右辺は後置法なので、インクリメントよりも先に加算処理を...
+ 計算結果をx に代入する。
+ 右辺のインクリメントを行う。
--後置法 + 前置法(x = y++ + ++z)
+ 左辺は後置法なので、インクリメントよりも先に加算処理を...
+ 右辺は前置法なので、インクリメントよりも先に加算処理を...
+ 計算結果をx に代入する。
+ 左辺のインクリメントを行う。
--後置法 + 後置法(x = y++ + z++)
+ 左辺は後置法なので、インクリメントよりも先に加算処理を...
+ 右辺は後置法なので、インクリメントよりも先に加算処理を...
+ 計算結果をx に代入する。
+ 左辺のインクリメントを行う。
+ 右辺のインクリメントを行う。
#highlighter(java,number){{
public class Sample4_1_12_1 {
public static void main(String[] args) {
int num = 1;
int left = 2;
int right = 3;
// 前置法 + 前置法
num = ++left + ++right;
System.out.println("left:" + left);
System.out.println("right:" + right);
System.out.println("A:" + num);
num = 1;
left = 2;
right = 3;
// 前置法 + 後置法
num = ++left + right++;
System.out.println("left:" + left);
System.out.println("right:" + right);
System.out.println("A:" + num);
num = 1;
left = 2;
right = 4;
// 後置法 +前置法
num = left++ + ++right;
System.out.println("left:" + left);
System.out.println("right:" + right);
System.out.println("A:" + num);
num = 1;
left = 2;
right = 4;
// 後置法 +後置法
num = left++ + right++;
System.out.println("left:" + left);
System.out.println("right:" + right);
System.out.println("A:" + num);
}
}
}}
&ref(javaBronze14.PNG);
- 回答~
ポイントは、~
do-while文の特徴と演算の順番。~
do-whileの特徴は前述に述べたとおり、~
''条件に関わらずループ処理は1回以上実行される''。~
演算の順番については、''前置法が処理前''に行われ、~
''後置法が処理した後''に実行される。~
今回の場合、 「++num - num++ < 0 」は~
++ ++num実行~
(num = num + 1 ⇒ num は2)
++ 1の計算結果 - num~
( num - num ⇒ 0)
++ 2の計算結果 < 0~
( 0 < 0 ⇒ false)
++ num++実行~
(num = num + 1 ⇒ num は3)~
~
になる。~
よって、継続条件を満たさない為、1度Aを出力して処理を終了...
#highlighter(java,number){{
public class Sample4_1_12_2 {
public static void main(String[] args) {
int num = 1;
do {
// ループ処理
System.out.println("A");
} while(++num - num++ < 0 );//継続条件
System.out.println(num);// 計算結果のnum値
}
}
}}
&ref(javaBronze15.PNG);
** 問19 while文のネスト [#m4115007]
- 二次元配列について~
1次元配列(通常の配列 int[] a = new int[3])の要素一つ(a[0]...
配列がある状態。~
''宣言方法''
データ型 [][] 配列名 = new データ型[要素数][要素数];
データ型 配列名[][] = new データ型[要素数][要素数];
''初期化+宣言方法''
データ型 [][] 配列名 = {{要素1,要素2,要素3},{要素1,要素2...
データ型 配列名[][] = {{要素1,要素2,要素3},{要素1,要素2...
イメージ(データ型 配列[][] = {{要素1,要素2,要素3},{要素a,...
|行列|配列[0][0]|配列[0][1]|配列[0][2]|h
|配列[0][0]|要素1|要素2|要素3|
|配列[1][0]|要素a|要素b|要素c|
|配列[2][0]|要素α|要素β|要素γ|
- ラベル付きbreak文~
通常break文を実行した場合、一番内側のループのみを終了する...
ラベル付きでbreakした場合、指定したラベルまでのループ処理~
を終了させることが出来る。~
構文
ラベル名: ループ処理
※ラベル名:の後に{}を定義することも可能。
ex)
#highlighter(java,number){{
public class Sample4_1_19 {
public static void main(String[] args) {
int num[][] = new int[3][3];
// ラベル設定
start:
// 一つ目のループ
for(int x = 0; x < 3; x++) {
// 2つ目のループ
for(int y = 0; y < 3; y++) {
// 2次元配列に値を設定。
num[x][y] = x + y;
System.out.println("x:" + x + ",y:" + y);
// xが1になった時に、startから下にあるループを抜ける。
if(x == 1) break start;
}
}
}
}
}}
&ref(javaBronze16.PNG);
- 回答~
2次元配列の~
[0][] が{0,1,2}~
[1][] が{3,4,5}~
[2][] が{6,7,8}~
であること。~
~
ラベル付きbreak文は、ラベルまでのループを抜けること。~
つまり、~
i = 0 の時は、全て出力。~
i = 1の時は、j=0の場合のみ出力して、~
ループを抜けることが分かる為、0123のCになる。~
#highlighter(java,number){{
public class Sample4_1_19_1 {
public static void main(String[] args) {
int num[][] = { {0,1,2},{3,4,5},{6,7,8} };
int i = 0;
// ラベル設定
label:
// 一つ目のループ
while(true) {
// 2個目のループ用に初期化
int j = 0;
// 2つ目のループ
while(j < 3) {
// 2次元配列出力。
System.out.println(num[i][j]);
j++; //jのインクリメント
// iが1になった時に,label以下のループを抜ける。
if(i == 1) break label;
}
i++; // iのインクリメント
}
}
}
}}
&ref(javaBronze17.PNG);
* 第5章 オブジェクト指向コンセプト [#s508f14b]
** 問1 クラス定義 [#l7df2f7d]
- [[抽象クラス>Java/抽象クラス]]とは~
抽象クラスは、抽象メソッドを1つ以上持つことが出来るクラ...
宣言方法
abstract class クラス名
-- 抽象メソッドとは~
実装の中身を持たない、定義だけのメソッド。~
宣言方法
abstract 戻り値の型名 メソッド名(引数);
ex)
#highlighter(java,number){{
// 抽象クラス(抽象メソッドを1つ以上持つクラス)
abstract class Sample_abstract {
private int ans = 0;
//抽象メソッド(中身の処理を持たない)
abstract void setQ(int i);
//具象メソッド(中身の処理を持つ)
public int getA(){
return ans;
}
}
}}
-- 抽象クラスの特徴
+++ 抽象クラスは、インスタンス化(new 抽象クラス)が出来な...
#highlighter(java,number){{
// 抽象クラス
abstract class Sample_abstract {
private int ans = 0;
//抽象メソッド
abstract void setQ(int i);
//具象メソッド
public int getA(){
return ans;
}
}
// 実行クラス
public class Sample5_1_1 {
public static void main(String[] args) {
// 抽象クラスのインスタンス生成
Sample_abstract obj = new Sample_abstract();
}
}
}}
&ref(javaBronze18.PNG);
+++ 抽象クラスを継承したクラスは、抽象メソッドをオーバラ...
#highlighter(java,number){{
// 抽象クラス
abstract class Sample_abstract {
private int ans = 0;
//抽象メソッド
abstract void setQ(int i);
//具象メソッド
public int getA(){
return ans;
}
}
// 抽象クラスを継承した実行クラス
public class Sample5_1_2 extends Sample_abstract {
public static void main(String[] args) {
}
}
}}
&ref(javaBronze19.PNG);
+++ 抽象クラスには、抽象メソッド以外に、実装を持つメソッ...
#highlighter(java,number){{
// 抽象クラス
abstract class Sample_abstract {
private int ans = 0;
//抽象メソッド
abstract void setQ(int i);
//具象メソッド(実装を持つメソッド)
public int getA(){
return ans;
}
}
// 実行クラス
public class Sample5_1 extends Sample_abstract {
private int ans;
public static void main(String[] args) {
}
@Override
public void setQ(int i) {
ans = i;
}
}
}}
&ref(javaBronze20.PNG);
- 具象クラス~
抽象クラスを1つも持たない、定義されている全てのメソッドは...
-- 具象クラスの特徴
+++ 具象クラスはインスタンス化(new クラス名)可能。
#highlighter(java,number){{
// 具象クラス
class Sample {
private int ans = 0;
//具象メソッド
public void setQ(int i){
ans = i;
}
//具象メソッド
public int getA(){
return ans;
}
}
// 実行クラス
public class Sample5_1_4 {
public static void main(String[] args) {
// 具象クラスのインスタンス化
Sample obj = new Sample();
}
}
}}
&ref(javaBronze22.PNG);
+++ 具象クラスは抽象メソッドを宣言出来ない。
#highlighter(java,number){{
// 具象クラス
class Sample {
private int ans = 0;
//抽象メソッド
abstract void setQ(int i);
//具象メソッド
public int getA(){
return ans;
}
}
// 具象クラスを継承した実行クラス
public class Sample5_1_3 extends Sample {
public static void main(String[] args) {
}
}
}}
&ref(javaBronze21.PNG);
- 回答
-- A.abstractメソッドは抽象メソッドのなので、具象クラスで...
-- B.抽象クラスは、具象メソッド(実装を持つメソッド)を定...
-- C.具象クラスは、インスタンス化(new クラス)が出来るので...
-- C.抽象クラスは、インスタンス化(new クラス)が出来ないの...
** 問6 データ隠蔽とカプセル化 [#a897f1e8]
-オブジェクト指向用語
-- 属性とは~
クラス内で定義された変数のこと。「プロパティ」とも呼んだ...
-- 操作とは~
クラス内で定義されたメソッドのこと。「振る舞い」とも呼ん...
- データの隠蔽とは~
カプセル化の具体例の一つ。特徴は以下。
--クラス内に定義されている属性(クラス内変数)に対して、~
直接に値の設定(操作)出来ないようにすること。~
--データ操作に必要な情報(メソッド)のみを外部に提供するこ...
- カプセル化とは~
データ構造を隠蔽、データに必要な操作を「ひとつの纏まりに...
- データ隠蔽とカプセル化の利点
++ 内部構造を理解していなくとも、公開されている操作で利用...
++ データへのアクセスが制限されている為、~
カプセル化したクラス内部の変更が外部に影響しない。(再利用...
++ 変更がクラス内で完結する為、変更が容易。(システムの安...
~
ex)
#highlighter(java,number){{
// 操作、データを一つにまとめたクラス
// ⇒ カプセル化
class Sample {
// private を設定することで、Sampleクラス以外からの
// アクセスを禁止する
// ⇒ データの隠蔽
private int ans = 0;
//-- ans 変数にアクセスするためのメソッドのみ外部に公開...
// ⇒ データの隠蔽
//属性に対して、アクセスするためのメソッド(操作)
public void setQ(int i){
ans = this.calc(i);
}
//属性に対して、アクセスするためのメソッド(操作)
public int getA(){
return ans;
}
//-- ここまで
//
private int calc(int i) {
return i+i;
}
}
// 実行クラス
public class Sample5_6 {
public static void main(String[] args) {
// 具象クラスのインスタンス化
Sample obj = new Sample();
// obj.ans=5
// int x = obj.ans は出来ない為、
// setQメソッドとgetAメソッドを使って操作する
obj.setQ(5);
System.out.println(obj.getA());
}
}
}}
&ref(javaBronze23.PNG);
- 回答
-- A. データの隠蔽の話なので、正解
-- B. 属性と操作一つのまとまりにするのがカプセル化なので...
-- C. データのアクセスを制限し、内部の変更を用意すること...
-- D. B同様、一つのまとまりにするのが、カプセル化なので、...
-- E. データと操作を1つにまとまりするだけなので、プログラ...
** 問9 カプセル化 [#yaeccc8d]
- 回答~
データの隠蔽と迷いそうだが、データの隠蔽は、~
--外部からのアクセスを制限すること。
--制限したデータに対しての操作を公開すること。~
であり、「まとめてオブジェクトを表現」することではない。~
属性と属性に対する操作を~
「まとめてオブジェクトを表現」するのはカプセル化になる為...
* 第6章 クラス定義とオブジェクトの生成、使用 [#bdfb0692]
** 問9 オーバーロード [#d75d611a]
- オーバーロード~
オーバーロードとは、同名のメソッド名で、~
「引数が異なる(引数の数、と型の並び)メソッド」の関係の事...
ex)
#highlighter(java,number){{
public class Sample6_9 {
public static void main(String[] args) {
dispPlay(10,20);
dispPlay(10,"30");
dispPlay("30", 10);
dispPlay(10,30,40);
}
// ここから下に定義するメソッドは全て
//オーバーロードの関係にある。
// 引数の個数2個で型がint int の順-- ①
public static void dispPlay(int i, int h) {
System.out.println("result" + i + h);
}
// 引数の個数2個で型がint Stringの順-- ②
public static void dispPlay(int i, String h) {
System.out.println("result" + i + h + "文字");
}
// 引数の個数2個で型がString int の順-- ③
public static void dispPlay(String i, int h) {
System.out.println("result:文字" + i + h);
}
// 引数の個数3個で型がint int intの順 -- ③
public static void dispPlay(int i, int h, int j) {
System.out.println("result" + i + h * j);
}
}
}}
&ref(javaBronze24.PNG);
- 演算子の優先順位~
下記の演算子の優先順で同列にあるものは基本的に左から評価...
|優先順位|演算子|結合規則|h
|高い|[ ] . (パラメータのリスト) x++ x--|左|
||++x --x +x ~ !|右|
|↓|new (型)x|右|
|↓|* / %|左|
|↓|+ -|左|
|↓|<< >> >>>|左|
|↓|< > <= >= instanceof|左|
|↓|== !=|左|
|↓|&|左|
|↓|^|左|
|↓|||左|
|↓|&&|左|
|↓||||左|
||? :|右|
|低い|= += -= *= /= %= &= ^= |= <<= >>= >...
ex)
#highlighter(java,number){{
public class Sample6_9_1 {
public static void main(String[] args) {
dispPlay(10,20);
dispPlay(10,30,40);
}
public static void dispPlay(int i, int h) {
// 左から評価するため、文字列結合が優先される
// "result"とint型iを文字列結合 そのあとint型hと文字列...
System.out.println("result" + i + h);
}
public static void dispPlay(int i, int h, int j) {
// 優先順位の高い演算子*がある為、先にh*jを計算する
// その後、左から順番に評価する。
System.out.println("result" + i + h * j);
}
}
}}
&ref(javaBronze25.PNG);
-回答~
引数の型と数により、呼び出されるメソッドを選択する。~
その後、"result"と結合して出力する。~
この時、演算子の優先順位が存在しない場合、~
左から評価される為、10行目のメソッドでは~
文字列結合が行われ、数値の計算は行われない。~
11行目のメソッドでは、優先順位の高い演算子()がある為、~
()内を処理した後、文字列結合(左から順番に)が行われる為、...
** 問10 コンストラクタ [#iffa4a6d]
- コンストラクタとは~
コンストラクタとは、インスタンス生成時に、呼び出される特...
クラス名と同じ名称を持つ。主に、内容の初期化に使用する。~
-- コンストラクタ定義
+++ クラス名と同名
+++ 戻り値を設定出来ない。
+++ 引数は設定出来る
+++ 引数違いのを宣言出来る(オーバーロード)
+++ final修飾子は指定できない。
ex)~
#highlighter(java,number){{
class TestClass {
private int x;
// コンストラクタ
public TestClass() {
x = 10;
}
// コンストラクタのオーバーロード
TestClass(int j) {
x = j;
}
// 返却値を設定している為、コンストラクタではない。
public void TestClass(int j) {
x = j;
System.out.println("コンストラクタじゃない");
}
public int getValue() {
return x;
}
}
public class Sample6_10_1 {
public static void main(String[] args) {
// インスタンス生成
TestClass obj = new TestClass();
// インスタンス生成
TestClass obj2 = new TestClass(100);
System.out.println(obj.getValue());
System.out.println(obj2.getValue());
// メソッドを呼出し。
obj2.TestClass(200);
System.out.println(obj2.getValue());
}
}
}}
&ref(javaBronze26.PNG);
- 回答~
dispメソッドを修正出来ない為、~
インスタンス生成時に呼び出されるコンストラクタを使用する...
コンストラクタは返却値の設定、final修飾子の設定が出来ない...
bとeは不正解。その他の選択肢は、コンストラクタの定義とし...
cはprivateを指定している為、同一クラス内からしか呼べなく...
不正解。よって答えはaとdになる。~
** 問13 コンストラクタとthis [#ad133b67]
- this~
java上でthisとは、自分自身を表す。(使用しているクラス自身)
--thisの利用
+++ コンストラクタ内から自クラス内の他のコンストラクタを...
但し、1行目に記述しないといけない。
#highlighter(java,number){{
class TestClass {
private int x;
// コンストラクタ
public TestClass(int x) {
this.x = x;
this(x, 100);// 2行目にコンストラクタの呼出しを記載エラ...
}
// コンストラクタのオーバーロード
public TestClass(int x, int y) {
this.x = x + y;
System.out.println("引数2個だよ");
}
public int getValue() {
return x;
}
}
public class Sample6_13_2 {
public static void main(String[] args) {
// インスタンス生成
TestClass obj = new TestClass(10);
System.out.println(obj.getValue());
}
}
}}
&ref(javaBronze28.PNG);
+++ 自クラス内のメソッドやメンバ変数を呼ぶ
ex)~
#highlighter(java,number){{
class TestClass {
private int x;
// コンストラクタ
public TestClass(int x) {
this(x, 100);// thisは自分自身を呼び出せる為、コンスト...
}
// コンストラクタのオーバーロード
public TestClass(int x, int y) {
//本来であれば、x = x; で値を設定出来るが
//引数の名前とクラス内変数(インスタンス変数)
//が同じである為、クラス内変数に設定したいところが、引...
x = x;
System.out.println(this.x);
//明示的に、thisを使って指定する。
//thisはクラスそのもの「私の」と読み替えればわかりすい...
this.x = x + y;
System.out.println("引数2個だよ");
}
public int getValue() {
return x;
}
}
public class Sample6_13_1 {
public static void main(String[] args) {
// インスタンス生成
TestClass obj = new TestClass(10);
System.out.println(obj.getValue());
}
}
}}
&ref(javaBronze27.PNG);
- 回答~
9行目のコンストラクタの呼出しが2行目に記載されている為
エラーになる。よって、回答はe
** 問16 クラスの修飾子 [#l8f8b6e5]
- クラスの修飾子について
-- クラスの修飾子のルール
+++ 1つjavaソース内に、複数のpublicクラスを定義することは...
+++ public修飾子指定したクラスは、ソースファイル名と同じ...
ex)ファイル名:Sample6_16_1.java~
#highlighter(java,number){{
//public 修飾子を複数に持つ。
public class TestClass {
}
public class Sample6_16_1 {
public static void main(String[] args) {
// インスタンス生成
}
}
}}
&ref(javaBronze29.PNG);
+++ クラス修飾子を指定していないクラスにアクセスできるの...
ex)
#highlighter(java,number){{
package pack1;
class TestClass {
public void disp(){
System.out.println("pack1");
}
}
public class Sample6_16_2 {
public static void main(String[] args) {
// インスタンス生成
}
}
}}
#highlighter(java,number){{
package pack2;
import pack1.TestClass;
public class Sample6_16_3 {
public static void main(String[] args) {
// インスタンス生成
}
}
}}
&ref(javaBronze30.PNG);
- 回答
クラス修飾子のルールに従い、回答はa,c
** 問24 staicメソッド [#wf65b0b1]
- staticついて
staticを付けることで、以下の事が可能になります。
++ staticメソッドは、インスタンス生成せずにアクセス可能に...
++ static変数は、インスタンス生成せずにアクセス可能になり...
ex)
#highlighter(java,number){{
class TestClass {
static String name ="static Class";
static public void disp() {
System.out.println("static");
}
}
public class Sample6_24 {
public static void main(String[] args) {
// インスタンス生成せずに、クラス指定で呼び出せる
System.out.println(TestClass.name);
// インスタンス生成せずに、クラス指定で呼び出せる
TestClass.disp();
}
}
}}
&ref(javaBronze31.PNG);
++ staticなメソッドから非staticなメソッドへのアクセスはで...
ex)
#highlighter(java,number){{
public class Sample6_25 {
public static void main(String[] args) {
// staticメソッドから非staticメソッドを呼出し
mainDisp();
}
public void mainDisp() {
System.out.println("mainメソッド");
}
}
}}
&ref(javaBronze32.PNG);
- 回答~
staticメソッドから呼ばれるメソッドなので、staticメソッド...
よって選択肢cが正解になる。
* 第7章 継承とポリモフィズム [#hb7ac506]
** 問14 ポリモフィズム [#k2f25012]
- 回答
#highlighter(java,number){{
// クラス
class Engineer {
String name,lang;
// コンストラクタ
Engineer(String name) {
this.name = name;
}
public void print() {
System.out.println(name);
}
}
// Enfineerクラスを継承したProgrammerクラス
class Programmer extends Engineer {
private String lang;
// コンストラクタ
Programmer(String name, String lang) {
// super()は、親クラスのコンストラクタを呼び出す
super(name);
// thisを使用しているので、自クラスのlangに値を設定
this.lang = lang;
}
public void print() {
// 自クラスにnameはない為、親クラスのnameが参照され...
// 仮に自クラスにnameがあった時は、自クラスのnameが...
// 自クラスにlangがある為、自クラスのlangが参照され...
System.out.println(name + " : " + lang);
}
}
public class Sample7_14_1 {
public static void main(String[] args) {
// Engineerクラス型で宣言
Engineer eng1, eng2;
// Engineerクラスのインスタンス生成
eng1 = new Engineer("Sato");
// Programmerクラスのインスタンス生成
// この時、代入先の型がEnginnerクラスだが
// ProgrammerクラスがEnginnerクラスを継承している為、
// 代入可能となる。
eng2 = new Programmer("Suzuki", "Java");
// enginnerクラスのprintメソッド
eng1.print();
// インスタンス自体は、programmerクラスの為、
// programmerクラスのprint()メソッドが呼び出される。
eng2.print();
}
}
}}
&ref(javaBronze33.PNG);
** 問16 ポリモフィズム [#b629609e]
#highlighter(java,number){{
//インターフェースクラス
interface Inter {
void disp();
}
// Interクラスを継承したTest1クラス
class Test1 implements Inter {
// Inerクラスのオーバーライド
public void disp() {
System.out.print("Hello");
}
}
// Test1クラスを継承したTest2クラス
class Test2 extends Test1 {
// Test1クラスのオーバーライド
public void disp() {
System.out.print("Java");
}
}
// 実行クラス
public class Sample7_16_1 {
public static void main(String[] args) {
// Interクラス型の変数宣言
Inter obj1;
// Test1のインスタンス生成
Test1 obj2 = new Test1();
// Test2のインスタンス生成
Test2 obj3 = new Test2();
// Test2のインスタンスをInterクラス型の変数に代入
// Test2クラスは、Test1クラスを継承しており、
// Test1クラスは、Interクラスを継承している。
// 間接的にTest2クラスはInterクラスを継承している為、
// 代入可能。 Test2クラスにとって、Test1が親、Inter...
obj1 = obj3;
// Interクラス型だが、中身は、Test2クラスのインスタ...
// Test2クラスのdispが呼び出される。
obj1.disp();
}
}
}}
&ref(javaBronze34.PNG);
** 問20 スーパークラスのコンストラクタ [#ta6539e5]
- super~
java上でsuperとは、継承した時の親クラスを表す。~
--superの利用
+++ 子クラスから、親クラスのコンストラクタを呼び出す。
+++ 子クラスから、親クラスの変数、メソッドを呼び出す。
- 回答~
ex)選択肢C~
明示的にAccountクラスのコンストラクタを呼んでいない為~
Accountクラスの引数なしのコンストラクタが呼ばれようとする...
存在しない為、エラーになる。~
#highlighter(java,number){{
class Account {
int balance;
Account(int balance) {
this.balance = balance;
}
}
// Accountクラスを継承
public class Sample7_20_1 extends Account {
protected double rate;
// コンストラクタ
Sample7_20_1(int balance, double rate) {
// insert code here
// この処理をうまく動かすには
// ①自クラスのrateに値を設定する処理
// ②親クラスのbalanceに値を設定する処理
// が必要になる。
super.balance = balance;
this.rate = rate;
}
public static void main(String[] args) {
// Sample7_20_1クラスのインスタンスを生成
Sample7_20_1 sa = new Sample7_20_1(50000, 0.05);
// Sample7_20_1クラスにbalance変数はない為、親クラス...
System.out.println(sa.balance);
// Sample7_20_1クラスにrate変数がある為、自クラスのr...
System.out.println(sa.rate);
}
}
}}
&ref(javaBronze35.PNG);~
ex)選択肢D
#highlighter(java,number){{
class Account {
int balance;
Account(int balance) {
this.balance = balance;
}
}
// Accountクラスを継承
public class Sample7_20_2 extends Account {
protected double rate;
// コンストラクタ
Sample7_20_2(int balance, double rate) {
// insert code here
// この処理をうまく動かすには
// ①自クラスのrateに値を設定する処理
// ②親クラスのbalanceに値を設定する処理
// が必要になる。
super(balance);
this.rate = rate;
}
public static void main(String[] args) {
// Sample7_20_1クラスのインスタンスを生成
Sample7_20_2 sa = new Sample7_20_2(50000, 0.05);
// Sample7_20_1クラスにbalance変数はない為、親クラス...
System.out.println(sa.balance);
// Sample7_20_1クラスにrate変数がある為、自クラスのr...
System.out.println(sa.rate);
}
}
}}
&ref(javaBronze36.PNG);
** 問21 参照型の型変換 [#t2b456fa]
- 参照型の型変換~
参照している型が、継承しているクラスまたは~
自クラスの場合、明示的型変換、もしくは、暗黙の型変換で代...
ex)
#highlighter(java,number){{
class Base {
public void disp() {
System.out.println("base");
}
}
class Test1 extends Base {
// Baseクラスのオーバーライド
public void disp() {
System.out.println("Hello");
}
}
class Test2 extends Test1 {
// Test1クラスのオーバーライド
public void disp() {
System.out.println("Java");
}
}
// 実行クラス
public class Sample7_21_1 {
public static void main(String[] args) {
Base obj1 = new Base();
Test1 obj2;
Test2 obj3;
// 暗黙的な型変換 (継承している為、可能)
Base obj4 = new Test1();
Test1 obj5 = new Test2();
try {
// obj1に入ってるインスタンスはBaseクラスの為、
// 型変換が行えずエラーになる。
obj2 = (Test1)obj1;
}catch(Exception e) {
e.printStackTrace();
}
// Baseクラス型のobj4はTest1クラスを参照している為、
// 変換可能(明示的な型変換
obj2 = (Test1)obj4;
// Test1のobj5はTest2クラスを参照している為、
// 変換可能(明示的な型変換
obj3 = (Test2)obj5;
// Test1のobj5はTest2クラスを参照している為、
// 継承しているTest1クラスに変換可能である
Test1 obj6 = (Test1)obj5;
obj2.disp();
obj3.disp();
obj6.disp();
}
}
}}
&ref(javaBronze37.PNG);
- 回答~
Coffeクラスは、CoffeMochaクラスの親クラス~
cofオブジェクトの参照先は、Coffeクラスの為、~
CoffMochaクラスに型変換することは出来ない。~
逆に、Coffe型のcofオブジェクトの参照先がCoffeMochaのオブ...
型変換可能になる。よって今回は実行時に型変換のエラーにな...
Dが正解になる。
** 問22 参照型の型変換 [#keb9962e]
-回答
#highlighter(java,number){{
// Teaクラス
class Tea {
String flavor;
}
// Teaクラスを継承したMilkTeaクラス
class MilkTea extends Tea {
MilkTea(String flavor) {
this.flavor = flavor;
}
void addFlavor() {
System.out.println("Add: " + flavor);
}
}
public class Sample7_22_1 {
public static void main(String[] args) {
Tea tea = new MilkTea("Milk");
// insert code here
// Teaクラス型のteaオブジェクトの参照先はMilkTeaのイ...
// Teaクラス型には、addFlavorメソッドは用意されてい...
// MilkTeaクラスにキャストする必要がある。
// teaオブジェクトの参照先は、MilkTeaクラスなので、...
((MilkTea)tea).addFlavor();
// 上記は変数に一度格納しないだけで
// Milktea milk = (MilkTea)tea;
// milk.addFlavor()とやっているのと同じ処理になる。
}
}
}}
&ref(javaBronze38.PNG);
* 実績 [#s8b4cc0f]
- 9/8 第4章の問9迄(++とwhile文について、追記必要。)
- 9/15 第4章の問9から第5章終わりまで
- 9/17 第6章~第7章 模試 44/60
- 9/18 試験 55%非常におしい。
* 関連 [#s94c78b1]
#ls2
ページ名: