私のAndroid学習ノート(依然としてJAVA)


オブジェクト向け*は抽象的なプログラミングモデルである*複雑な問題は独立した小さな問題に分解され,小さな問題を単独で解決することで複雑な問題を解決する
クラス*は「図面」と理解*物事、アルゴリズム、論理、概念の抽象*パッケージ(関連するデータ、コードをクラスコンポーネントにカプセル化)
オブジェクト(インスタンス)*図面から作成された製品として理解される*各オブジェクトは独立したメモリ領域を占有し、独自のプロパティデータを保存する*各オブジェクトは、指定したメソッドを実行させるコードを独立して制御することができる
参照*は「リモコン」*参照変数として理解されます*参照変数は、オブジェクトのメモリアドレスを保存します.参照によって、このオブジェクトの記憶領域を見つけ、そのメンバーを呼び出します.*参照タイプの特殊な値:null null空;ホット河オブジェクトを参照しないメモリアドレスを示します
構築方法*インスタンスを新規作成する場合、実行する特殊な方法new Soldier()new FlashLight()new Car()new Dog()new Point()*クラスには、構築方法が必要です*構築方法を定義しない場合、コンパイラがコードをコンパイルする場合、デフォルトのコンストラクションメソッドclass A{public A(){}}*コンストラクションメソッドを追加しますclass A{public A(){}public A(int i){}public A(int i,String s){}*コンストラクションメソッド間でthis(...)を呼び出し、コード重複を減らします.
This*の2つの使い方*現在のオブジェクトを参照し、現在のオブジェクトのメモリアドレスthisを保存します.xxx f(this) A a = this; * 構築メソッド間呼び出しthis(*)は、最初の行コードでなければなりません.
JAvaのパラメータ転送-値転送
  • 基本タイプ変数の値は、値自体main(){int a=10;f(a);//aの値を取り出し、f()メソッドに渡すパラメータ変数a print(a);//印刷10}...void f(int a){a=100;}
  • 参照型変数の値は、メモリアドレスmain(){Point a=new Point(3,4);f(a);//aの値はメモリアドレスであり、メモリアドレスをf()メソッドprint(a.x);print(a.y);}f(Point a){//パラメータaは、上の同じオブジェクトのアドレスa.x=30を参照し、a.y=40;}オーバーロードOverload*同じ名前の異なる参照
  • の役割:コード再利用、コード多重
  • 単一継承:*)子クラスは、1つの親のみ*)親クラス、複数の子クラス*を持つことができ、複数の親
  • を階層的に継承することができます.
  • Overrideが親から引き継いだメソッドを書き換える、子クラスのニーズを満たさず、子クラスでこのメソッド*)を書き換える場合にsuperを使用することができる.xxx()親クラスの同じメソッドを呼び出すコード
  • サブクラスオブジェクトを作成する1)親オブジェクトを作成し、親コンストラクションメソッドを実行する2)子オブジェクトを作成し、子コンストラクションメソッドを実行する*)2つのオブジェクトをバインドし、全体的に1つの子オブジェクト*)としてメンバーを呼び出す場合は、まず子を探し、親
  • を探します.
  • サブクラスオブジェクトを作成する場合は、親構築メソッドを先に実行します*)デフォルトでは、親無パラメトリック構築メソッドsuper()を実行します*)親有パラメトリック構築super(パラメータ)Superを手動で呼び出します
  • の2つの使い方
  • 書き換えると、親クラスの同じメソッドpublic String toString(){...super.toString()...}
  • が呼び出されます.
  • 手動呼び出し親構築メソッドsuper(パラメータ)*)は、最初の行コード
  • である必要があります.
    マルチステート*の役割:一貫したタイプ*タイプ変換*)サブクラスオブジェクトを上へ、親タイプ*)を下へ変換して親タイプのサブクラスオブジェクトに変換し、サブタイプ*instanceofに戻って1つのオブジェクトのタイプが実際のタイプ、およびその親タイプを判断します.すべてtrue Share s=new Line()s instanceof Line true s instanceof Share true抽象クラス*の役割を得る:*)サブクラスに汎用コードを提供する*)サブクラスに汎用メソッドを提供する定義*抽象クラスは半製品クラスであり、完了していないクラス*抽象クラスはインスタンスを作成できず、他のサブクラスのインスタンスのみを作成できる*抽象メソッドを含むクラスであり、抽象クラスでなければならない抽象クラスには、必ずしも抽象メソッドFinal*修飾変数、メソッド、クラス*変数が含まれていない:変数の値が可変でないことを意味し、「常亮」*)の基本タイプの値となり、値自体が可変でない*)参照タイプの値であり、参照アドレスが可変でないFinal int a=10である.A=11//エラーFinal point a=new point(3.4);A.x = 30;A=new point(1,5);エラーA=null;エラー*メソッド:メソッドはクラスによって書き換えられません*クラス:継承されないStatic(静的)*静的メンバーはクラスに属し、インスタンスClass soldier{Inted;}*に属しません.静的メンバーを呼び出します.クラス名を使用してSoldier s 1=new soldier()を呼び出す必要があります.Soldier s2 = new soldier(); //以下のコードは誤解するやすいS 1.count = 1; S2.count = 2; Print(s1.count) Soldier count = 3; Print(soldier.count); *いつ静的*)を使うかの原則:使えないなら使わない.静態は「非オブジェクト」の構文*)使用シーン:*)インスタンス間で共有するデータ*)ツールメソッドMath.sqrt() Integer.parrseint()*静的メソッドでは、非静的メンバーClass a{Public static void main(String[]arges){//f();//エラー非静的メンバーA a=new A();A.f();
       g();
    }
    
       Static void g(){
      }       
    
    Void f(){
          }
    
    }を呼び出すことはできません.
    *静的初期化高速Class A{Static{
    }}*)Aクラスは初めて使用され、Aクラスをロードするのは、一度だけ実行されます.
    定数*static final*命名習慣:全大文字、単語間下線Static final int MAX_VALUE = 100;
    オブジェクト作成プロセスClass A{Int v 1=1;Static int v 2=2;Static{
    } Public A(){ ….. } }
    class B extends A{ Int v3 =3; Static int v4 = 4; Static{
    } Public B(){ ….. } }
    B b = new B(); *初めてAクラスとBクラスを用いる.親をロードし、親の静的メンバー変数にメモリ2を割り当てます.サブクラスをロードし、サブクラスの静的メンバー変数にメモリ3を割り当てる.親クラスの静的変数付与演算を実行し、静的初期化ブロック4を実行する.サブクラスの静的変数付与演算を実行し、静的初期化ブロックを実行します.
    *AクラスとBクラスを再利用する.親の非静的変数にメモリ6を割り当てる親オブジェクトを作成します.サブクラスオブジェクトを作成し、サブクラスの非静的変数にメモリ7を割り当てる.親非静的変数付与演算8を実行する.親構築方法9を実行する.サブクラス非静的変数付与演算10を実行する.サブクラス構築メソッドの実行
    アクセス制御子*クラスとクラスのメンバーのアクセス範囲クラスパオズクラス任意Public 0 0 0 Protected 0 0 0 0[default]0 0 0 Private 0
    *)どのようにアクセス制御子の原則を選択するか:できるだけ狭い範囲のPublicを使うのは他の開発者との契約であり、公開を約束したものは安定してPrivate隠している.コードのメンテナンスと修正が容易で、他のプログラムコンポーネントに影響を与えません.
    インタフェース*の役割:結合を解くための構造設計ツール*極端な抽象クラスである*classキーワードの代わりにinterfaceを使用する*extendsキーワードの代わりにimplementを使用する*インタフェースでは*しか定義できない)公開された定数*)公開された抽象メソッド*)公開された内部クラス、内部インタフェース
    *1つのクラスは同時に複数のインタフェースClass A implements B,C,D{}Class extends B implement C,D,E{}*インタフェースの間に1つのインタフェースを継承し、複数の他の親インタフェースInterface A extends B,C,D{}を統合することができる.
    内部クラス*はクラス内部、メソッド内部、ローカルコードブロック内部に定義されます.
    *非静的内部クラス*)非静的内部クラス、外部クラスインスタンスに依存して存在する*)非静的内部クラスでは、静的メンバーClass A{Class Inner}}A a=new A()は定義できません.A.Inner i = a.new Inner();
    *静的内部クラスClass A{Static class Inner{}A.Inner i=new A.Inner()
    *ローカル内部クラス*)定義を拒否するタイプは、ローカルコードブロック内でClass A{Weapon f(){Class Inner implements Weapon{}Inner i=new Inner();Return i; } }
    A a = new A(); Weapon w = a.f(); W.kill();
    *匿名内部クラスWeapon w=new Weapon(){.....};*カッコは匿名クラス*)new新規匿名クラスインスタンス*)Weaponは親タイプ