JAVA基礎-1


JAVA 2018 12 26
用語の説明
JDK
JDKは英語でjava development kitとつづられているので、jdkはプログラマーがjavaプログラムを書くために必要なソフトウェアです.
JRE
JREは英語でjava runtime enviromentとつづられているので、jreはjavaプログラムを実行するために必要な環境です
OpenJDK
JAvaseの無料オープンソース実装
JAVAプログラムはなぜプラットフォームをまたいで実行できるのか
JAvaは解釈言語なのでjavaソース( .java )コンパイル完了後に生成されるのはバイトコードファイル( .class)ですが、バイトコードファイルは直接実行することはできません.java仮想マシンで解釈して実行する必要があります.異なるプラットフォームには異なるタイプの仮想マシンがありますが、同じclassファイルを異なる仮想マシンに渡して実行を説明することができ、最後に実行結果が同じなのでjavaはプラットフォームにまたがる言語です.
基本データ型
データ型
長さ(バイト)
コメント
byte
1
short
2
char
2
charはCの符号なし16ビット数に相当し、データ範囲は0-65535である.
int
4
long
8
float
4
double
8
浮動小数点数の値はデフォルトでdoubleですが、floatタイプに変換するには、文字の値の後ろにFを付けます.
boolean
定数
finalキーワードで変数を修飾すると、定数タイプは1回の修飾方式しか初期化できません.この方法は書き換えられないことを示します.
class Base{
    static final int sf = 11;//     
    final int f1 = 10;//       
    final int f2;
    {
        this.f2 = 10;//       
    }
    final int f3;
    public Base(){
        this.f3 = 10;//       
    }
    public static void main(String[] arg){
        final int c = 1;//       
        final int d;//   
        d = 11;//     
    }
}

注意:静的定数はクラスのロード時に1回のみ初期化され、インスタンス定数はオブジェクトを作成するたびに1回初期化されます.
オブジェクト作成プロセス
フォント値タイプデータ加算
(11D + 11F) => double
(11F + 11L) => float
(11L + 11) => long
(11 + 11) => int

short s = s + 1;? なぜエラーが発生したのですか?short s += 1;? どうして正しいの
1番目の式:フォント値1のデフォルトはintタイプのデータで、タイプが一致しない問題があります.2番目の式:+=オペレータはデータ型の強制変換操作を行います.
演算子
  • &ビットアンド、非短絡論理または
  • |ビットor、非短絡論理or
  • &&ショートロジックと
  • |短絡論理または
  • >>符号付き右シフト
  • <<符号付き左シフト
  • >>符号なし右シフト
  • 符号付きシフト不動符号ビットの位置、符号なしシフトは符号ビットの位置を移動します
    元のコード、逆のコード、および補完コード
  • コード:数字本来のバイナリ表現
  • 逆符号:正数不変、負数符号ビット不変、その他ビット取逆
  • 補数:正数不変、負数符号ビット不変、その他ビットを逆にして1
  • 文字列
    Stringは参照タイプデータであり、基本データタイプではありません
    // String final  ,        
    public final class String implements ...{
        /**
        *       
        *                ,          
        * String           ,   String           String  
        */ 
        private final char value[];
    } 
    

    文字列定数プール
  • 文字列の文字面値のつづりは定数プールから文字列オブジェクトを検索し、ある場合は参照し、ない場合は作成する
  • 文字列タイプ変数加算時にStringBuilderを作成して文字列接合する
  • 文字列の一般的なメソッド
  • substring
  • split
  • equals
  • charAt
  • getBytes
  • trim
  • length()

  • StringBuilderとStringBuffer
  • StringBuilderスレッドは安全ではなく、効率が高い
  • StringBufferスレッドは安全で非効率
  • せいぎょプロセス
    switch
  • byte、char、short、int、Stringに適し、longおよび浮動小数点数には適用されない
  • オブジェクト向け
    4つの特性
  • パッケージング:データと操作データの方法をバインドし、外部シールド内部実装の詳細は、アクセスインタフェースのみを提供する
  • 継承:既存のクラスから継承情報を取得し、新しいクラスを作成するプロセス
  • マルチステート:異なるサブタイプオブジェクトが同一イベントに対して異なる応答をする
  • 抽象:あるクラスのオブジェクトの属性と動作を抽出し、新しいクラスを作成するプロセス
  • クラス間の関係
  • 依存(usea):あるクラスのメソッドが別のクラスのオブジェクトを操作する
  • 集約(have a):1つのクラスのオブジェクトが別のクラスのオブジェクトを含む
  • 継承(is a):
  • オブジェクトの作成
    /**
    * name     ,    ,name             
    *         
    */
    String name = new String("lily");
    

    方法
  • javaではメソッドパラメータは値伝達のみ存在し、基本データ型でも参照データ型でも
  • じゅうか
    同じ内部で発生し、メソッドの名前が同じで、エントリパラメータの違いによって区別されます.戻り値、権限修飾子、放出異常タイプは異なりますが、メソッドを区別するために使用できません.
    書き換える
    親クラスが継承された子クラスで発生し、継承されたメソッドの書き換えが実現され、メソッド名とエントリパラメータが同じで、アクセス権が拡大するしかありません.
    静的バインドと動的バインド
  • 静的バインド:privateメソッド、staticメソッド、finalメソッド
  • 動的バインド:実行時に具体的に呼び出す方法を特定する
  • equalsメソッド
  • 特性:自反性、対称性、伝達性、一致性、null equalsとfalse
  • hash値
  • ハッシュ値は定数であり、デフォルトではオブジェクト格納アドレスに等しい
  • hashCodeメソッドを書き換えて、自分でハッシュ値を実現する計算方法
  • ハッシュ値とequalsメソッドの間に関連がある
  • 両オブジェクトequalsがtrueであればハッシュ値は必ず等しい
  • ハッシュ値は等しく、両オブジェクトequalsは必ずしもtrueではない

  • hash値とequalsの間になぜこのような関係があるのか
  • 2つのオブジェクトequalsがtrueでハッシュ値が同じであることを保証すると、ハッシュ値で格納インデックスを判断し、要素が重複しない集合で同じオブジェクトが同じ位置に格納されることを保証できる
  • ハッシュ値は同じですが、2つのオブジェクトが異なると同じ位置に異なるオブジェクトが格納されます.これがハッシュ競合ですが、記憶方式を変えることでこの問題を解決することができ、読み取り、記憶の性能低下を引き起こすことがありますが
  • JAvaクラスのロードプロセス
    転載先:https://juejin.im/post/5c22d7ae6fb9a049eb3bf6f1