明解Java入門編 第5章まとめ
基本型
Javaで利用出来る型を大別すると基本型と参照型とに分かれる。
基本型はさらに2つにわかれる。
数値型
整数を表す5種類の整数型と実数を表す2種類の浮動小数点型がある。
論理型
論理値を表す論理型(boolean)は真偽いずれかの値を表現する型。
型とビット
式には型があり、型と値が同じであれば記憶域上の内部表現も同じものになる。
内部表現は0または1の値を持つデータ単位であるビットの集まりである。
値を表現するためのビットの個数や個々のビットの意味は型によって異なる。
整数型
有限範囲の連続した整数を表現する型。
5種類ある
char byte short int long
これらの型では小数点以下の部分を持つ実数は表せない。
char型
文字を表すための型。
非負の値しか表せない。
0と正の値を表現する符号なし整数型。
byte型/short型/int型/long型
整数を表すための型。
負の値,正の値を表現する符号付き整数型。
各型の表現可能値が異なるのは構成ビットが異なるため。
これらの型ではビット数の多い型ほど表現範囲も広くなる。
byte
1バイト(8ビット)の整数。1バイトのデータを表す際利用。
short
短い整数。小さな値しかとり得ないことがわかっていて、記憶域を節約したい場合利用。
int
整数型の中で最も基本的な型。通常これを利用。
long
長い整数。int型では表現できない大きな値が必要な場合利用。
整数リテラル
整数型の定数を表す。
6種類ある。
・10進整数リテラル(int型/lomg型)
10や57といった日常で使う数字
・8進整数リテラル(int型/long型)
先頭に0をつけ2桁以上で表記する
・16進整数リテラル(int型/long型)
先頭に0xまたは0Xをつけ表記する
A~Fの大文字小文字は問わない
整数接尾語
lまたはLを末尾につけた整数リテラルの型はlong型になる。
整数の内部
符号ビット:0
0または正
符号ビット:1
負
負の値は2の補数表現という表現法で表される。
浮動小数点型
小数点以下の部分を持つ実数を表すのが浮動小数点型。
表現範囲は大きさと精度の両方から制限を受ける。
float
double
浮動小数点リテラル
57.3のように実数を表す定数のことをいう。
10進表記と16進表記が可能。
浮動小数点接尾語
型を指定する。
float型:fとF
double型:dとD
指定しない場合double型とみなされる。
論理型(boolean型)
真を表すtrueと偽を表すfalseのいずれかの値を持つ。
足したり引いたり割ったりできない。
以下の文脈で使用可。
・if文の制御式
・do文,while文,for文の制御式
・条件演算子?:の第1オペランド
「文字列+論理値」あるいは「論理値+文字列」の演算を行うと論理型の値が"true"もしくは"false"に変換された上で連結される。
演算と型
int型同士の算術演算・double型同士の算術演算によって得られる値の型はオペランドと同じ型になる。
二項数値昇格
算術演算の対象となるオペランドの型が異なる時、小さい方の型のオペランドはより大きいほうの型に変換された上で演算が行われる。
(大きいとは余裕があるという意味)
二項数値昇格における型変換
・一方のオペランドがdouble型ならば他方をdouble型に変換する。
・そうでなく、一方のオペランドがfloat型ならば他方をfloat型に変換する。
・そうでなく、一方のオペランドがlong型ならば他方をlong型に変換する。
・そうでなければ、両オペランドをint型に変換する。
数値の徐算における商を実数値として求めるためには少なくとも一方のオペランドが浮動小数点型でなければならない。
キャスト演算子
(型)x:xを型に変換した値を生成。
基本型の縮小変換
より小さい型への値の代入にはキャストが必要である。
種類
short→byte,char
char→byte,short
int→byte,short,char
long→byte,short,char,int
float→byte,short,char,int,long
double→byte,short,char,int,long,float
縮小変換には原則としてキャストが必要。
例外
代入の右辺の式や初期化子がbyte,short,char,int型の定数式で、代入先あるいは初期化先の変数の型がbyte,short,charであって、定数式の値が変数の型で表現できる場合、基本型の縮小変換が自動的に行われるのでキャスト不要である。(定数式に限られ、変数であれば必ずキャストが必要)
浮動小数点型はこのような規則がない。
変換に伴い数値の大きさの情報や精度を失うことがある。
基本型の拡大変換
代入あるいは初期化の際に自動的に行われる。キャスト不要。
種類
byte→short,int,long,float,double
short→int,long,float,double
char→int,long,float,double
int→long,float,double
long→float,double
float→double
数値の大きさに関する情報は原則失われない。
intあるいはlongの値からfloatへの変換、longの値からdoubleへの変換については精度を失うことがある。
この場合浮動小数点数の変換結果は最も近い値に丸められた整数値となる。
基本型の拡大変換と縮小変換
byteからcharへの変換ではbyteは基本型の拡大変換によりintへ変換され、その後基本型の縮小変換によりintからcharへと変換される。
繰返しの制御
繰返しの判定基準とする変数には浮動小数点数ではなく整数を使用する(浮動小数点数がすべての桁の情報を失うことなく表現できるとは限らないため)。
拡張表記
\を先頭にした文字のならびによって単一の文字を表す表記法。
文字リテラルや文字列リテラルで使用する。
\b 後退:表示位置を直前の位置へ移動する
\f 書式送り:改ページし次ページの先頭へ
\n 改行:改行し次の行の先頭へ
\r 復帰:現在の行の先頭位置へ
\t 水平タブ:次の水平タブ位置へ
" 文字":二重引用符
\' 文字':単一引用符
\ 文字:バックスラッシュ
\ooo oooは8進数:8進数でoooの値を持つ文字
Unicode拡張\uhhhh hhhhは16進数:16進数でhhhhの値を持つ文字
明解Java入門編 第4章まとめ
do文
式を評価した値がtrueである限り文を繰り返し実行する。
構文図:do 文 while (式);
do文が繰り返す文のことをループ本体と呼ぶ(この本では)
while文
式を評価した値がtrueである限り文を繰り返し実行する。
構文図:while (式) 文
増分演算子
変数の値をひとつ増やす(インクリメント)演算子++。
減分演算子
変数の値をひとつ減らす(デクリメント)演算子--。
後置増分演算子
x++:xの値をインクリメントする。生成するのは増加前の値。
例) xの値が5のときy= x++;
yに代入されるのは5
代入完了後の値は6
これは後置減分演算子も同じ
後置減分演算子
x--:xの値をデクリメントする。生成するのは減少前の値。
後置という名前はオペランドの後ろに演算子を適用することに由来する。
前置増分演算子
++x:xの値をインクリメントする。生成するのは増加後の値。
例) xの値が5のとき y= ++x;
yに代入されるのは6
代入完了後の値も6
これは前置減分演算子も同じ
前置減分演算子
--x:xの値をデクリメントする。生成するのは減少後の値。
式の評価順序
2項演算子の左オペランドは右オペランドよりも先に評価される。
式の値の切り捨て
演算結果は使わずに切り捨てできる。
文字リテラル
単一引用符'で囲んだ式。
文字リテラル'*':単一の文字*を表す。型はchar。
文字列リテラル"*":文字*だけから構成される文字のならびを表す。型はString。
while文とdo文
do文のループ本体は必ず一回は実行されるがwhile文のループ本体は1回も実行されない可能性がある。
do文
後判定繰返し:ループ本体を実行した後に判定を行う
while文
前判定繰返し:ループ本体を実行する前に判定を行う
whileというキーワードを使うのは共通なため、do文のループ本体はたとえ単一文であっても{}で囲んでブロックにし読みやすくする。
複合代入演算子
*=,/=,%=,+=,-=,<<=,>>=,>>>=,&=,^=,|= など
演算と代入というふたつの働きを持つ。
メリット
行うべき演算を簡潔に表せる。
左辺の変数名を書くのが一回で済む。
左辺の評価が一回限りである。
for文
定型的な繰返しの制御をwhile文より簡潔に実現できる。
構文図:for(for初期化部;式;for更新部)文
for初期化部
変数の宣言を置くことができる(宣言する変数はそのfor文の中でのみ使用可。for文ごとに宣言が必要)。
複数の変数を定義する場合「,」で区切る。
必要なければ省略もできる。
式
省略した場合繰返し継続の判定は常にtrue。
breakやreturn文を実行しない限り無限ループになる。
for更新部
複数の式を「,」で区切って置ける。省略もできる。
繰返し文
do,while,for文をあわせて繰返し文という。
今回のfor文は基本for文という。
多重ループ
繰返し文のループ本体を繰返し文にすると二重、三重の繰返しを行うことができる。
break文
繰返し文を強制的に中断、終了させる。
continue文
ループ本体の残り部分がすっ飛ばされてプログラムの流れはループ本体の末尾へ一気に飛ぶ。
do文とwhile文のとき
continue文の後ろに置かれている文2の実行がスキップされ繰返しをするかどうかの判定をする式の評価が行われる。
for文のとき
continue文の後ろに置かれている文2の実行がスキップされ次の繰返し準備のための更新部が評価・実行されてから式の評価が行われる。
ラベル付きbreak文・continue文
多重ループの実行中に外側の繰返しを一気に抜け出たり、強制的に繰返しを続けたい場合、ラベル付きbreak文やラベル付きcontinue文を使う。
構文図:ラベル付き文→識別子→:文
break文とcontinue文
break文とcontinue文は全部で4つ(ラベル付き、なし)。
continue文はラベルありなしのいずれも繰返し文の中でのみ利用可。
break文はラベルなしのとき、switch文と繰返し文の中でのみ利用可。
ラベル付きの場合ラベル付き文の中であれば利用可。
printfメソッド
基数や桁数などの書式を制御して画面への表示を行う。
書式文字列
%d:10進数で出力
%o:8進数で出力
%x:16進数で出力(a~fは小文字)
%X:16進数で出力(A~Fは大文字)
%c:文字として出力
%f:小数点形式で出力
%s:文字列で出力
%を文字として出力したい場合%%と表記する必要がある。
do-while文とwhile文の違い
処理の仕方
do-while文
繰り返す対象の処理
↓
繰り返すかの判定
do {
ケーキを食べる この処理を繰り返す(一回は必ずやる)
} while(ケーキは残っている?); この条件を満たす間
while文
繰り返すかの判定
↓
繰り返す対象の処理
while(ケーキは残っている?){
ケーキを食べる
}
*最初の時点で繰り返す条件を満たさないなら処理は一度もしない
参考
明解Java入門編 第3章まとめ
if文
ある条件が成立するかどうかによって、行うべき処理を選択的に決定する。
if-then文
構文:if(式)文
式の値を調べてその値がtrueのときのみ文を実行する。falseのときは何も表示されない。
ある条件が成立したときのみ行うべきことがある場合使う。
()内に書かれた条件判定式を制御式と呼ぶ。
trueとfalseは論理値リテラルと呼ばれる論理型のリテラルである。
関係演算子
「 > 」のようにオペランドの大小関係を判定する演算子のこと。
x < y xがyより小さければtrue,そうでなければfalse
x > y xがyより大きければtrue,そうでなければfalse
x <= y xがyより小さいか等しければtrue,そうでなければfalse
X >= y xがyより大きいか等しければtrue,そうでなければfalse
関係演算子は2項演算子である。
1 <= a <= 3 という記述はできない
a >= 1 && a <= 3 というように記述する
if-then-else文
構文:if(式)文 else 文
制御式の値がtrueであれば先頭側の文を、falseであれば末尾の文を実行する。
条件の真偽によって異なる処理を行う場合if-then-else文を使う。
等価演算子
「==」と「!=」のこと。
x == y xとyが等しければtrue,そうでなければfalse
X != y xとyが等しくなければtrue,そうでなければfalse
等価演算子は2項演算子である。
a == b == c という記述はできない
a == b && b == c というように記述する
論理補数演算子
単項演算子「!」のこと。
!x xがfalseであればtrue,そうでなければfalse
入れ子となったif文
elseが制御する文はif文であっても良い。
例)
if()
文
else
if()
else
文
式
変数・リテラル・変数やリテラルを結合したもの。
〜演算子によって結合された式は〜式という。(代入演算子では代入式)
評価
式の値を調べること
式文
式に「;」をつけた文。
「;」だけでも文とみなされる(空文)
if文の条件()の後ろに誤って空文を置かないように。
論理積演算子&&
x && y:xとyがともにtrueであればtrue,そうでなければfalse(xかつy)
xを評価した値がfalseであればyの評価をしない。
論理和演算子||
x || y:xとyの一方でもtrueであればtrue,そうでなければfalse(xまたはy *どちらか一方でもという意味になる)
xを評価した値がtrueであればyの評価をしない。
論理演算の式全体の評価結果が左オペランドの評価結果のみで明確になる場合に、右オペランドが評価されないことを短絡評価という。
条件演算子
xがtrueであればyを評価した値を,そうでなければzを評価した値を生成する。
x ? y : z
アルゴリズム
処理の流れを定義したもの。
JISX0001では「問題を解くためのものであって、明確に定義され、順序付けられた有限個の規則からなる集合」と定義されている。
ブロック
文の並びを{}で囲んだもの。
{}の中の文の個数は任意。
単一の文が要求される箇所で複数の文を実行せねばならない場合に使う。
ブロック内でのみ利用する変数はそのブロック内で宣言する。
switch文
プログラムの流れを一度に複数に分岐できる。
()で囲まれた制御式は整数型でなくてはならない。
ラベル
プログラムの飛び先を示す目印
異なるラベルが同じ値をもつことは許されない。
値は定数でなければならず変数は許されない。
break文
プログラムのながれがswitch文から抜け出す。
最後のケース部の末尾にもbreakをつける。
defaultラベル
どのラベルとも一致しないときの飛び先を表す。
選択文
if文とswitch文のことを選択文という。
単一の式の値によるプログラムの流れの分岐はswitch文を利用した方が全体の見通しが良いため読みやすくなる。
キーワード
ifやelseといった語句には特別な意味が与えられている(キーワード)。
プログラム作成者が変数などの名前として利用することはできない。
区切り子(分離子とも)
キーワードは一種の単語のようなもので、単語を区切るために使われる記号が区切り子。
{},:.などがある。
識別子
変数、ラベル、メソッド、クラスなどに与えられる名前。
1文字目は文字($と_を含む)2文字目以降は文字、数字を含む($と_を含む)
漢字文字も含まれる(オススメはしない)
リテラル
プログラムを構成する要素のひとつ。
代入式の評価
代入式を評価すると代入後の左オペランドの型と値が得られる。
明解Java入門編 第2章まとめ
整数リテラル
整数を表す定数のことを整数リテラルと呼ぶ。
例 57(整数リテラル) "57"(文字リテラル)
文字列と数値の連結
()で囲まれた演算は優先的に処理される。
「文字列 + 数値」あるいは「数値 + 文字列」の演算では、数値が文字列に変換された上で連結が行われる。
変数
値を自由に出し入れできる(数値を格納する箱のような)もの。
一旦値を入れるとその箱が存在する限り値が保持される。
なんの箱かわかるように名前をつける際宣言をする。
(例) xという名前の箱である宣言文→ int x;)
「 , 」で区切れば二つ以上の変数を一度に代入できる(分けたほうがコメントや修正は楽だがプログラムの行数は増える)。
代入演算子
(x = 1;)の「=」は右辺の値を左辺の変数に代入するための記号(代入演算子)
変数は必要になった時点で宣言する。
型
int型:整数を表す整数型の一つ。整数定数は整数リテラルと呼ぶ。
double型:実数(浮動小数点数)を表す浮動小数点型の一つ。浮動小数点数は浮動小数点リテラルと呼ぶ。
String型:文字列を表す。
算術演算
加減算より乗除算のほうが優先される。
整数/整数の演算では少数点以下は切り捨てられる。
変数と初期化
値の入っていない変数から値を取り出すことはできない。
変数の宣言時には初期化値を与えて確実に初期化するとよい。
int x = 1(初期化値)
初期化:変数を生成するときに値をいれる
代入:生成済みの変数に値を入れる
キーボードからの入力
標準入力ストリームを利用する。
標準入力ストリームからの文字の読み込みにはScannerクラスのnext...メソッドを使用する。
演算子とオペランド
演算を行う+や-などの記号を演算子と呼ぶ。
演算の対象となる式のことをオペランドと呼ぶ。
オペランドの数により呼び方が違う。
final変数
値を書き換えることのできない変数。
値の管理を一箇所に集約できる、プログラムが読みやすくなるなどのメリットがある。
final変数の名前は大文字とすることが推奨されている。
原則として初期化すべきである。
初期化されていない場合、一度だけ値を代入できる。
乱数
乱数の生成にはRandomクラスのnext...メソッドを使用する。
文字列の読み込み
文字列の読み込みにはnext()を使う。
スペースも含めた一行分の入力を文字列として読み込むためにはnextLine()を使う。
明解Java入門編 第1章まとめ
Javaは数多くの特性を持ち、オブジェクト指向プログラミングをサポートするプログラミング言語。
ソースプログラムとソースファイル
ソースプログラムはクラスの中にmainメソッドが含まれており、その中に文が含まれる。
プログラムを起動するとmainメソッド内の文が順次実行される。
文の終わりは原則 ; である。
ソースファイルはクラスの名前に拡張子.javaをつけた名前にするのが原則。
ソースプログラムをコンパイルしてバイトコードを生成する。
コンパイルにはjavacコードを使う。(拡張子.javaは省略できない)
生成されたバイトコードを実行する。
中身がバイトコードのクラスファイルというものが作られる。
javaコマンドで実行。(拡張子はつけてはいけない)
コンソール画面へ出力される。
コメント
//(行末コメント)または
/*~*/(伝統的コメント)または
/**~*/(文書化コメント)で記述する。
実行したくない部分をコメントにできる(コメントアウト)
"で囲んだ文字の並びを文字列リテラルと呼ぶ。
他に
整数リテラル
文字リテラル
などがある。
文字列リテラルの連結では+を使う。
改行には拡張表記\nを使う。
文字列リテラルの途中で改行してはいけない。
単語の途中にホワイトスペースを入れることはいけない(スペース、ダブ、改行など)。
ストリーム
コンソール画面など、外部への出力の際はストリームを利用する(文字が流れる川のようなもの)。
System.outはコンソール画面と結びつくストリームである(標準出力ストリーム)。
printlnは()の中の内容を表示し、改行する(かっこに何も入れなければ改行だけする)。
printでは改行されない。
メソッド
依頼された処理を行うprintlnなどはプログラムの部品であり、メソッドと呼ばれる。
インデント
左側の余白(インデント)を用いて記述する(インデンテーション)
LPI Level1試験の勉強で役に立った本・サイト
今日LPI Level1取得?しました〜。
101試験から約一ヶ月!
いろいろ忙しく勉強時間がまとまってとれなかったのもあるけど
102試験勉強は101より辛かったです。
試験内容自体はどっちもどっちかな。102の方が簡単という声もあったけど。
まぁどちらもちゃんと勉強していけばこわくないです!(当たり前)
今日はちょっと自分のことを振り返るため&文章を書く練習のために書いていこうとおもいます。
LPI試験に向けての出発地点
一冊目 奈佐原顕郎さん『入門者のLinux』
SQLを勉強していたころ、インストール時にターミナルは使っていたのですが、シェルとかプロンプトもあんまりわかっていなかった記憶があります。
そういう今までよくわからずにやってきたことがこの本でわかってとてもすっきりしました。理解しやすいように書かれているし、本当になんにもわからない人にはおすすめです。知ってる人から見たら、こんな風に説明すると初心者はわかるのかというのがわかっておすすめです。結果的にめちゃくちゃおすすめです。
二冊目 中島能和さん『一週間でLPICの基礎が学べる本第2版』
この本はLPI試験についてググりまくってると何度か目にすると思われます。
内容は101試験に必要な部分が多い気がしました。なのでふんふんと一度読んだくらいです。わたしには一冊目のほうが役に立ちましたが、たぶんこの本を読んだからこそ101試験の勉強にすんなり入れたのだと思います。
101試験
使用教材 Ping-t スピードマスター
101試験の勉強は、細かいことを覚えるのが大変なのかなぁと思います。
コマンドのオプションとか、たくさんあるよね・・・。
私はソフトウェア管理の範囲が点数低かったです。rpmとかdpkgとか。
101はPing-tさんで必死に解いて覚えたけど、やっぱり実際に手を動かした方が覚えるのはやいです。viとかは操作してめっちゃ覚えた!
インストールとかのとこも何回もやればよかったんだなと。
101ではスピードマスターよりPing-tさんを重宝しました(もしかするとスピードマスターだけでも全然いけるのかも)。
102試験
使用教材 スピードマスター
102試験でも私はPing-tさんに頼りたかったのです本当は。
しかしながら、有料なのですよね、102は。
もう腹をくくってスピードマスターさんと仲良くやっていこうと決意しました。(スピードマスターだけでも全然大丈夫です!とても良い本です!)
102はどうも全体像が掴みにくいものが多いといいますか・・・。IPアドレスすらよくわかっていなかった上に大嫌いな計算(実際簡単)もあるし、クラスがなんちゃらプライベートアドレスがなんちゃらで投げ出しちゃおうかと思いました。
わからない単語ばかりですしね。
それで、一旦落ち着いて、躓いたらなんとなくでもいいからイメージを掴めるようにしました。
用語のイメージをつかむために参考にしたサイト
『「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典』
・http://wa3.i-3-i.info/index.html
cupsにつまずいたとき
『インフラ周りのプロになりたい』
・http://ayufishing.blog.fc2.com/blog-entry-8.html
IPアドレスの計算がわけわからないとき
『IPアドレスの基礎知識』
・http://qiita.com/mogulla3/items/efb4c9328d82d24d98e6
whileの細かいオプションがわからなくなったとき(leとか)
・http://linux.just4fun.biz/?逆引きシェルスクリプト/whileループのサンプル#i9d6272d
あとは自分で集めた知識をもとに図を書いて考えてみるとか。
するとあらふしぎ!IPアドレスでつまずいていた部分がすっきりわかる!
わかった時の感動は半端じゃないですね。勉強しててよかったと思えます。
102はコマンドのオプションとかは少ないですが、コマンドやディレクトリ名を入力させられることが多いので、私は手で書いたり、実際に打ち込んで中身を見たりして覚えてました。
全体振り返り
Level1試験の勉強は根詰めてやればそんなに時間はかからないと思います。
私はオラクルマスターでめっちゃ立ち止まったひとだからそう思うのかも?
試験に受かっても、まだ理解仕切れていない部分が多いと思うので、今後使っていくなかで覚えていかなければならないことがたくさんありそうです。
特にセキュリティのところ!
Linuxはお仕事始めたら使わない日はないよと言われたので頑張ります。
ちなみに101も102も710点でした!よかった!
次はJavaのお勉強をします!
お疲れ様でした〜。