2021年3月17日水曜日

[Java] synchronizedのメモ書き

こんにちは、針山散策を今日もほのぼのと行います。


今日はスレッドについてメモしたいと思います。


スレッドは、本来の処理とは別のプログラムを動作させる小さなプログラムの事だと思います。


・スレッドは、Runnableインタフェースを実装したrunメソッドが実行されます。

・Runnableはインタフェースなので、クラスのつもりでRunnableをnewは出来ません。

・起動方法はstart()メソッドによってスレッド化され、runメソッドを呼び出します。

・runメソッドの実行が終わると、スレッドも自動的に終了する。タイマを使用する際は再設定をよくします。

・スレッド実行中にsleep()メソッドを行うと、待ち状態に遷移する。

→他の実行可能状態のスレッドが動き出す。

・ThreadクラスはRunnableインタフェースを実装しているものです。

・synchronizedは複数のスレッドがあった時、共有領域の排他制御に用います。

    https://www.techscore.com/tech/Java/JavaSE/Thread/3/

・synchronized キーワードは、メソッドおよびブロックに指定することが出来る。

・synchronizedはRTOSでいうセマフォの動作を行います。

・synchronizedの例

class ZZZClass{

    synchronized static public void method() {

   .............

 }   

class ZZZClass{

 static public void method() {

   synchronized(Class.forName("ZZZClass")) {

     .............

   }

 }

と同じです。


2021年3月12日金曜日

[Java] HashMapのメモ書き

こんにちは、針山散策を今日もほのぼのと行います。


HashMapがJavaプログラミング能力認定試験2級過去問のプログラミング問題に出ていましたので

調べてみました


1年前に本で読んでいたはずでしたが、すっかり忘れていました。


以下を参考にしました。

https://java-code.jp/232


Mapということもあり、keyとvalueを持った2次元マトリクス状をイメージすればよいでしょうか。

keyは重複できない

格納した順番に取り出せるわけではない。


keySet()はすべてのキーを取得。確かにset keyではないのでkeysetというモノを取得すると考えると理解できます。


get(),put()は想像通り

Collection<V> values()はすべての値を取得


hashMap is a Mapなのね。

使い方は拡張for文ですね。


hashMapクラスメンバをhmとすると

for(String key:hm.keyset)

{

   getvalue=hm.get(key);

}

でgetvalueにループの都度keyに対応した

値が取得できます。

getvalue,keyは、値と言っても整数、少数、文字列なんでもござれ。


hashSetの場合は以下が参考になります。

https://java-code.jp/228


2021年3月5日金曜日

[Javaプログラミング能力認定試験2級] 問6、7(長文)対策自問自答

こんにちは、針山散策を今日もほのぼのと行います。


Javaプログラミング能力認定試験の過去問をやってみました。


最後の6,7問目は長文読解の問題です。

意外と時間が足りないんじゃないかと思いますので、

効率的に解いていけるようにならないか?を考えてみたいと思います。


長文の構成は以下の通りです。


-----------------

1. ソースの解説文

2. ソース

3. 問題

-----------------


読んでいく順番は

"1. ソースの解説文" 

"3. 問題" 

"2. ソース"

で"3. 問題"にてポイントを絞ってからソースを見るようにします。


問題は全部解く必要はなく、考えるような問題は後回しで対応していけばいいんじゃ

ないかと思います。(合格が目的なので全て理解する必要なし。と自分に言い聞かせる)


以下、問題は、[必ず解く]、[解けそう]、[考えそう]の3つに分けられると思います。


[必ず解く]

・ソースと解説文の紐づけを理解していないでも解ける問題を見抜きます。

    例えば、ループ文が書いてあって、条件文がその中に書いてあったら、

        ブレークする処理を候補にするとか。

   

[解けそう]

・ソースと解説文の紐づけを理解する必要があるが、すぐに回答できそうな問題を解きます。


[考えそう]

・ソースと解説文の紐づけを理解する必要があり、すぐに回答できない問題は捨てます。

    適当に妥当そうな選択肢を選ぶようにして、時間が最後に余っていたら考えるようにします。


問6、7で100点中40点を占めるので、ここで20点~30点程度とれれば

良いんじゃないかと思います。


以上です。

2021年3月2日火曜日

[Java] 例外処理の意義

こんにちは、針山散策を今日もほのぼのと行います。

今日は、Javaの例外処理の意義について考えてみようと思います。


例外処理とは

正常系の処理とエラー系処理をそれぞれまとめて書くことが出来る仕組みです。


C言語だと、

    処理1

    if(エラー判定1)

    {

        エラー処理1

    }

    …

    処理n

    if(エラー判定n)

    {

        エラー処理n

    }


を記述していくと思います。


一方、Javaの場合、処理用ブロックとエラー処理用ブロックが分かれています。

    try

    {

        処理1

        …

        処理n

    }

    catch(IOException e)

    {// 入出力関連の例外処理

        エラー処理1

    }

    catch(ConnectException e)

    {// ネットワーク接続例外処理

        …

    }

    …

なので、読みやすい仕組みになっています。


ということで、この例外処理はおろそかにしてしまうと、


ザルアプリが誕生してしまいます。


2021年2月23日火曜日

[Android] abstractについて理解するためのメモ

こんにちは、針山散策を今日もほのぼのと行います。
今日は、abstractを理解する為にメモします。
abstractとは何か?
まだそのクラスの仕様が完成していないものを言います。
私の理解では、abstractがついたクラスを継承してもらうことで、
未完成部分はお願いします!
と人任せ的なものの認識です。
interfaceは、全て他人任せ(抽象メソッドしか持たない)なものを定義します。
ほぼすべて abstractになっているとinterfaceで定義できます。
逆に、利用する側(継承する側)はinterfaceを見れば、
最低限メソッドに作り込まないとならないものが分かって、考える時間を短縮できます。

[今日のひとこと]

[今日のひとこと] Javaって楽しいですね!

2021年1月31日日曜日

[Android] [Java] Fragmentにクラスを渡したい

今日の一言

こんにちは、針山散策を今日もほのぼのと行います。
今日は、Android StudioにおいてFragmentにクラスを渡したい事がありましたのでメモします。
以下を参考にさせていただきました。

Fragmentにクラスを渡す方法

これにより、メインアクティビティで使用していたインスタンス(クラス実体化したもの)を
遷移先のフラグメントでも扱うことができます。
クラスの扱いは、先頭のアドレスポインタを渡すことで
あたかも丸ごと渡しているように見せかけるだけなので、
このシリアライズ化は理解できました。

bundle.putSerializable("紐づき名", インスタンス);

とすることで、インスタンスの先頭番地を渡して、 あたかもクラス全体を渡しているように見せかけているのですね。
public class CLASS implements Serializable
{

}
FragmentManager fragmentManager= getSupportFragmentManager();
Fragment_xx fragment_xx= new Fragment_xx();
FragmentTransaction fragmentTransaction= fragmentManager.beginTransaction();
Bundle bundle= new Bundle( );
bundle.putSerializable( "CLASS_TEST", CLASS );
bundle.putInt( "SIDE", 1234 );
fragment_xx.setArguments( bundle );
fragmentTransaction.replace( R.id.fragment_Q, fragment_xx, null);
fragmentTransaction.addToBackStack( null );
fragmentTransaction.commit();

[今日のひとこと]

Javaプログラミング能力検定試験2級の過去問題集を購入してみました。
独立志向で頑張ろう。

2021年1月28日木曜日

[Java] public final class Test{}クラスとした時の挙動

[Java] public final class Test{}クラスとした時の挙動

	今日の一言

こんにちは、針山散策を今日もほのぼのと行います。
今日は、クラスにfinalを付けた時の動作についてメモしておこうと思います。
public final class クラス名{メンバの定義}
という書式です。
これによって、継承は禁止になります。
継承というのは親のクラスをベースに差分を子クラスに入れ込むことで
コード効率を上げて行くという考え方だと理解しています。(子は親の一種である。という関係)
finalをつける意味は以下だと思います。

finalを付ける理解

不具合が入りやすいクラスにつける

不具合が入り込みやすいからfinalを付けてそのクラスを保証させたいのでしょうか。
例えば、オーバーライドされると不具合発生する可能性が高くなってしまう。

影響度が高すぎるクラスにつける

影響度が高い為、プロテクト的な役割としてfinalを付ける認識です。
例えばStringクラスは継承出来ません。

String定義

public final class String extends Object{}… なので、汎用的に使えて、継承は不可で、Objectのクラスを継承しています。
インタフェースとして、
直列化(Serializable),文字列比較(Comparable),文字列読み取り手続き(CharSequence)
が定義されているようです。
下手気に継承できてしまうと、不具合が入り込みそうですよね。シビアだな~

[今日のひとこと]

finalとfinallyは名前としては似ているのですが、全く異なるのですね。
同様にオーバーライドとオーバーロードも間違えないようにしよう。