`

40、反射

阅读更多

一、反射

 

  1. 反射就是把java类中的各种成分映射成相应的java类。
  2. 例如,一个java类中用一个Class类的对象来表示一个类中的组成部分:成员变量,方法,构造函数,包 等信息也用一个个的java类来表示,
  3. 就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。
  4. 表示java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,
  5. 这些信息就是用相应类的实例对象来表示,他们是Field,Method,Constructor,Package等等
  6. 一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,
  7. 通过调用Class类的方法可以得到这些实例对象,
  8. 得到这些实例对象后有什么用呢?怎么用呢?这就是学习和应用反射的要点

二、数组的反射

 

  1. 具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象
  2. 代表数组的Class实例对象的getSuperclass()方法返回的父类Object类对应的Class
  3. 基本类型的一维数组可以被当做Objec类型使用,不能当做Object[]类型使用,
  4. 非基本类型的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用
  5. Arrays.asList()方法处理int[] 和 String[] 时的差异
import java.util.Arrays;

public class ReflectDemo {
	public static void main(String[] args) throws Exception
	{
		int[] a1 = new int[3];
		int[] a2 = new int[4];
		int[][] a3 = new int[2][3];
		String[] a4 = new String[4];
		
		System.out.println(a1.getClass().getName());//[I
		System.out.println(a2.getClass().getName());//[I
		System.out.println(a3.getClass().getName());//[[I
		System.out.println(a4.getClass().getName());//[Ljava.lang.String;
		
		a1 = new int[]{1,2,3};
		a4 = new String[]{"abc","def","ghi"};
		
		System.out.println(Arrays.asList(a1));//[[I@1fb8ee3]
		System.out.println(Arrays.asList(a4));//[abc, def, ghi]                  
	}
}

 

三、数组反射的应用----Array类

 

 

  1. java.lang.reflect.Array 类提供了动态创建和访问 Java 数组的方法。 
  2. Array 允许在执行 get 或 set 操作期间进行扩展转换,
  3. 但如果发生收缩转换,则抛出 IllegalArgumentException

 

 

public final class Array
{
	//没有构造方法,并且方法全是静态的

	//返回指定数组对象中索引组件的值。如果该值是一个基本类型值,则自动将其包装在一个对象中
	public static Object get(Object array,
                         int index)
                  throws IllegalArgumentException,
                         ArrayIndexOutOfBoundsException{}

	//以 boolean 形式返回指定数组对象中索引组件的值。
	public static boolean getBoolean(Object array,
                                 int index)
                          throws IllegalArgumentException,
                                 ArrayIndexOutOfBoundsException{}

	getByte  getShort  getInt  getLong  getChar  getFloat getDouble

	//创建一个具有指定的组件类型和维度的新数组
	public static Object newInstance(Class<?> componentType,
                                 int... dimensions)
                          throws IllegalArgumentException,
                                 NegativeArraySizeException{}
	public static Object newInstance(Class<?> componentType,
                                 int length)
                          throws NegativeArraySizeException{}

	//将指定数组对象中索引组件的值设置为指定的新值。
	public static void set(Object array,
                       int index,
                       Object value)
                throws IllegalArgumentException,
                       ArrayIndexOutOfBoundsException{}

	//将指定数组对象中索引组件的值设置为指定的 byte 值
	public static void setByte(Object array,
                           int index,
                           byte b)
                    throws IllegalArgumentException,
                           ArrayIndexOutOfBoundsException{}

	setChar setShort setInt setLong setFloat setDouble

	//以 int 形式返回指定数组对象的长度。 
	public static int getLength(Object array)
                     throws IllegalArgumentException{}
}

 

 

四、示例

 

 

import java.lang.reflect.Array;
//遍历任意数组
public class ReflectDemo {
	public static void main(String[] args)
	{
		int[] arr = {1,5,3,8,9};
		String[] str = {"abcd","45dd","sdf"};
		print(arr);
		print(str);
	}

	private static void print(Object obj) {
		Class clazz = obj.getClass();
		if(clazz.isArray())
		{
			for(int x=0;x<Array.getLength(obj);x++)
				System.out.println(Array.get(obj, x));
		}
		else
		{
			System.out.println(obj);
		}
	}
}

 

 

分享到:
评论

相关推荐

    详解C# 利用反射根据类名创建类的实例对象

    Assembly assembly = Assembly.LoadFile&#40;程序集路径,不能是相对路径&#41;; // 加载程序集(EXE 或 DLL) dynamic obj = assembly.CreateInstance(类的完全限定名(即包括命名空间)); // 创建类的实例 2、若要...

    一种高性能单反射面柱形紧缩场微波暗室

    通过上述综合优化设计,最终实现了柱形单反射面紧缩场暗室在800MHz~40GHz的宽频带范围内,使用较小的反射面和合理的暗室布局达到较大测试静区的目标。这种新型紧缩场不仅能满足大尺寸天线的测量需求,而且还可以用于...

    液晶屏幕半穿透半反射式原理

    导光板光效率为 100%,但在导光板中损失 40%,通过下偏光片损失 36%,通过液晶盒损失 18%,以及表面反射损失 1%。因此,如何将光效率提高,如何让液晶显示呈现一个明亮鲜艳的图像是液晶显示产业的一个大问题。 在...

    42光的反射.pptx

    对于选择题,如果反射光线与平面镜成40°角,则入射角是90° - 40° = 50°,所以答案是C。同样,如果入射光线靠近法线,反射光线也会靠近法线,因此选项B是正确的。当入射角增大50°时,反射角也会增加50°,所以...

    光的反射练习题1.doc

    6. 入射角减小20°,反射角也相应减小20°,因此反射光辉与入射光辉的夹角减小40°。 7. 迎着月光走,地面的积水会像镜子一样反射月光,看起来明亮,所以地上明亮处是积水。 8. 光线与平面镜成40°角入射,反射光辉...

    一种有效提高紧缩场反射面精度的CAD_CAM技术.pdf

    考虑到紧缩场测试工作频段普遍在40GHz以上,甚至可达100GHz,因此对测试设备的反射面板的型面精度提出了极高的要求。 在当前的研究背景下,国内对反射面板的结构设计和加工进行了大量研究,形成了以“点阵钉模、...

    有效提高紧缩场反射面精度的CADCAM技术.pdf

    由于紧缩场测试通常在较高的频段工作(例如40GHz以上,甚至高达100GHz),因此对反射面的型面精度有着极高的要求。这也就意味着反射面的设计与制造必须达到非常高的精度标准。 #### 2. 反射面的计算机辅助设计 ...

    基于深度学习的雷达反射率外推评价的研究.pdf

    反射率的大小与天气事件的强度成正比,当雷达反射率大于或等于40dbz时,表明出现雷雨天气的可能性较大;反射率在45dbz或以上时,则预示着可能出现暴雨、冰雹和大风等强对流天气。 深度学习在本研究中扮演了核心角色...

    八年级物理光反射应用PPT学习教案.pptx

    如果入射光线与镜面的夹角为40度,那么入射角是40度,反射角也是40度。 3. 光反射作图技巧:在进行光反射作图时,需要准备铅笔、三角板和量角器。作图时,首先要画出法线,然后依据光的反射定律画出反射光线,确保...

    八年级物理上册第3章光和眼睛第2节探究光的反射规律第1课时光的反射学案无答案粤教沪版.doc

    2. 若入射光线与镜面的夹角是40°,则入射角是90°-40°=50°;如果入射光线与反射光线的夹角是120°,则反射角是120°/2=60°。 3. 绘制光路图,根据入射角和反射角的关系画出入射光线或反射光线,并标注角度。 4. ...

    《光的反射》练习题.docx

    14. 平面镜的调整:第14题中,要使太阳光垂直照射井底,需将平面镜调整到与水平方向成40°+90°=130°角,但由于题目要求填入与水平方向的夹角,所以是180°-130°=50°。 以上就是《光的反射》练习题中涉及到的...

    八年级物理上册 光的反射同步练习 人教新课标版.doc

    - 反射光线与反射面成40°,入射角是50°,反射光线与入射光线的夹角是100°。 - 平行光照射白纸,反射光线方向不同,说明发生漫反射。 - 光在银幕上发生漫反射,确保各处观众都能看到清晰图像。 - 能从不同方向...

    2018_2019学年度八年级物理上册第四章第二节光的反射定律练习新版教科版20180827438

    8. 反射光线与入射光线的夹角为80°,意味着入射角和反射角各为40°,所以入射光线与镜面的夹角为90° - 40° = 50°。 9. 在示例中,给出了不同情况下的入射角和反射角,如甲图中入射角为50°,乙图中入射角为0°...

    八年级物理上册光的反射苏科PPT教案学习.pptx

    - 当入射光线与镜面夹角为50º时,入射角为40º;若光线垂直于镜面,入射角为0º。 - 探究实验表明,无论入射光线如何改变,反射光线始终遵循反射定律。 5. **光路的可逆性**:在光的反射过程中,光路是可逆的,...

    河南省虞城县八年级物理上册 4.2 光的反射学案(无答案)(新版)新人教版.doc

    6. 入射角减小20°,反射角同样减小20°,所以反射光线与入射光线的夹角减小40°。 7. 在雨后天晴的夜晚,迎着月光走时,地面的暗处是积水,因为积水会进行镜面反射,使光线直射眼睛;而背着月光走时,明亮处是积水...

    人教版八年级物理上册八年级物理第四章第二节光的反射课后习题.docx

    若镜面沿顺时针方向旋转20°,则反射光线与入射光线间的夹角为40°。 解析:当光线垂直射向镜面时,入射角为0°,此时反射光线将沿着原路返回,即反射角也为0°。如果镜面沿顺时针方向旋转20°,则新的入射角为20°...

    20210812-申万宏源-长阳科技-688299-反射膜全球龙头,光学基膜产品放量,构筑功能膜平台型企业.pdf

    公司的营业收入和盈利能力持续增长,反射膜业务毛利率从2015年的32%提高至2020年的40%,光学基膜业务在2019年实现扭亏,2020年毛利率达20%。 反射膜主要应用于液晶显示领域,尤其是电视、Mini LED背光和高端LED照明...

    江苏专用2021版高考物理一轮复习课后限时集训40光的折射全反射202003020498

    2. 全反射:当光从高折射率的介质向低折射率的介质射出时,如果入射角大于临界角,光将不会发生折射,而是全部反射回高折射率的介质内,这一现象称为全反射。临界角C满足sin C = 1/n,其中n是折射率。 3. 折射率与...

    java反射性能测试分析.pdf

    在设置和获取属性方面,BeanUtils的`setProperty()`和`getProperty()`方法分别耗时40毫秒和47毫秒,Java反射API的对应操作耗时为0毫秒,而手动调用setter和getter方法则耗时分别为203毫秒和235毫秒。 这些数据表明...

Global site tag (gtag.js) - Google Analytics