オーディエンス時間Javaコア技術36は個人のノートを話します。

2606 ワード

第三講
  • try-with-resource jdk 7以降の異常処理のための新しい方法であり、try()で宣言されたリソースは、finallyで手動でリリースすることなく、システムが自動的にclose()メソッドを呼び出すことになる。
  • copy-on-write読み書き分離、読む時鍵をかけないで、add元素の時に1部コピーして、追加し終わったら修正する前のfinal変数応用
  • 第十三講
    public class VIPCenter {
    	private Map providers;
    	void serviceVIP(T extend User user) {
    		providers.get(user.getType()).service(user);
    	}
    }
    
    interface ServiceProvider{
    	void service(T extend User user) ;
    }
    
    class SlumDogVIPServiceProvider {
    	void service(T extend User user){
    		// do somthing
    	}
    }
    class RealVIPServiceProvider{
    	void service(T extend User user) {
    		// do something
    	}
    }
    
    上記の例では、異なる対象を分類するサービス方法を抽象化して、業務ロジックの結合関係を解体して、コードの分離を実現して便利な拡張を保証します。
    第二十三講
    Java 8以前の各種類のキャリアの構造
    ブートクラスのキャリア(Bootstrap Class-loader)は、jre/libの下にあるjarファイルをロードします。それはスーパー公民で、Security Managerを開いた時でも、JDKはそれにロードするプログラムAll Permissionを与えました。
    #      bootclasspath,   java.*       
    java -Xbootclasspath: your_App
    # a     append,         bootclasspath   
    java -Xbootclasspath/a: your_Ap
    p# p     prepend,         bootclasspath   
    java -Xbootclasspath/p: your_A
    
    最も一般的な「/p」を使うと、前置きである以上、個別の基礎類を置き換える機会があります。
    拡張タイプのキャリア(Extension or Ext Class-roader)は、jre/lib/ext/ディレクトリの下に置くjarパッケージをロードする責任があります。これはいわゆるextensionメカニズムです。このディレクトリは、「java.ext.dirs」を設定することによってカバーすることもできる。
    java -Djava.ext.dirs=your_ext_dir HelloWord
    
    アプリケーション・キャリアとは、私たちが最もよく知っているクラスパスをロードする内容です。ここには紛らわしい概念があります。システム(System)類のキャリアは、一般的にJDK内に建設されたアプリケーション類のキャリアをデフォルトとしていますが、それは同じように修正される可能性があります。
    java -Djava.system.class.loader=com.yourcorp.YourClassLoader HelloWorld
    
    JDK 9では、JigsawプロジェクトがJavaプラットフォームモジュール化システム(JPMS)を導入したため、Java SEのソースコードは一連のモジュールに分類されている。
    	      -Xbootclasspath       。API            ,     ,
    
    「-Xboot classpath/p」を利用して、あるJavaコアタイプのコードを置換して、実際に該当するモジュールに対する修繕になりました。次の解決策を採用できます。まず、修正すべきクラスのファイルがコンパイルされていることを確認し、対応モジュール(仮にjava.base)の構造に従って保存し、その後、モジュールにパッチを適用します。
    java --patch-module java.base=your_patch yourApp
    
    拡張クラスのキャリアは、プラットフォームタイプのキャリアとしてリネームされ、extensionメカニズムは削除されます。つまり、java.ext.dirs環境変数を指定すると、あるいはlib/extディレクトリが存在します。JVMは直接エラーに戻ります。解決策を提案するのは、それをクラスパスに入れることです。部分はAll PermissionのJava基礎モジュールを必要とせず、プラットフォーム種類のキャリアに格下げされ、相応の権限もより細かく粒度に制限される。T.jarとtools.jarは同じように取り除かれました。JDKのコアクラスおよび関連リソースは、jimageファイルに格納され、新しいJRTファイルシステムを通じてアクセスされます。元のJARファイルシステムではありません。驚くべきことに見えますが、ほとんどのソフトウェアの互換性に影響があります。実は限られています。直接的にIDEなどのソフトに影響を与えます。普通は新しいバージョンにアップグレードすればいいです。