2021年の最新のJava学習の概要--- Java言語の機能

Java言語はシンプルです

Java言語の文法はC言語とC ++言語に非常に近く、ある意味でCとC ++から進化したものであり、ほとんどのプログラマーが簡単に学習して使用できるようになっています

:C ++のために、それのような、ある程度簡略化及び改善されている代わりに、複雑な多重継承のインターフェースを使用してポインタを解除し、またスルー自動ガベージコレクション機構の実現、大幅プログラマのリソースリリース管理作業を簡素化します。

豊富なクラスライブラリAPIドキュメントサードパーティの開発キットツールキット、およびプログラマがそこから学ぶのに役立つ多数のJavaベースのオープンソースプロジェクトを提供します。JDKはオープンソースコードの1つです。読者プロジェクトのソースコードを分析して、プログラミングレベルを向上させることができます。

Java言語はオブジェクト指向です

オブジェクト指向は、Java言語の基盤であり、Java言語の重要な機能です。オブジェクト指向とは、属性やメソッドなど、オブジェクトを基本単位と呼びます。の目的語状態は属性で表されます、オブジェクトのある方法で振る舞う

オブジェクト指向テクノロジーにより、アプリケーション開発がシンプルで使いやすくなり、コードが節約されます。つまり、Java言語は純粋なオブジェクト指向プログラミング言語です。

Java言語が配布されます

配布には、主に2つの主要な側面、つまり運用配布データ配布が含まれます。

操作の分散とは、複数の異なるホストでの関連操作の配置を指します。データの分散とは、URL(Uniform Resource Locator)を使用してネットワークオブジェクトにアクセスし、アクセス方法とローカルシステムへのアクセスを使用して、複数のネットワークの異なるホストにデータを格納することです。

Java言語には、強力で使いやすいネットワーク機能があり、分散コンピューティングプログラムに非常に適しています。
Java言語は、インターネットアプリケーションの開発をサポートします。基本的なJavaアプリケーションプログラミングインターフェイスには、URL、URLConnection、Socket、ServerSocketなどのネットワークアプリケーションプログラミング用のクラスライブラリを提供するネットワークアプリケーションプログラミングインターフェイス(java.net)があります。JavaのRMI(Remote Method Activation)メカニズムも、分散アプリケーションを開発するための重要な手段です。

<< Javaで配布されているもののわかりやすい説明>>リンク

Java言語はマルチスレッドです

マルチスレッドメカニズムにより、アプリケーションは同時に複数のタスクを並行して実行します、Java言語は、複数のスレッド間の同期メカニズムを提供します。これらの対応する同期メカニズムにより、異なるスレッドがデータを正しく共有できるようになります。マルチスレッドメカニズムにより、プログラムの双方向性リアルタイムが向上します。

Java言語は高性能です

Javaはコンパイルされてから解釈される言語であるため、完全にコンパイルされた言語ほど高速ではありません。ただし、パフォーマンスが非常に重要な場合もあります。これらの状況をサポートするために、Java設計者は、実行時にJavaバイトコードを特定のCPU(中央処理装置)のマシンコードに変換できる「ジャストインタイム」コンパイラを作成しました。完全なコンパイルを実現することです。Javaバイトコード形式は、これらの「ジャストインタイム」コンパイラのニーズを考慮して設計されているため、マシンコードを生成するプロセスは非常に単純であり、非常に優れたコードを生成できます。
インタプリタされた高級スクリプト言語と比較すると、Javaは確かに高性能です。実際、Javaの実行速度は、JIT(Just-In-Time)コンパイラテクノロジの開発により、C ++にますます近づいています。

Java言語はクロスプラットフォームです

いわゆるクロスプラットフォームはソフトウェアがコンピュータのハードウェアやオペレーティングシステムに制限されることなく、どのコンピュータ環境でも正常に実行できることを意味しますこれがソフトウェア開発のトレンドであり、プログラマーが追求する目標です。これは、コンピュータハードウェアの種類やオペレーティングシステムが異なるためです。ユーザーや企業によって、コンピュータ環境の設定が異なります。これらの異なる環境でソフトウェアを正常に実行するには、ソフトウェアが独立している必要があります。これらのプラットフォーム。
Java言語では、Javaに付属する仮想マシンは、クロスプラットフォームのパフォーマンスを十分に実現します。コンパイル後にJavaソースコードによって生成されるバイナリバイトコードはプラットフォームに依存しません。Java仮想マシンがバイトコードを実行すると、特定のプラットフォームで実行するためにバイトコードがマシン命令に解釈されます。これが、Javaが1回書き込み、どこでも実行できる理由です(1回コンパイル、どこでも実行)。Java仮想マシンは、バイトコードから基盤となるハードウェアプラットフォームおよびオペレーティングシステムへのバリアを提供し、Java言語をクロスプラットフォームにします。

Java言語は移植可能です

移植性はクロスプラットフォームに由来します。さらに、Javaは各基本データ型の長さも厳密に規制します。Javaシステム自体にも強力な移植性があります。JavaコンパイラはJavaで実装され、Javaオペレーティング環境はANSICで実装されます。

Java言語は安全です

Java言語では、C言語と同様のポインタとコンテンツのリリース構文が削除されるため、メモリの不正な操作が効果的に回避されます。コードは検証後にのみ実行できるため、許可されていないJavaプログラムがシステムプラットフォームに損傷を与えることはありません。。Javaの動作の最大の利点は、Javaがアンチウイルスおよび修復可能なシステム記述できることです。Javaは通常ネットワーク環境で使用されます。このため、Javaは悪意のあるコード攻撃を防ぐセキュリティメカニズムを提供し、システムのセキュリティを向上させることができます。 。セックス。

なぜ安全なのですか?そのメカニズムから始めましょう!
コンパイルされた.javaファイルは、JVMクラスローダーによってロードおよび検証されます。検証プロセスでは、コンパイル標準を満たしているかどうかの検証に加えて、コード内にオペレーティングシステムファイルのコードがあるかどうかも検証されます。そのため、検証に合格できない場合があります。次に、jvmについて説明します。Jvmはシステムで開かれる独立したメモリ領域です。コードを実行すると、とにかく別のサンドボックス(サンドボックスとは何ですか?後で追加します...)にあります。エリア、メモリのブロック外の他のエリアにアクセスすることも許可されていません。たとえば、コードを介してコンピュータディスク上のファイルにアクセスする場合、それは不可能です。

Java言語は堅牢です

1. Java言語は強く型付けされた言語です。つまり、コンパイルおよび実行時に多数の型チェックが実行され、一致しないデータ型の発生が防止
されます。2。Java言語は、メモリを防止する自動ガベージコレクション機能を備えて設計されています。割り当てエラー
。3。Java言語は例外処理メカニズムを設計しました

強力な型付けメカニズム、例外処理、およびJava言語の自動ガベージコレクションは、Javaプログラムの堅牢性を保証する重要な要素です。ポインタを破棄することは、Javaにとって賢明な選択です。Javaのセキュリティチェックメカニズムにより、Javaはより堅牢になります

Java言語は動的です

Javaは本質的に静的言語であり、動的言語ではありません。動的言語の注目すべき機能は、プログラムの実行中にプログラムの構造や変数の種類を変更できることです。一般的な動的言語には、Python、ruby、javascriptなどがあります。Javaは動的言語ではありませんが、Javaにはある程度のダイナミクスがあります
次の側面現れます:

  • 反射メカニズム
  • 動的バイトコード操作。
  • 動的コンパイル;
  • 他のスクリプトコードを実行します。

1.反射メカニズム

リフレクションメカニズムは、実行時にロードおよび検出できるクラスを参照し、コンパイル中に完全に不明なクラスを使用ます。クラスがロードされると、ヒープメモリにClass型のオブジェクトが生成されることがわかっています(クラスにはClassオブジェクトが1つしかありません)。このオブジェクトには、クラスのメソッドやプロパティなど、クラスの構造情報を知ることができる完全なクラス構造情報が含まれています。

などクラスのClassオブジェクトを介して、インスタンスの動的な作成メソッドの呼び出しプロパティへのアクセスなどを行うことができますクラスがロードされると、JVMは自動的にClassオブジェクトを生成します。Classオブジェクトはリフレクションのソースです。リフレクションメカニズムを使用する前提は、クラスのClassオブジェクトを取得することです。
クラスの説明は次のとおりです。
クラスのインスタンスクラスは、実行中のJavaアプリケーションのクラスとインターフェイスを表します。列挙型はクラスの一種であり、注釈はインターフェイスの一種です。すべての配列は、として反映されるクラスにも属します。同じ要素タイプと次元数を持つすべての配列で共有されるクラスオブジェクト。primitiveJavaタイプ(boolean、byte、char、short、int、long、float、およびdouble)、およびキーワードvoidもクラスオブジェクトとして表されます。
クラスにはパブリックコンストラクターがありません。代わりに、クラスオブジェクトは、クラスがロードされるときにJava仮想マシンによって、およびクラスローダーのdefineClassメソッドの呼び出しによって自動的に構築されます。

リフレクションメカニズムの一般的な操作は次のとおりです。

  • クラスを動的にロードし、コンストラクター、メソッド、属性などのクラス情報を動的に取得します。
  • オブジェクトを動的に構築します。
  • クラスとオブジェクトの任意のメソッド(パブリックとプライベート)、コンストラクターなどを動的に呼び出します。
  • 任意の属性(パブリックおよびプライベート)にアクセスするには、プライベート属性にアクセスするときに、setAccessible属性をtrueに設定する必要があります。このとき、JVMにセキュリティチェックを行わないように指示します。セキュリティチェックは実行されないため、直接問い合わせることができます。 、効率が向上します。
  • 注釈の処理;
  • 一般的な情報を取得します。

リフレクションメカニズムの最大の問題はパフォーマンスの問題です。リフレクションを頻繁に使用すると、パフォーマンスが大幅に低下します。

2.バイトコード操作

実行時にバイトコードを操作することは、リフレクションオーバーヘッドよりも効率的であり、次の機能を実現できます。

  • 新しいクラスを動的に生成します。
  • プロパティやメソッドの追加、削除、変更など、特定のクラスの構造を動的に変更します。
  • 一般的なバイトコード操作ライブラリは次の
    とおり
    です- BCEL
    -
    ASM - CGLIB - Javassist

3.エージェンシー

Javaには、静的エージェント動的エージェントの2種類のエージェントがあります
静的プロキシは、ソースコードを表示してクラスプロキシを作成することです。プロキシがさらにある場合は、プロキシクラスのソースコードを大量に作成する必要があります。

動的プロキシは、クラスを動的に作成するプロキシクラスです。たとえば、プロキシクラスはJDKを介して動的に生成でき、プロキシクラスはバイトコード操作を使用して動的に作成できます。JDKが提供するProxyおよびInvocationHandlerを使用してプロキシクラスを動的に作成する手順は次のとおりです。

  1. インターフェースを定義する
  2. 実装クラスを提供する
  3. InvocationHandlerを実装する
/**
 * 定义接口
 * */

public interface UserDao
{
    
    
   public void add();
}

  /**
    * 实现类
 * */

public class UserDaoImpl  implements UserDao
{
    
    
    public void add()
    {
    
    
    System.out.println("adduser");
    }

}

/**
   * InvocationHandler
 * */
public class ProxyFactory  implements InvocationHandler

{
    
    
     private Object real;
     public ProxyFactory(Object real)
     {
    
    
          this.real=real;
     }   
    /**
     * 通过Proxy来返回代理对象
 * */
     publicObject getProxyObject()
     {
    
    
         returnProxy.newProxyInstance(ClassLoader.getSystemClassLoader(),real.getClass().getInterfaces(),this);
     }

     @Override
     public Object invoke(Object proxy, Method method, Object[] args)
               throws Throwable
     {
    
    
          System.out.println("logging..........");
          Object result=method.invoke(real, args);
          return result;
     }

 

}

おすすめ

転載: blog.csdn.net/m0_51755061/article/details/113099662