国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java重點(diǎn):反射機(jī)制的使用

這篇具有很好參考價(jià)值的文章主要介紹了Java重點(diǎn):反射機(jī)制的使用。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、概念

二、類類

1、類類的獲取方式

1)類名.Class

2)對象.getClass()

3)Class.forName()

三、反射實(shí)例化

1、調(diào)用一個(gè)公有的無參構(gòu)造方法

2、調(diào)用一個(gè)公有的一個(gè)參構(gòu)造方法

3、調(diào)用一個(gè)公有的兩個(gè)參構(gòu)造方法

4、調(diào)用一個(gè)私有的一個(gè)參構(gòu)造方法

四、反射:方法調(diào)用

1、公有無參

2、公有有參

3、私有有參

完整代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-729628.html

五、反射:讀寫屬性


一、概念

J2EE中的反射(Reflection)是指在程序運(yùn)行期間訪問、檢測和修改自身的狀態(tài)或行為。通過反射,可以動(dòng)態(tài)地獲取一個(gè)類的所有成員變量、方法、構(gòu)造函數(shù)等信息,并且可以在運(yùn)行時(shí)調(diào)用這些成員。在J2EE中,反射可以方便實(shí)現(xiàn)一些框架、ORM工具,以及其他動(dòng)態(tài)性要求的應(yīng)用程序。

什么是反射?

反射(Reflection)是一種在運(yùn)行時(shí)動(dòng)態(tài)地獲取和操作對象的能力,它允許程序通過對象的類類型來了解對象的成員和方法,并且可以在運(yùn)行時(shí)調(diào)用這些成員和方法。反射可以用于許多目的,例如在運(yùn)行時(shí)動(dòng)態(tài)加載類、實(shí)例化對象、查看和修改對象的屬性和方法、調(diào)用私有方法和構(gòu)造函數(shù),等等。在Java中,反射通過java.lang.reflect包中的類和接口來實(shí)現(xiàn)。反射的優(yōu)點(diǎn)是可以使我們的代碼更加靈活和動(dòng)態(tài),但是反射的開銷比較大,因此在性能要求較高的情況下,應(yīng)該謹(jǐn)慎使用。

總的來說:反射Java語言中的一種機(jī)制,通過這種機(jī)制可以動(dòng)態(tài)的實(shí)例化對象、讀寫屬性、調(diào)用方法

二、類類

在Java反射(reflection)中,Class類被稱為“類類”(class of class),因?yàn)樗砹?span style="color:#ff9900;">JVM中的一個(gè)類。每個(gè)Java類在內(nèi)存中都有一個(gè)對應(yīng)的Class類實(shí)例對象,可以通過Java的反射機(jī)制獲取。通過這個(gè)實(shí)例,我們可以動(dòng)態(tài)地獲取創(chuàng)建、操作一個(gè)類的各種元數(shù)據(jù)(如屬性、方法、注解等),并可以在程序運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建、修改該類的對象。通過反射,我們可以實(shí)現(xiàn)更加靈活和動(dòng)態(tài)的編程方式,可以在編碼階段不確定訪問的類和方法,直到運(yùn)行時(shí)才確定需要獲取和調(diào)用的類和方法。

1、類類的獲取方式

1. Object類中的getClass()方法:可以獲取一個(gè)對象所屬的類。

2. 類名.class:直接通過類名這種語法形式獲取一個(gè)類的Class實(shí)例對象。

3. Class.forName(String className):過類的全限定名獲取Class實(shí)例對象,需要處理ClassNotFoundException異常。

這些方式均可以獲得一個(gè)Java類的Class實(shí)例對象,從而可以利用反射機(jī)制獲取該類的一系列信息,如屬性、方法、構(gòu)造方法、注解等。

1)類名.Class

在開始示例的前期準(zhǔn)備工作我們寫一個(gè)類(Class)

package com.tgq.reflect;

/**
 * 一個(gè)類
 * 
 * @author tgq
 *
 */
public class Student {
	private String sid;

	private String sname;

	public Integer age;

	static {
		System.out.println("加載進(jìn)jvm中!");
	}

	public Student() {
		super();
		System.out.println("調(diào)用無參構(gòu)造方法創(chuàng)建了一個(gè)學(xué)生對象");
	}

	public Student(String sid) {
		super();
		this.sid = sid;
		System.out.println("調(diào)用帶一個(gè)參數(shù)的構(gòu)造方法創(chuàng)建了一個(gè)學(xué)生對象");
	}

	public Student(String sid, String sname) {
		super();
		this.sid = sid;
		this.sname = sname;
		System.out.println("調(diào)用帶二個(gè)參數(shù)的構(gòu)造方法創(chuàng)建了一個(gè)學(xué)生對象");
	}

	@SuppressWarnings("unused")
	private Student(Integer age) {
		System.out.println("調(diào)用Student類私有的構(gòu)造方法創(chuàng)建一個(gè)學(xué)生對象");
		this.age = age;
	}

	public String getSid() {
		return sid;
	}

	public void setSid(String sid) {
		this.sid = sid;
	}

	public String getSname() {
		return sname;
	}

	public void setSname(String sname) {
		this.sname = sname;
	}

	public void hello() {
		System.out.println("你好!我是" + this.sname);
	}

	public void hello(String name) {
		System.out.println(name + "你好!我是" + this.sname);
	}

	@SuppressWarnings("unused")
	private Integer add(Integer a, Integer b) {
		return new Integer(a.intValue() + b.intValue());
	}
}

編寫好一個(gè)類之后我們開始調(diào)用方法進(jìn)行拿去:代碼示例

package com.tgq.reflect;

/**
 * 類類的獲取方式: 1、類名.Class 2、對象.getClass(); 3、Class.forName();
 * 
 * @author tgq
 *
 */
public class Demo_01 {
	@SuppressWarnings("rawtypes")
	public static void main(String[] args) throws Exception {

		// 1、類名.Class
		Class c1 = Student.class;
		System.out.println(c1);

	}
}

輸出結(jié)果:

java反射調(diào)用方法,java,開發(fā)語言,jvm,eclipse,java-ee

2)對象.getClass()

package com.tgq.reflect;

/**
 * 類類的獲取方式: 1、類名.Class 2、對象.getClass(); 3、Class.forName();
 * 
 * @author tgq
 *
 */
public class Demo_01 {
	@SuppressWarnings("rawtypes")
	public static void main(String[] args) throws Exception {

		// 1、類名.Class
		// Class c1 = Student.class;
		// System.out.println(c1);
		
		// 2、對象.getClass();
		Student student = new Student();
		Class c2 = student.getClass();
		System.out.println(c2);

	}
}

輸出結(jié)果:

java反射調(diào)用方法,java,開發(fā)語言,jvm,eclipse,java-ee

3)Class.forName()

package com.tgq.reflect;

/**
 * 類類的獲取方式: 1、類名.Class 2、對象.getClass(); 3、Class.forName();
 * 
 * @author tgq
 *
 */
public class Demo_01 {
	@SuppressWarnings("rawtypes")
	public static void main(String[] args) throws Exception {

		// 1、類名.Class
		// Class c1 = Student.class;
		// System.out.println(c1);

		// 2、對象.getClass();
		// Student student = new Student();
		// Class c2 = student.getClass();
		// System.out.println(c2);

		// 3、Class.forName();
		Class c3 = Class.forName("com.tgq.reflect.Student");
		System.out.println(c3);
	}
}

輸出結(jié)果:

java反射調(diào)用方法,java,開發(fā)語言,jvm,eclipse,java-ee

三、反射實(shí)例化

在Java中,可以使用反射來實(shí)例化一個(gè)類。具體實(shí)現(xiàn)可以通過Class類的newInstance()方法或者Constructor類的newInstance()方法來實(shí)現(xiàn)。

三個(gè)常用的方法:getConstructor (),getDeclaredConstructor ()?,newInstance() 。

一切的反射從類類開始

1、調(diào)用一個(gè)公有的無參構(gòu)造方法

public class Demo_02 {
	@SuppressWarnings("rawtypes")
	public static void main(String[] args) throws Exception {
		// 一切反射從類類開始
		// 不管是哪一種獲取類類的方法都是可以的
		// Class c1 = Class.forName("com.tgq.reflect.Student");
		// Student student = new Student();
		// Class c1 = student.getClass();
		Class c1 = Student.class;
		/*
		 * 1、調(diào)用一個(gè)無參構(gòu)造器反射實(shí)例化: 如果沒有無參構(gòu)造器是會(huì)報(bào)錯(cuò)的
		 */
		Student stu1 = (Student) c1.newInstance();
		System.out.println(stu1);


	}
}

輸出結(jié)果:

java反射調(diào)用方法,java,開發(fā)語言,jvm,eclipse,java-ee

2、調(diào)用一個(gè)公有的一個(gè)參構(gòu)造方法

public class Demo_02 {
	@SuppressWarnings("rawtypes")
	public static void main(String[] args) throws Exception {
		// 一切反射從類類開始
		// 不管是哪一種獲取類類的方法都是可以的
		// Class c1 = Class.forName("com.tgq.reflect.Student");
		// Student student = new Student();
		// Class c1 = student.getClass();
		Class c1 = Student.class;
		/*
		 * 1、調(diào)用一個(gè)無參構(gòu)造器反射實(shí)例化: 如果沒有無參構(gòu)造器是會(huì)報(bào)錯(cuò)的
		 */
		Student stu1 = (Student) c1.newInstance();
		System.out.println(stu1);

		/*
		 * 調(diào)用有參構(gòu)造器必須要實(shí)例化構(gòu)造器對象 2、調(diào)用一個(gè)有一個(gè)參數(shù)的構(gòu)造器:getConstructor == 獲取構(gòu)造器對象
		 * 
		 * parameterTypes:代表了參數(shù)的類別Class
		 */
		Constructor con1 = c1.getConstructor(String.class);
		Student stu2 = (Student) con1.newInstance("s1");
		System.out.println(stu2);

		

	}
}

輸出結(jié)果:

java反射調(diào)用方法,java,開發(fā)語言,jvm,eclipse,java-ee

3、調(diào)用一個(gè)公有的兩個(gè)參構(gòu)造方法

public class Demo_02 {
	@SuppressWarnings("rawtypes")
	public static void main(String[] args) throws Exception {
		// 一切反射從類類開始
		// 不管是哪一種獲取類類的方法都是可以的
		// Class c1 = Class.forName("com.tgq.reflect.Student");
		// Student student = new Student();
		// Class c1 = student.getClass();
		Class c1 = Student.class;
		/*
		 * 1、調(diào)用一個(gè)無參構(gòu)造器反射實(shí)例化: 如果沒有無參構(gòu)造器是會(huì)報(bào)錯(cuò)的
		 */
		Student stu1 = (Student) c1.newInstance();
		System.out.println(stu1);

		/*
		 * 調(diào)用有參構(gòu)造器必須要實(shí)例化構(gòu)造器對象 2、調(diào)用一個(gè)有一個(gè)參數(shù)的構(gòu)造器:getConstructor == 獲取構(gòu)造器對象
		 * 
		 * parameterTypes:代表了參數(shù)的類別Class
		 */
		Constructor con1 = c1.getConstructor(String.class);
		Student stu2 = (Student) con1.newInstance("s1");
		System.out.println(stu2);

		/*
		 * 3、調(diào)用兩個(gè)參數(shù)的構(gòu)造器實(shí)例化
		 */
		Constructor con2 = c1.getConstructor(String.class, String.class);
		Student stu3 = (Student) con2.newInstance("s1", "sb");
		System.out.println(stu3);

	}
}

輸出結(jié)果:

java反射調(diào)用方法,java,開發(fā)語言,jvm,eclipse,java-ee

4、調(diào)用一個(gè)私有的一個(gè)參構(gòu)造方法

public class Demo_02 {
	@SuppressWarnings("rawtypes")
	public static void main(String[] args) throws Exception {
		// 一切反射從類類開始
		// 不管是哪一種獲取類類的方法都是可以的
		// Class c1 = Class.forName("com.tgq.reflect.Student");
		// Student student = new Student();
		// Class c1 = student.getClass();
		Class c1 = Student.class;
		/*
		 * 1、調(diào)用一個(gè)無參構(gòu)造器反射實(shí)例化: 如果沒有無參構(gòu)造器是會(huì)報(bào)錯(cuò)的
		 */
		Student stu1 = (Student) c1.newInstance();
		System.out.println(stu1);

		/*
		 * 調(diào)用有參構(gòu)造器必須要實(shí)例化構(gòu)造器對象 2、調(diào)用一個(gè)有一個(gè)參數(shù)的構(gòu)造器:getConstructor == 獲取構(gòu)造器對象
		 * 
		 * parameterTypes:代表了參數(shù)的類別Class
		 */
		Constructor con1 = c1.getConstructor(String.class);
		Student stu2 = (Student) con1.newInstance("s1");
		System.out.println(stu2);

		/*
		 * 3、調(diào)用兩個(gè)參數(shù)的構(gòu)造器實(shí)例化
		 */
		Constructor con2 = c1.getConstructor(String.class, String.class);
		Student stu3 = (Student) con2.newInstance("s1", "sb");
		System.out.println(stu3);

		/*
		 * 4、調(diào)用一個(gè)私有的帶一個(gè)參數(shù)的構(gòu)造器實(shí)例化: getConstructor只能獲取公有的構(gòu)造器對象
		 *
		 * getDeclaredConstructor:獲取私有的構(gòu)造器對象
		 */
		Constructor con3 = c1.getDeclaredConstructor(Integer.class);
		// 打開私有的訪問權(quán)限
		con3.setAccessible(true);
		Student stu4 = (Student) con3.newInstance(1);
		System.out.println(stu4);

	}
}

輸出結(jié)果:

java反射調(diào)用方法,java,開發(fā)語言,jvm,eclipse,java-ee

四、反射:方法調(diào)用

1、公有無參

public class Demo_03 {
	public static void main(String[] args) throws Exception {
		Class c = Student.class;
		// 1、反射調(diào)用 無參方法
		Student s = (Student) c.newInstance();
		// 反射調(diào)用無參方法,先獲取到方法對象
		// name:方法名
		// parameterTypes:調(diào)用這個(gè)方法要傳的參數(shù)類型
		Method m1 = c.getMethod("hello");
		// invoke:方法的返回值
		// obj:類示例
		// args:參數(shù)值
		Object invoke = m1.invoke(s);
		System.out.println(invoke);

		
	}
}

輸出結(jié)果:

java反射調(diào)用方法,java,開發(fā)語言,jvm,eclipse,java-ee

2、公有有參

public class Demo_03 {
	public static void main(String[] args) throws Exception {
		Class c = Student.class;
		// 1、反射調(diào)用 無參方法
		Student s = (Student) c.newInstance();
		// 反射調(diào)用無參方法,先獲取到方法對象
		// name:方法名
		// parameterTypes:調(diào)用這個(gè)方法要傳的參數(shù)類型
		Method m1 = c.getMethod("hello");
		// invoke:方法的返回值
		// obj:類示例
		// args:參數(shù)值
		Object invoke = m1.invoke(s);
		System.out.println(invoke);

		// 2、調(diào)用有參方法
		Method m2 = c.getMethod("hello", String.class);
		Object invoke2 = m2.invoke(s, "asdfghjk");
		System.out.println(invoke2);

	}
}

輸出結(jié)果:

java反射調(diào)用方法,java,開發(fā)語言,jvm,eclipse,java-ee

3、私有有參

public class Demo_03 {
	public static void main(String[] args) throws Exception {
		Class c = Student.class;
		// 1、反射調(diào)用 無參方法
		Student s = (Student) c.newInstance();
		// 反射調(diào)用無參方法,先獲取到方法對象
		// name:方法名
		// parameterTypes:調(diào)用這個(gè)方法要傳的參數(shù)類型
		Method m1 = c.getMethod("hello");
		// invoke:方法的返回值
		// obj:類示例
		// args:參數(shù)值
		Object invoke = m1.invoke(s);
		System.out.println(invoke);

		// 2、調(diào)用有參方法
		Method m2 = c.getMethod("hello", String.class);
		Object invoke2 = m2.invoke(s, "asdfghjk");
		System.out.println(invoke2);


		// 3、調(diào)用有參私有的方法
		Method m3 = c.getDeclaredMethod("add", Integer.class, Integer.class);
		// 打開私有權(quán)限
		m3.setAccessible(true);
		Object invoke3 = m3.invoke(s, 1, 2);
		System.out.println(invoke3);
	}
}

輸出結(jié)果:

java反射調(diào)用方法,java,開發(fā)語言,jvm,eclipse,java-ee

完整代碼:

package com.tgq.reflect;

import java.lang.reflect.Method;

/**
 * 反射動(dòng)態(tài)方法的調(diào)用
 * 
 * @author tgq
 *
 */
public class Demo_03 {
	public static void main(String[] args) throws Exception {
		Class c = Student.class;
		// 1、反射調(diào)用 無參方法
		Student s = (Student) c.newInstance();
		// 反射調(diào)用無參方法,先獲取到方法對象
		// name:方法名
		// parameterTypes:調(diào)用這個(gè)方法要傳的參數(shù)類型
		Method m1 = c.getMethod("hello");
		// invoke:方法的返回值
		// obj:類示例
		// args:參數(shù)值
		Object invoke = m1.invoke(s);
		System.out.println(invoke);

		// 2、調(diào)用有參方法
		Method m2 = c.getMethod("hello", String.class);
		Object invoke2 = m2.invoke(s, "asdfghjk");
		System.out.println(invoke2);


		// 3、調(diào)用有參私有的方法
		Method m3 = c.getDeclaredMethod("add", Integer.class, Integer.class);
		// 打開私有權(quán)限
		m3.setAccessible(true);
		Object invoke3 = m3.invoke(s, 1, 2);
		System.out.println(invoke3);
	}
}

五、反射:讀寫屬性

通過Field類的get()set()方法來實(shí)現(xiàn)。

拿到我們所有的屬性:


public class Demo_04 {
	public static void main(String[] args) throws Exception {
		Class c = Student.class;

		Student stu = new Student("1", "1A");
		// 我們把a(bǔ)ge設(shè)置一個(gè)值
		stu.age = 18;
		// System.out.println(stu.getSid());
		
		// 獲取對象中全部的屬性
		Field[] fields = c.getDeclaredFields();
		// 遍歷
		for (Field f : fields) {
			// 因?yàn)閟id、sname是私有的,所以我們要打開私有權(quán)限
			f.setAccessible(true);
			// 獲取所有屬性
			System.out.println(f.getName() + ":" + f.get(stu));
		}

	}
}

輸出結(jié)果:

java反射調(diào)用方法,java,開發(fā)語言,jvm,eclipse,java-ee

我們進(jìn)行設(shè)置屬性值:


public class Demo_04 {
	public static void main(String[] args) throws Exception {
		Class c = Student.class;

		Student stu = new Student("1", "1A");
		// 我們把a(bǔ)ge設(shè)置一個(gè)值
		stu.age = 18;
		// System.out.println(stu.getSid());

		// 拿到屬性
		Field snamefield = c.getDeclaredField("sname");
		// 打開權(quán)限
		snamefield.setAccessible(true);
		// 進(jìn)行設(shè)置
		snamefield.set(stu, "2B");
		
		// 獲取對象中全部的屬性
		Field[] fields = c.getDeclaredFields();
		// 遍歷
		for (Field f : fields) {
			// 因?yàn)閟id、sname是私有的,所以我們要打開私有權(quán)限
			f.setAccessible(true);
			// 獲取所有屬性
			System.out.println(f.getName() + ":" + f.get(stu));
		}

	}
}

輸出結(jié)果:

java反射調(diào)用方法,java,開發(fā)語言,jvm,eclipse,java-ee

完整代碼:

package com.tgq.reflect;

import java.lang.reflect.Field;

/**
 * 反射:讀寫屬性
 * 
 * @author tgq
 *
 */
public class Demo_04 {
	public static void main(String[] args) throws Exception {
		Class c = Student.class;

		Student stu = new Student("1", "1A");
		// 我們把a(bǔ)ge設(shè)置一個(gè)值
		stu.age = 18;
		// System.out.println(stu.getSid());

		// 拿到屬性
		Field snamefield = c.getDeclaredField("sname");
		// 打開權(quán)限
		snamefield.setAccessible(true);
		// 進(jìn)行設(shè)置
		snamefield.set(stu, "2B");

		// 獲取對象中全部的屬性
		Field[] fields = c.getDeclaredFields();
		// 遍歷
		for (Field f : fields) {
			// 因?yàn)閟id、sname是私有的,所以我們要打開私有權(quán)限
			f.setAccessible(true);
			// 獲取所有屬性
			System.out.println(f.getName() + ":" + f.get(stu));
		}

	}
}

到了這里,關(guān)于Java重點(diǎn):反射機(jī)制的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • java反射的基本使用方法

    當(dāng)我們使用 Java 開發(fā)時(shí),有時(shí)需要獲取某個(gè)類的信息,例如類的屬性、方法和構(gòu)造函數(shù)等,然后在程序運(yùn)行期間動(dòng)態(tài)地操作它們。Java 反射就是用來實(shí)現(xiàn)這個(gè)目的的一種機(jī)制。 Java 反射(Reflection)是 Java 編程語言在運(yùn)行時(shí)動(dòng)態(tài)獲取類的信息以及動(dòng)態(tài)調(diào)用對象方法的能力。它可

    2024年02月16日
    瀏覽(25)
  • Java筆記040-反射/反射機(jī)制、Class類

    Java筆記040-反射/反射機(jī)制、Class類

    目錄 反射(reflection) 一個(gè)需求引出反射 反射機(jī)制 Java反射機(jī)制原理圖 Java反射機(jī)制可以完成 反射相關(guān)的主要類 反射機(jī)制的優(yōu)點(diǎn)和缺點(diǎn) 反射調(diào)用優(yōu)化-關(guān)閉訪問檢查 Class類 基本介紹 代碼解釋部分 類加載方法 應(yīng)用實(shí)例:Class02.java 獲取Class類對象 代碼解釋部分 哪些類型有Class對象

    2024年02月09日
    瀏覽(20)
  • Java安全基礎(chǔ)之Java反射機(jī)制和ClassLoader類加載機(jī)制

    Java安全基礎(chǔ)之Java反射機(jī)制和ClassLoader類加載機(jī)制

    目錄 Java 反射機(jī)制 反射 java.lang.Runtime ClassLoader 類加載機(jī)制 URLClassLoader loadClass() 與 Class.forName() 的區(qū)別? Java 反射(Reflection)是 Java 非常重要的動(dòng)態(tài)特性。在運(yùn)行狀態(tài)中,通過 Java 的反射機(jī)制,我們能夠判斷一個(gè)對象所屬的類。了解任意一個(gè)類的所有屬性和方法。能夠調(diào)用任

    2024年04月22日
    瀏覽(41)
  • Java反射、代理機(jī)制

    官方解釋:反射允許對封裝類的字段、方法和構(gòu)造方法的信息進(jìn)行編程訪問。 虛擬機(jī)加載類文件后,會(huì)在方法區(qū)生成一個(gè)類對象,包含了類的結(jié)構(gòu)信息,如字段、方法、構(gòu)造方法等。反射是一種能夠在程序運(yùn)行時(shí)動(dòng)態(tài)訪問、修改類對象中任意屬性的機(jī)制(包括private屬性)。

    2024年02月10日
    瀏覽(17)
  • Java的反射機(jī)制

    Java 的反射機(jī)制允許在程序運(yùn)行期間,借助反射 API 獲取類的內(nèi)部信息,并能直接操作對象的內(nèi)部屬性及方法。 Java 反射機(jī)制提供的功能: 在運(yùn)行時(shí),使用反射分析類的能力,獲取有關(guān)類的一切信息(類所在的包、類實(shí)現(xiàn)的接口、標(biāo)注的注解、類的數(shù)據(jù)域、類的構(gòu)造器、類的

    2024年02月02日
    瀏覽(22)
  • Java的反射機(jī)制(2)

    目錄 Class類基本介紹 Class類的常用方法 如何獲取class類對象 哪些類型有Class對象 Class類基本介紹 在Java語言中,每個(gè)對象都有一個(gè)運(yùn)行時(shí)類,即其所屬的類。而這個(gè)運(yùn)行時(shí)類在Java中是以Class類的實(shí)例形式存在的,該Class類實(shí)例就是所謂的Class對象。Class類表示一個(gè)類或接口的元

    2024年02月08日
    瀏覽(20)
  • Java反射機(jī)制深入詳解

    一.概念 反射就是把Java的各種成分映射成相應(yīng)的Java類。 Class類的構(gòu)造方法是private,由JVM創(chuàng)建。 反射是java語言的一個(gè)特性,它允程序在運(yùn)行時(shí)(注意不是編譯的時(shí)候)來進(jìn)行自我檢查并且對內(nèi)部的成員進(jìn)行操作。例如它允許一個(gè)java的類獲取他所有的成員變量和方法并且顯示

    2024年02月06日
    瀏覽(40)
  • Java反射機(jī)制是什么?

    Java反射機(jī)制是什么?

    Java 反射機(jī)制 是 Java 語言的一個(gè)重要特性。 在學(xué)習(xí) Java 反射機(jī)制前,大家應(yīng)該先了解兩個(gè)概念,編譯期和運(yùn)行期。 編譯期 是指把源碼交給編譯器編譯成計(jì)算機(jī)可以執(zhí)行的文件的過程。在 Java 中也就是把 Java 代碼編成 class 文件的過程。編譯期只是做了一些翻譯功能,并沒有把

    2024年02月12日
    瀏覽(11)
  • 【JavaSE】Java的反射機(jī)制

    1.java反射機(jī)制 1.1簡介 被視為動(dòng)態(tài)語言的關(guān)鍵,允許程序在執(zhí)行期間,借助于RefectionAPI取得任何類的內(nèi)部信息。在程序的運(yùn)行狀態(tài)中,可以構(gòu)造任意一個(gè)類的對象,可以了解任意一個(gè)類對象所屬的類,可以了解任意一個(gè)類的成員變量和方法,可以調(diào)用任意一個(gè)對象的屬性和方

    2024年04月26日
    瀏覽(19)
  • Java學(xué)習(xí)路線(23)——反射機(jī)制

    一、概述 (一)什么是反射: 反射指的是任何一個(gè)Class類,在“運(yùn)行時(shí)”都可以直接得到全部成分。 (二)動(dòng)態(tài)可獲取的對象: 構(gòu)造器對象——Constructor,成員變量對象——Field,成員方法對象——Method。 (三)反射關(guān)鍵: 第一步都是得到編譯后的Class對象,然后可以獲得

    2024年02月08日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包