はじめに:最初Java5から、プログラムの実行時にJavaは、反射の新しい概念を引用し、その情報を動的にプログラムを持って感じることができ、情報を取得するプロセスは、完了するためにリフレクションを使用することです。
A、 クラスのカテゴリ:
クラスクラスは、我々はインタフェースを作成したら、クラスをすべてのJavaプログラム・インターフェースのすべてのメッセージ、クラス、記述された配列を保持するために使用される、つまり、すべての情報を保存し、クラスのクラスで配列を登録されます。
我々はインターフェイス、クラスを取得する必要があるとき、あなたは彼らがオブジェクトによって、クラス内のオブジェクトの配列を登録するときに情報にアクセスして、オペレータが提供する反射機構を得るためにいくつかのメソッドを呼び出すことができます。
第二に、 インタフェース、配列クラスまたはクラスに登録されたのオブジェクトを取得します:
- 1. のgetClass()メソッドを呼び出すことによって得られます。
グレードグレード=新グレード();
クラスgradeClss = grade.getClass()。
- 2. インターフェイス、アクセスクラスクラスの静的プロパティを介して取得します:
クラスstudentClass = Student.class。
- 3. 完全なクラス名を介して取得:
クラスdriverClass = Class.forNameの( "はcom.mysql.jdbc.Driver" );
第三に、 操作を完了するために反射機構クラスのオブジェクトによって提供されるメソッド呼び出し:
/ ** *グレードの反射特性を通じて入手 方法はgetDeclaredの先頭で呼び出された場合、それらのすべてのアクセスに関係なく、リソースがプライベートであるかどうかの表現* * / @Test 公共 のボイド)testGetFieds({ クラスclazz =グレードクラス。 // フィールド、[] =のclazz.getFieldsのfiels() フィールド、[] =のfielsのclazz.getDeclaredFields(); 用(フィールド、フィールド:fiels){ System.out.printlnは(field.getName()); } } / ** *グレードは、反射により財産を取得する 方法がgetDeclaredの先頭で呼び出された場合*に関係なく、リソースがプライベートであるかどうかのそれらのすべてのアクセス表現 * / @Test 公共 ボイドtestGetMedthods(){ クラスclazz =グレード。クラス。 // フィールド[] fielsの=のclazz.getFields()。 方法[] medthodsの=のclazz.getDeclaredMethods()。 clazz.getSuperclass(); 用(方法medthod:medthods){ System.out.printlnは(medthod.getName())。 } }
四、 ジャワのいくつかのクラスローダのデフォルト:
Javaの仮想マシン(JVM)あなたは、いくつかのクラスローダを起動したとき、彼らは「システムクラスローダ」です自動的に開始され、「拡張クラスローダ」、「ルートクラスローダ」、我々はまた、最初の二つに取得することができますローダー、および取得の「ルートクラスローダ」承認し難いです。
1) 「ルートクラスローダ」:JVMは、java.langパッケージのクラスとして、起動時に必要なクラスをロードします。
2) システムクラスローダ「:Java.util.Date:ロードクラスSunのJVMで提供さは、次のような、開始します。
3) 「拡張クラスローダ」:JVMに第三者によって提供されるいくつかのクラスをロードするよう、開始:はcom.mysql.jdbc.Driver。
/ ** *実際使ってクラスローダ Javaクラスローダにいくつかのクラスを実施する過程で取得* *システムローダーは、拡張取得することができる、ルートクラスローダを取得することはできません。 * / @Test 公共 無効testClassLoader(){ // システムクラスローダーを取得します: クラスローダクラスローダ= ClassLoader.getSystemClassLoader(); System.out.printlnは( "クラスローダシステム:" + クラスローダー); // 取得し、拡張クラスローダーある クラスローダextendClassLoader = ClassLoader.getSystemClassLoader()のgetParent();. するSystem.out.println( "拡張クラスローダ:" + extendClassLoaderは); //は、ルートクラスローダを取得しようとするが、実際にはに得ることができない のClassLoader bootClassLoader =。ClassLoader.getSystemClassLoader()のgetParent()のgetParent();. のSystem.out.println( "クラスローダがルートを取得しよう:" + BootClassLoader); }
第五に、 クラスローダによってSRCに配置されたリソースをロードします。
Webrootウェブルートリソースの下に置かとして直接「/ XXX」では得られない資源のSRCに入れ、クラスローダを介して取得するために。
ケース:変換のためのBaseDao:
でBaseDaoによってファイル属性(db.properties)を移動するためのドライブ(driverClass)、URL(JDBCURL)、ユーザー名(ユーザー)、パスワード(パスワード):データベースBaseDaoへの接続のデッド4つのパラメータを記述する必要がありますクラスローダがロードのdb.propertiesは来るが、また、ツールクラスのプロパティはdb.propertiesの内容を読み取るために。
db.properties:新しいソースフォルダの設定と呼ばれるプロジェクトフォルダには、名前の新しいフォルダを作成し、彼らは、データベースの情報を変更したい場合は、ファイルdb.propertiesを、それがファイルに直接変更することができます。
driverClass =はcom.mysql.jdbc.Driver
JDBCURL = JDBCます。mysql://127.0.0.1:3306 / myschool39の
ユーザー=ルート
パスワード=ルート
#driverClass = oracle.jdbc.driver.OracleDriverと
#jdbcurl = JDBC:オラクル:薄いです:@ 127.0.0.1:1521:orcl
#USER = user39
#password =ルート
#driverClass = com.microsoft.sqlserver.jdbc.SQLServerDriver
#jdbcurl = JDBC:のSQLServer://127.0.0.1:1433; databaseNameの= SQLServerの
#USER = SA
#パスワード=ルート
BaseDao.java
パッケージcom.oop.util; インポート; java.io.InputStreamを / * *クラスは、3つの属性BaseDao(接続、のPreparedStatement、ResultSetのタイプ)と定義する リソース方法にcloseAllを閉じ、接続を取得するためのgetConnectionメソッド():* 2つの方法。 * / インポート java.sqlの。* ; インポートjava.util.Properties; パブリック クラスBaseDao { // 3つの属性 に保護 InputStream InputStreamは= ヌル; 保護された接続CT = ヌル; 保護されたPreparedStatement PST = ヌル; 保護されたResultSet RS = ヌル; / /接続取得 保護接続のgetConnectionを(){ 試み{ // 0、データベース接続のプロパティから取得した4つのパラメーターの値は、ファイルdb.properties // COM / OOP / UTIL / db.properties使用する場合、パッケージのutil中のプロパティファイル inputStream = この .getClass()のgetClassLoader()getResourceAsStream( "db.properties。"。); プロパティProperites = 新しい新しいプロパティ(); properites.load(InputStreamの);
文字列driverClass = properites.getProperty( "driverClass" ); 文字列JDBCURL properites.getPropertyは=( "JDBCURL" )。 Stringユーザー = properites.getProperty( "USET" ); 文字列のパスワード = properites.getProperty( "パスワード" ); // 1 ---負荷(登録)ドライブが:リンクはデータベース管理システムの種類で指定します / * *使用直接にforName(文字クラス名)法と呼ばれるクラスのカテゴリ *は、ドライバクラスで取得したすべての情報から、物体の「反射」を利用することができるクラスドライバクラスに登録されたオブジェクトを取得します。 * / Class.forNameの(driverClass); // 2 ---取得およびデータベース・リンク:あなたが(::MySQLのJDBCのURLを指定する必要があります。// 、ユーザー、パスワード127.0.0.1:3306/データベース名を)。 // 戻り値は、接続インターフェイスは、CT受容クラスオブジェクト必要 CT = ;たDriverManager.getConnection(JDBCURL、ユーザ、パスワード) } キャッチ(例外E){ e.printStackTrace(); } }戻りCT。 } // 关闭资源 保護 無効にcloseAll(){ しようと{ 場合(!RS = ヌル){ rs.close(); } もし(!PST = NULL ){ pst.close()。 } もし(!CT = NULL ){ ct.close()。 } もし(!のinputStream = NULL ){ inputStream.close()。 } キャッチ(例外e){ e.printStackTrace(); } } }