国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

? Java Java???? Java ?? ????? ?? ??? ??

Java ?? ????? ?? ??? ??

Nov 25, 2019 pm 02:48 PM
java ?? ????

Java ?? ????? ?? ??? ??

本文由java編程入門欄目為大家詳細(xì)介紹java中的反射機(jī)制,希望可以幫助到對(duì)于此機(jī)制有所不懂的同學(xué)。

java反射

機(jī)制是運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類都能夠知道這個(gè)類的所有屬性和方法(包括私有的);對(duì)于任意一個(gè)對(duì)象,都能調(diào)用他的任意方法和屬性;這種動(dòng)態(tài)獲取信息及動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱為Java的反射機(jī)制。

用途:

在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類。

在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象。

在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法。

在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法。

生成動(dòng)態(tài)代理。

反射相關(guān)的類

Java ?? ????? ?? ??? ??

class類

在Java程序中獲得Class對(duì)象通常有如下三種方式:

1.使用Class類的forName(String clazzName)靜態(tài)方法。該方法需要傳入字符串參數(shù),該字符串參數(shù)的值是某個(gè)類的全限定名(必須添加完整包名)。

2.調(diào)用某個(gè)類的class屬性來獲取該類對(duì)應(yīng)的Class對(duì)象。

3.調(diào)用某個(gè)對(duì)象的getClass()方法。該方法是java.lang.Object類中的一個(gè)方法。

Field

Field[] allFields = class2.getDeclaredFields();//獲取class對(duì)象的所有屬性
Field[] publicFields = class2.getFields();//獲取class對(duì)象的public屬性
Field ageField = class2.getDeclaredField("age");//獲取class指定屬性,可以獲得私有屬性
Field desField = class2.getField("des");//獲取class指定的public屬性

Method

Method[] methods = class2.getDeclaredMethods();//獲取class對(duì)象的所有聲明方法
Method[] allMethods = class2.getMethods();//獲取class對(duì)象的所有public方法 包括父類的方法
Method method = class2.getMethod("info", String.class);//返回次Class對(duì)象對(duì)應(yīng)類的、帶指定形參列表的public方法
Method declaredMethod = class2.getDeclaredMethod("info", String.class);//返回次Class對(duì)象對(duì)應(yīng)類的、
帶指定形參列表的方法

Constructor

Constructor<?>[] allConstructors = class2.getDeclaredConstructors();//獲取class對(duì)象的所有聲明構(gòu)造函數(shù)
Constructor<?>[] publicConstructors = class2.getConstructors();//獲取class對(duì)象public構(gòu)造函數(shù)
Constructor<?> constructor = class2.getDeclaredConstructor(String.class);//獲取指定聲明構(gòu)造函數(shù)
Constructor publicConstructor = class2.getConstructor(String.class);//獲取指定聲明的public構(gòu)造函數(shù)

通過反射 生成實(shí)例對(duì)象

1.使用Class對(duì)象的newInstance()方法來創(chuàng)建該Class對(duì)象對(duì)應(yīng)類的實(shí)例。這種方式要求該Class對(duì)象的對(duì)應(yīng)類有默認(rèn)構(gòu)造器,而執(zhí)行newInstance()方法時(shí)實(shí)際上是利用默認(rèn)構(gòu)造器來創(chuàng)建該類的實(shí)例。

2.先使用Class對(duì)象獲取指定的Constructor對(duì)象,再調(diào)用Constructor對(duì)象的newInstance()方法來創(chuàng)建該Class對(duì)象對(duì)應(yīng)類的實(shí)例。通過這種方式可以選擇使用指定的構(gòu)造器來創(chuàng)建實(shí)例。

調(diào)用方法

1.通過Class對(duì)象的getMethods()方法或者getMethod()方法獲得指定方法,返回Method數(shù)組或?qū)ο蟆?/p>

2.調(diào)用Method對(duì)象中的Object invoke(Object obj, Object… args)方法。第一個(gè)參數(shù)對(duì)應(yīng)調(diào)用該方法的實(shí)例對(duì)象,第二個(gè)參數(shù)對(duì)應(yīng)該方法的參數(shù)。

實(shí)例代碼:

反射是什么?

package am;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import javax.activation.FileDataSource;
/**
 * 反射是什么:
 *    java中的反射:就是在類的加載過程中,發(fā)現(xiàn)類的屬性和方法構(gòu)造方法等信息??梢垣@得類的屬性值,可以調(diào)用類的方法。
 *    
 * 
 * 反射獲得類的對(duì)象。
 *
 */
public class Demo01 {
	public static void main(String[] args) throws Exception{
		// 通過反射,獲取類的對(duì)象。
		Object obj = create("am.Foo");;
		Foo foo = (Foo)obj;
		System.out.println(foo.a);
		double dou = foo.show(12, "hello");
		System.out.println(dou);
		System.out.println("======================================");
		// 獲得類的屬性
		showField(obj);
		System.out.println("======================================");
		double a = (double)getFieldValue(obj, "b");
		System.out.println(a);
		System.out.println("========================================");
		// 通過反射調(diào)用方法。
		Object ob = getMethodValue(obj,"show",new Class[]{int.class,String.class},new Object[]{23,"abc"});
		double douValue = (double)ob;
		System.out.println(douValue);
	}
//通過反射調(diào)用方法,哪個(gè)對(duì)象,什么名稱,參數(shù)類型,參數(shù)值
	public static Object getMethodValue(Object obj,String method,Class[] paramType,Object[] param)
	throws Exception{
		Class cla = obj.getClass();
		Method me = cla.getDeclaredMethod(method, paramType);
		Object o = me.invoke(obj, param);
		return o;
	}
	// 獲取類的屬性值:
	public static Object getFieldValue(Object obj,String name)throws Exception{
		Class cla = obj.getClass();// 獲取字節(jié)碼對(duì)象。
		Field field = cla.getDeclaredField(name);// 通過屬性的名稱。獲取當(dāng)前屬性。
		Object result = field.get(obj);
		return result;
	}
	// 通過反射,可以獲得類的屬性信息以及方法信息。
	public static void showField(Object obj){
		// java中對(duì)屬性類。 Field   方法類:Method
		Class cla = obj.getClass();
		System.out.println("獲取類名:"+cla.getName());
		System.out.println("======================================");
		// 獲取類的屬性:
		Field[] fields = cla.getDeclaredFields();// 獲取公開的屬性。
		for(Field field : fields){
			System.out.println("獲取類的屬性類型"+field.getType());
			System.out.println("獲取類的屬性名稱:"+field.getName());
		}
		System.out.println("======================================");
		// 獲取類的方法。
		Method[] methods = cla.getDeclaredMethods();
		for(Method method : methods){
			System.out.println("獲取方法的返回值類型:"+method.getReturnType());
			System.out.println("獲取方法名稱:"+method.getName());
			System.out.println("獲取方法的參數(shù)類型。"+Arrays.toString(method.getParameterTypes()));
		}
		System.out.println("=======================================");
		// 獲取類的構(gòu)造方法:
		Constructor[] cons = cla.getDeclaredConstructors();
		for(Constructor con : cons){
			System.out.println("構(gòu)造方法的名字:"+con.getName());
			System.out.println("構(gòu)造方法參數(shù)類型:"+Arrays.toString(con.getParameterTypes()));
		}	
	}
	// 如何反射類的實(shí)例。
	public static Object create(String name) throws Exception{
		// 反射的方法。Class.forName();
		Class cla = Class.forName(name);
		// 如何獲得Object類型對(duì)象。
		Object obj = cla.newInstance();
		return obj;
	}
}
// 模擬類。
class Foo{
	int a = 10;
	double b = 20;
	public double show(int p,String str){
		System.out.println("調(diào)用方法傳入的值是:"+str);
		return a+b+p;
	}
	public Foo(){
	}
	public Foo(int a,int b){
	}
}

更多相關(guān)學(xué)習(xí)視頻推薦:java視頻教程

? ??? Java ?? ????? ?? ??? ??? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? ????? ??
? ?? ??? ????? ???? ??? ??????, ???? ?????? ????. ? ???? ?? ???? ?? ??? ?? ????. ???? ??? ???? ???? ??? ?? admin@php.cn?? ?????.

? AI ??

Undresser.AI Undress

Undresser.AI Undress

???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover

AI Clothes Remover

???? ?? ???? ??? AI ?????.

Video Face Swap

Video Face Swap

??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

???

??? ??

???++7.3.1

???++7.3.1

???? ?? ?? ?? ???

SublimeText3 ??? ??

SublimeText3 ??? ??

??? ??, ???? ?? ????.

???? 13.0.1 ???

???? 13.0.1 ???

??? PHP ?? ?? ??

???? CS6

???? CS6

??? ? ?? ??

SublimeText3 Mac ??

SublimeText3 Mac ??

? ??? ?? ?? ?????(SublimeText3)

???

??? ??

??? ????
1601
29
PHP ????
1502
276
???
JDBC? Java? ??? ???? ??? ?????? JDBC? Java? ??? ???? ??? ?????? Aug 02, 2025 pm 12:29 PM

JDBC ????? ???? ????? ?? ?? ?? ??? ?? ?? ??? ?? ? ?? ??? ?? ?? ?? ??? ???????. 1. ????? ????? Conn.SetAutoCommit (False)?? ??????. 2. ??? ? ????? ?? ?? SQL ??? ?????. 3. ?? ??? ??? ?? Conn.commit ()?? ???? ??? ???? ???? ?? ??? ???? Conn.Rollback ()?? ??????. ???, ? ??? ???? ????, ??? ???? ????, ?? ??? ??? ?? ??? ??? ???? ? ???????. ?? ?? ?? ???? ????? ??? ???? ?? ?? ???? ???? ??? ????? ?? ??? ??? ? ?? ???? ?? ????.

Java? ??? ?? ??? ?????? Java? ??? ?? ??? ?????? Aug 02, 2025 am 02:38 AM

?? ?? ? ?? ???? ???? ?? Java.Time ???? ???? ??????. 2. LocalDate, LocalDateTime ? LocalTime? ?? ?? ??? ??? ?????. 3. () ???? ???? ?? ??? ??? ????. 4. ???/???? ??? ???? ??? ????? ??? ??????. 5. ZonedDateTime ? Zoneid? ???? ???? ??????. 6. DateTimeFormatter? ?? ?? ? ?? ?? ?? ???; 7. ??? ?? ?? ?? ??? ????? ?? ??????. ?? Java? ?? ??? ???? ??? ??? ???? Java.Timeapi ??? ?? ??? ???????.

Java ??? ?? ?? : Spring Boot vs Quarkus vs Micronaut Java ??? ?? ?? : Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-FormancetArtUptimeMoryUsage, Quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless sinarios.2.thyvelopecosyste,

??? ??? Java?? ??? ?????? ??? ??? Java?? ??? ?????? Aug 02, 2025 pm 01:55 PM

Java 's Garbage Collection (GC)? ???? ???? ???? ??????, ?? ? ??? ??? ? ??? ??? ??? ??? ????. 1.GC? ?? ?? (? : ?? ??, ?? ???, ?? ?? ?)?? ??? ???? ????, ?? ? ??? ??? ???? ?????. 2. ?? ???? ????? ????, ?? ?? ??? ??? ???? ?? ??? ??????. 3. ?? ?? ?? ?? : ??? ?? (Eden, S0, S1)? ?? ????? ?????. ??? ??? ?? ? MajorGC? ???? ? ??? ? ????. Metaspace? ??? ?? ???? ?????. 4. JVM? ??? GC ??? ?????. SerialGC? ??? ?? ????? ?????. ParallelGC? ???? ??????. CMS? ?? ???

?? HTTP ???? ?? ??? ?????? ?? HTTP ???? ?? ??? ?????? Aug 03, 2025 am 11:35 AM

GO? HTTP ?? ????? ?? ??, ??, ????? IP ? ?? ??? ?? ? ? ????. 1. http.handlerfunc? ???? ????? ????, 2. ??? ???? ?? ?? ??? ?? ??? ??????. ?? ?? ??? ???? ??? ?????? ??? ????? ???? ? ?????. ?? ???? ?? ?? ??, JSON ?? ?? ? ?? ID ??? ?????.

??? ???? html` ?? '??? ????? ??? ???? html` ?? '??? ????? Aug 03, 2025 am 11:07 AM

??? htmlinput ??? ???? ??? ???? ????? ??? ??? ?? ??? ???? ???? ? ????. 1. ???, ???, ??, ?? ? ??? ?? ??? ??? ?? ?? ?? ??? ???? ???? ??? ? ???? ??? ? ????. 2. HTML5? ?????? ??? ? ?? ?? ??? ?? ? ??? URL, ??, ?? ? ??? ?? ??? ??? ??????. 3. ?? ?? ? ? ??? ??? ???? ?? ??? ???? ???? ?? ???? ?? ???? ???? ?? ? ? ??? ?? ???????.

Java ?? ?? ?? : Maven vs. Gradle Java ?? ?? ?? : Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

GradleisBetTerChoiceFormostNewProjectSduetoitssuperiorflexible, Performance, and ModernToolingsupport.1.Gradle'Sgroovy/kotlindslismoreConcisENDEXPRESSIVETHANMAVEN'SVOSEXML.2.GradleOutsMaveninbuildweedweedweedweedweedweedweedweedweedweedweedweedweedweede

??? ????. ?? ??? ?? ??? ????. ?? ??? ?? Aug 02, 2025 am 06:26 AM

DEFER? ??? ???? ?? ??? ??? ???? ? ?????. ?? ??? ?? ? ? ?? ????, ??? ??? ? ?? ?? (LIFO)? ??? ?????. 1. ?? ??? ??? ? ??? ?????. 2. ?? ??? ?? ??? ??? ????? ?????. 3. ?? ? ?? ?? ??? ? ????. 4. ??? ?????? ??? ??? ???? ?????. 5. ?? ??? ???? ?? ??? ?? ??? ?????. ??? ??? ?? ?? ? ???? ???? ? ????.

See all articles