1. 程式人生 > 其它 >java反射機制反射屬性, 方法, 構造方法 / 設定屬性值, 呼叫方法, 呼叫構造方法

java反射機制反射屬性, 方法, 構造方法 / 設定屬性值, 呼叫方法, 呼叫構造方法

1. 獲取類名

// 1. 靜態方法
Class c = Class.forName("類的路徑, 帶類包名");
// 2. 任何類都有 getName() 方法 返回類的名字
// 3. 類的class屬性

2. 獲取類中的屬性(反射屬性)

package com.fmg.restudy;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class FieldTest {
public static void main(String[] args) throws Exception {
// 1. 屬性都有class
Class c = Class.forName("com.fmg.restudy.study");
Field[] fields = c.getDeclaredFields();
StringBuffer str = new StringBuffer();
str.append("public class study {");
for (Field filed : fields) {
// 修飾符屬性
// System.out.println(Modifier.toString(filed.getModifiers()));
// 修飾符
// System.out.println(filed.getType().getSimpleName());
// 獲取屬性名
// System.out.println(filed.getName());
str.append("\n");
str.append(" ");
str.append(Modifier.toString(filed.getModifiers()));
if (filed.getModifiers() > 0) str.append(" ");
str.append(filed.getType().getSimpleName());
str.append(" ");
str.append(filed.getName());
str.append(";");
}
str.append("\n}");
System.out.println(str);
}
}

3. 反射方法

package com.fmg.restudy;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class ReflectMethods {
public static void main(String[] args) throws Exception {
Class c = Class.forName("java.lang.String");
Method[] methods = c.getDeclaredMethods();
StringBuffer sbf = new StringBuffer();
for (Method method: methods) {
// 修飾符列表 結果 public
// System.out.println(Modifier.toString(method.getModifiers()));
sbf.append(Modifier.toString(method.getModifiers()));
sbf.append(" ");
// 返回結果 Boolean
// System.out.println(method.getReturnType());
sbf.append(method.getReturnType());
sbf.append(" ");
// 返回方法名
// System.out.println(method.getName());
sbf.append(method.getName());
sbf.append(" (");
// 獲取方法引數
Class[] cl = method.getParameterTypes();
for (Class cla : cl) {
// System.out.println(cla.getSimpleName());
sbf.append(cla.getSimpleName() + ",");
}
sbf.deleteCharAt(sbf.length() - 1);
sbf.append(") {}");
sbf.append("\n");
}
System.out.println(sbf);
}
}

4. 反射構造器

package com.fmg.restudy;

import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;

public class ReflectConstructor {
public static void main(String[] args) throws Exception {
Class c = Class.forName("com.fmg.restudy.study");
// 獲取構造方法陣列
Constructor[] ct = c.getDeclaredConstructors();
// 遍歷構造方法陣列
for (Constructor cr : ct) {
Class[] s = cr.getParameterTypes();
for (Class s2 : s) {
// 拿構造器方法的名字
System.out.println(s2.getSimpleName());
}
}

}
}

5. 通過反射呼叫方法

package com.fmg.restudy;

import java.lang.reflect.Method;

public class UseMethod {
public static void main(String[] args) throws Exception {
Class c = Class.forName("com.fmg.restudy.study");
Object obj = c.newInstance();
Method method = c.getDeclaredMethod("soSome", int.class, int.class);
method.invoke(obj, 3, 9);
}
}

6. 通過反射呼叫構造方法

package com.fmg.restudy;

import java.lang.reflect.Constructor;

public class UseConstructor {
public static void main(String[] args) throws Exception {
Class c = Class.forName("com.fmg.restudy.study");
Constructor ct = c.getDeclaredConstructor(String.class, String.class);
ct.newInstance("fmg", "123456");
}
}

7. 通過反射機制設定屬性值

package com.fmg.restudy;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectSetField {
public static void main(String[] args) throws Exception {
Class c = Class.forName("com.fmg.restudy.study");
Object obj = c.newInstance();
Field num = c.getDeclaredField("num");
num.set(obj, 1000);
System.out.println(obj);
}
}

做測試用的java study 程式碼

package com.fmg.restudy;

public class study {
    String username = "fmg";
    private String password = "123";
    int num;
    public boolean check(String username, String password) {
        return this.username.equals(username) && this.password.equals(password);
    }

    public study() {
    }

    public study(String username) {
        this.username = username;
    }

    public study(String username, String password) {
        this.username = username;
        this.password = password;
        System.out.println(this.username + "---------" + this.password);
    }

    public void soSome(int a, int b) {
        System.out.println(a + "+" + b + "=" + (a + b));
    }

    @Override
    public String toString() {
        return "study{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", num=" + num +
                '}';
    }
}