リュックに何いれる?

一人暮らし・itエンジニア・読書

【Java SE 11 Silver対策】スタック領域とヒープ領域とは

「スタック領域」と「ヒープ領域」ってご存じでしょうか。

 

なんとなく理解してるつもりですが、復習!

 

■スタック領域(ローカル変数領域)
スレッドが作られると、OSがそのスレッドに対してスタックと呼ばれるメモリ領域をそのスレッドが終了するまで割り当てます。スタックは、スレッド上で実行されるメソッドや関数が使用する一時的なデータを保持する領域です。プリミティブ型変数の値や参照型変数の参照(インスタンスへのアドレス)を保持します。

 

■ヒープ領域
参照型変数(オブジェクト)のインスタンスが保持されます。

 

 

用語はともかく、参照型変数(オブジェクト)が持っているのは、実際の値ではなく、インスタンスへのアドレスである点はきちんと理解しないとまずいです。
Bronzeでも出てきた内容なので、ある程度分かっているつもりですが、おさらいでした。

 

 

以上!!

【Java SE 11 Silver対策】インターフェースの抽象メソッドにabstract修飾子つかないの?

だいぶピンポイントな話題ですが、気になっていたので調べた。

 

 

 

暗黙的に省略されているらしい・・・まぁインターフェースの時点で分かるよねって話かな
これが抽象クラスの場合は、抽象メソッドも通常のメソッドも両方記載できるから、abstractの省略はもちろんできない

 

 

全然関係ないけど、インターフェースの抽象メソッドのアクセス修飾子は必ずpublic。上記と同じ理由か分からないが、省略可能
あとついでに、インターフェースではフィールドは持てないがpublicでstaticでfinalな定数は持つことが可能。これも覚えなきゃ。

 


内容が少ないけど、これで終わり!

【Java SE 11 Silver対策】スレッドセーフとは

スレッドセーフ・・・聞いたこともないです。
いや、JavaのBroze取得した時に聞いたような・・・

 

というわけで今回も調べてみました。

まずはプロセスとスレッドについて復習
・プロセス
 アプリケーションが起動する際に、割り当てられたメモリ空間
 マルチプロセスでは、プロセス(アプリケーション)を複数同時に起動し、OSが交互にプロセスを切り替えながら実行する。
・スレッド
 プロセス内で実行される一連の処理
 マルチスレッドでは、1つのプロセス内で複数のスレッドを切り替えながら実行する

Javaはシングルプロセス、マルチスレッド

復習はここまで・・・


プロセス間ではメモリ空間は共有されないが、スレッド間ではメモリ空間が共有される。
マルチスレッドのJavaでは、異なるスレッドで同じデータへアクセスができてしまう。

へー

ローカル変数はスレッドセーフな変数
 スレッド毎にある「スタック領域」 にデータを持つので、異なるスレッドからはアクセスできない

インスタンス変数(フィールド)や、クラス変数(static変数)はスレッドセーフでない変数
 各スレッドで共有される「ヒープ領域」にデータを持つので、異なるスレッドからアクセスできる

ふむふむ

で、試験ではとりあえず「ArrayListはスレッドセーフではないコレクション」と覚えておけばよいみたい



この辺りちゃんと意識して今まで実装しましたか言われると、冷や汗がでますが、今回の調査が今後に活かせればよし!

【Java SE 11 Silver対策】クラスパス(classpath)とは

クラスパス・・・聞いたことはあります。

 

誰か)クラスパスと何ですか?
私)・・・・クラスのパスです。
誰か)・・・
私)・・・


というわけで調べてみました。いやー昔は全然分からず、環境変数とか出てくるとお手上げでした。


JVMがクラスファイルを読み込む時に指定するパス。ようは読み込ませたいクラスファイルが配置されている場所。
java -classpath {ディレクトリ} {クラスファイル}
※-classpathは-cpとすることも可能

環境変数の設定をすると、上記コマンド指定する『-classpath {ディレクトリ}』を省略できる・・っぽい?
公式のドキュメント見ると、環境変数の設定をしているとデフォルトのクラスパスが上書き(オーバーライド)されるよう。

 

なるほどなー

 

というか、あれ・・・

なんだかあっけない・・・

昔はいくら参考書読んでもこの辺分からなかったのになぁ・・・

 

調べればいくらでも出てくる技術系の記事に感謝しつつ・・今日はこの辺で

 

【Java SE 11 Silver対策】immutableなオブジェクトとは

黒本にできて、(-_-)ってなったので調べてみた

 

ようは、内部の値が変更できない構造になっているオブジェクト

 

条件をざっくり書くと4つ
・すべてのフィールドがprivate
・getterメソッドがない(類似したメソッドがない)
・setterメソッドがない(類似したメソッドがない)
・クラスがfinal(メソッドがオーバーライドされず、サブクラスから変更できない)

 

JavaSilverの合格目的で、暗記する必要はないと思う。多分。
Stringクラスがimmutableであること、文字列に対しての何らかのアクションがあった場合、変更ではなく新しくインスタンスが作成されている点は覚えなくてならない

 


以上、少々ふわふわした認識だけど、いたしかたなし!これで終わり!

【Java SE 11 Silver対策】いつの間にか忘れる基本データ型の範囲の計算

基本データ型の範囲について、普通に試験に出るんだよな~いつか覚えよう(1週間前の私)

 

そうだ、いい加減覚えよう

 

ということで、朝から少しまとめてみました。

 


よくわからない部分もあるけど、とりあえずこれだけ理解しておけば、Java Silverなら何とかなるハズ

 


■byte、short、int、long
byteの計算例
1bitは2通りの値を表現できるので、8bitは2の8乗(2^8) = 256通り
256通りを正負の数で表すと-128~128と思いきや、0で表現できる分、1を引いて-128~127

byte    8ビット        -2の7乗~2の7乗-1        -128~127
short    16ビット    -2の15乗~2の15乗-1        -32,768~32,767
int        32ビット    -2の31乗~2の31乗-1        -2,147,483,648~2,147,483,647
long    64ビット    -2の63乗~2の63乗-1        -9,223,372,036,854,775,808~9,223,372,036,854,775,807

※Windows10の電卓を起動して、関数電卓モードにして、累乗の計算ボタンで確認!

 


■char
char    16ビット     0~2の16乗-1    0~65535(10進数)    \u0000~\uFFFF(16進数)
※なんで負の数はダメなんでしょうね・・・

 


■float、double

float    32ビット単精度浮動小数点数
    正の値は 1.401298E-45 ~ 3.4028235E+38 
    負の値は -3.4028235E+38 ~ -1.401298E-45

double   64ビット倍精度浮動小数点数
    正の値は 4.94065645841246544E-324 ~ 1.79769313486231570E+308
    負の値は -1.79769313486231570E+308 ~ -4.94065645841246544E-324


そういえば、前から思ってたのですが、『E』ってなんなん?・・・せっかくだから調べてみるか。





あーEって10の乗数のことを指すんだ・・うわー知らなかった・・・いや忘れていただけだきっと!

 1.2E2 → 1.2 * 10^2 → 120
 2.34E-3 → 2.34 * 10^-3 → 0.00234

 


あと、浮動小数点の範囲って何で『正の値はXXXX~XXXX』って書き方なの?

カタカタカタ....


出力内容
fmin = 1.4E-45
fmax = 3.0E38

 

なんだそういうことか・・・小数点を考慮すると正の数の中でも表現できる範囲が絞られるのね

 

 

 

続く・・・!

【Java SE 11 Silver対策】関数型インターフェース?ラムダ式?分からん・・・

Java SE11 Silver の資格の取得に向けて絶賛勉強中です。

通称黒本にて、試験準備を進めているのですが、8章『関数型インターフェース、ラムダ式』で解説の内容が全然頭に入ってきません。多分他にも同じ境遇の人がいるだろうと勝手に思い込んで、調べた結果を記載しようと思います。
ちなみに詳細な解説は書きません。だってググればいい記事がたくさんありますからねー


1.匿名(無名)クラスを理解する
  ついでに内部(インナー)クラスと、ローカルクラスも
2.匿名クラスで書いていた内容を、ラムダ式を使ってもっと簡潔に書く


私はそもそも匿名クラス知りませんでした。(^^♪
ちなみに黒本には文章中には『匿名クラス』の記述はありますが、解説はありません。(索引にも含まれていません)
まぁ普通に勉強してきたエンジニアは知っているものなのかな・・・?

その他、以下についても適当に調べました。
・関数型インターフェース・・・中小メソッドを一つだけ持つインターフェース
・@FunctionalInterface・・・関数型インターフェースを明示するアノテーション
ラムダ式の書き方の細かいルール


とりあえず匿名クラスについて内容を頭に入れ、②の書き換えの練習をしていけばいいのかー?!