JAvaアクセス修飾子および反射使用
7000 ワード
一、アクセス修飾子
1、追加
2、追加しない
二、反射
1、反射とは何か
2、使用手順操作したいクラスのjava.lang.Classオブジェクトを取得します.実行中のJavaプログラムでは、java.lang.Classクラスでクラスやインタフェースなどを記述します. getDeclaredMethodsのようなメソッドを呼び出し、クラスで定義されたすべてのメソッドのリストを取得する. は、反射されたAPIを使用してこれらの情報を操作する.
3、Classオブジェクトを取得する3つの方法オブジェクトのgetClassメソッドを取得します.この方法では、特定のクラスとそのクラスのオブジェクト、およびgetClassメソッドを呼び出す必要があります. 基本データ型を含む任意のデータ型は、そのタイプに対応するClassオブジェクトを直接取得できる静的属性classを備えている.この方法では、特定のクラスを使用し、呼び出しクラスの静的属性classが完了し、呼び出し方法を必要とせず、よりパフォーマンスが向上します. はClass.forName()メソッドで取得されます.この方法ではクラス名を使用するだけでクラスのClassオブジェクトを取得でき、拡張に役立ちます.
4、api使用
1.java反射を使用してクラスのコンストラクション関数(共有、プライベート)を取得します(パラメータあり、パラメータなし)
2.java反射を使用してクラスを取得する方法(共有、プライベート)(パラメータあり、パラメータなし)
3.java反射を使用してクラスのプロパティ(共有、プライベート)を取得する
1、追加
public:
private:
protected:
defult:
2、追加しない
protected:
二、反射
1、反射とは何か
Java , , ; , ; Java
2、使用手順
3、Classオブジェクトを取得する3つの方法
4、api使用
1.java反射を使用してクラスのコンストラクション関数(共有、プライベート)を取得します(パラメータあり、パラメータなし)
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* java
* @author Sunshine
*
*/
public class ReflectPer {
private static Class class1;
// java , Junit @beforeclass ,
// :@beforeclass
@BeforeClass
public static void beforeClass() throws Exception{
System.out.println("==== ====");
class1 = Class.forName("myPractise.Per");//
}
// ,
@Test
public void test1() throws Exception{
Constructor constructor = class1.getConstructor(null);// , null
Per per = (Per) constructor.newInstance(null);// , Object
System.out.println(per.name);// -----
}
// ,
@Test
public void test2()throws Exception{
Constructor constructor = class1.getConstructor(String.class,int.class);// ,
Per per = (Per)constructor.newInstance("baby",24);//
}
// ,
@Test
public void test3()throws Exception{
Constructor constructor = class1.getDeclaredConstructor(String.class);// ,
constructor.setAccessible(true);// , true
Per per = (Per)constructor.newInstance("baby");
System.out.println(per.weight);// -----
// : , 。。 java
}
@AfterClass
public static void afterClass(){
System.out.println("=== null===");
}
}
2.java反射を使用してクラスを取得する方法(共有、プライベート)(パラメータあり、パラメータなし)
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* java
* @author Sunshine
*
*/
public class ReflectPer {
private static Class class1;
private static Per per;
// java , Junit @beforeclass ,
// :@beforeclass
@BeforeClass
public static void beforeClass() throws Exception{
System.out.println("==== ====");
class1 = Class.forName("myPractise.Per");//
per = (Per) class1.getConstructor(null).newInstance(null);//
}
//
@Test
public void test4()throws Exception{
Method method = class1.getMethod("methodT1", null);// , , , null
method.invoke(per, null);// invoke , , , , null
}
//
@Test
public void test5()throws Exception{
Method method = class1.getMethod("methodT1", String.class,int.class);// ,
method.invoke(per, "sunshine",25);// invoke , ,
}
@Test
public void test6()throws Exception{
Method method = class1.getDeclaredMethod("methodT1", String.class);// ,
method.setAccessible(true);// , false,
method.invoke(per, "sunshine");// invoke , ,
System.out.println(method.getReturnType());//
}
@Test
public void test7()throws Exception{
Method method = class1.getMethod("methodT2", int[].class,String[].class);
method.invoke(per, new int[]{1,2},new String[]{"AA","BB"});
}
// main
//jdk5 --
// , ,java.lang.IllegalArgumentException: wrong number of arguments
// , new String[]{"AA","BB"} (Object)new String[]{"AA","BB"}
@Test
public void test8()throws Exception{
Method method = class1.getMethod("main",String[].class);
method.invoke(per,(Object)new String[]{"AA","BB"});
}
@AfterClass
public static void afterClass(){
System.out.println("=== null===");
}
}
3.java反射を使用してクラスのプロパティ(共有、プライベート)を取得する
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Iterator;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* java
*
* @author Sunshine
*
*/
public class ReflectPer {
private static Class class1;
private static Per per;
// java , Junit @beforeclass ,
// :@beforeclass
@BeforeClass
public static void beforeClass() throws Exception {
System.out.println("==== ====");
class1 = Class.forName("myPractise.Per");//
per = (Per) class1.getConstructor(null).newInstance(null);//
}
//
@Test
public void test9() throws Exception {
// ,
Field field = class1.getField("name");
// ,
System.out.println(field.get(per));
//
System.out.println(field.getType());
//
Field[] field1 = class1.getFields();
// for Jdk1.5 , Iterator
for (Field str : field1) {
System.out.println(str);
}
//
field.set(per, "baby");
System.out.println(field.get(per));
}
//
@Test
public void test10() throws Exception {
Field field = class1.getDeclaredField("age");
field.setAccessible(true);//
System.out.println(field.get(per));
}
@AfterClass
public static void afterClass() {
System.out.println("=== null===");
}
}