自己紹介
Javaを勉強したての社会人一年目です。
昨日書いた以下の記事のコメントで、「アクセス修飾子」「class設計」というワードが出てきたので、それらについて勉強してまとめようとこの記事を書いています。
https://qiita.com/N46_myHearter/items/891b660b8748171779b1
Javaに関するアドバイス等募集中です。
修飾子とは
クラスやメソッド、変数に指定することができ、指定する修飾子によって様々な効果があるみたい。
自分は、Javaで修飾子だとpublic private等のアクセス修飾子ぐらいしかまだ知らなかったのですが、修飾子ってむっちゃあるんですね笑笑
アクセス修飾子、abstract、static、finalまでは知ってたが、transient、volatile、synchronized、native、strictfp ....って何や!?笑笑
アクセス修飾子
public、protected、privateがあり、アクセス修飾子を設計しているクラスやその変数、メソッドがどこからアクセス可能かを示しているみたい。
1. public
すべてのクラスからアクセス可能
2. protected
現在のクラスとそのサブクラスからアクセス可能
3. private
現在のクラスからのみアクセス可能
アクセスできる範囲は、public > protected > privateな感じかな。
abstract修飾子
abstractが設定されているクラス・メソッドは、抽象クラス・メソッドと言うみたい。。。(昨日勉強した抽象がさっそくでてきた...)
親クラスでabstractを設定している場合、その子クラスはオーバーライドしないといけない。
抽象メソッド
本体がなく、メソッド名や引数、戻り値だけで構成されたメソッド。
抽象クラス
抽象メソッドを含むクラス。
インスタンス化が出来なくなり、継承したサブクラスの作成が必要になる。
static修飾子
staticが設定されていると、インスタンス化せずにアクセス可能になる(C言語でも静的ななんちゃらであったから分かる気がする...笑笑)。
変数、メソッドに指定可能。
オーバーライドはできない。
クラス名.メンバー名でアクセス可能のこと。
インスタンス化
クラスをアクセス可能にして、利用できるようにすること(クラスを初期化するってことかな!?)。
final修飾子
finalが設定されていると、メンバーの上書き、サブクラスでのオーバーライド、extends句での継承等を禁止にするみたい。
クラスや変数、メソッドに指定でき、指定したものによって、意味合いが変わるみたい。
クラスに指定した場合
指定したクラスは継承不可になる。
変数に指定した場合
指定した変数は定数(変数宣言時、初期化必須となり、以後変数の値を変えることは不可)になる。
メソッドに指定した場合
指定したメソッドはオーバーライド不可になる。
オーバーライド
親クラスで定義しているのを、子クラスで再定義すること(継承みたいだね)。
transient修飾子
transientが設定されていると、シリアライズの対象外にするみたいです(シリアライズって何や...笑笑)。
変数に指定可能。
シリアライズ
オブジェクトをバイト配列に変換すること。
volatile修飾子
volatileが設定されていると、キャッシュの対象外にするみたいです。
変数に指定可能。
synchronized修飾子
synchronizedが設定されていると、メソッドを同期実行する。
メソッドに指定可能。
同期実行
ほぼ同時に複数の呼び出しがあったときに、先に呼び出した方を優先して、その処理が終わるまで後から呼び出した方は待機させること。
native修飾子
nativeが設定されていると、Java以外の言語で実装されているということになる(Javaプログラム上で別の言語を使えるってことかな)。
メソッドに指定可能。
strictfp修飾子
strictfpが設定されていると、浮動小数点を厳密に処理することが可能みたい。
クラスやメソッドに指定可能。
おわり
あくまでも、Java初心者が勉強したことをメモしてるので、内容薄いです笑笑
修飾子多いので、まずアクセス修飾子からもっと勉強していこうと思っています(他は後回しww)。