黑马程序员-----反射(第九篇)

本文深入探讨了Java反射机制的基础概念,包括反射类、如何获取类实例、反射技术及其应用场景。通过具体代码示例展示了如何利用反射进行类的加载、创建对象、调用方法和访问属性,并详细阐述了反射在程序扩展性和灵活性方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.反射的基石---Class

1.java程序中的各个java类属于同一类事物,描述这类事物的java类名就是class

Class cls1=字节码1

Class cls2=字节码2

 

2.如何得到各个字节码对应的实例对象(class类型)

类名:class ,例如,System.class

对象.getClass(),例如,new Date(),getClass()

//反射主要用第3

Class.forName(“类名”),例如,Class.forName(“java.util.Data”);

 

3.反射技术

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

 

4、应用场景

        程序能用了,如何使用后期出现的功能类呢?

        常用的作法,会提供一个配置文件,来供以后实现此程序的类来扩展功能。对外提供配置文件,让后期出现的子类直接将类名字配置到配置文件中即可。该应用程序直接读取配置文件中的内容。并查找和给定名称相同的类文件。进行如下操作:

        1)加载这个类。

        2)创建该类的对象。

        3)调用该类中的内容。

       应用程序使用的类不确定时,可以通过提供配置文件,让使用者将具体的子类存储到配置文件中。然后该程序通过反射技术,对指定的类进行内容的获取。

5.反射

反射就是把java类中的各种成分映射成相应的java类。

     好处:反射技术大大提高了程序的扩展性。

package cn.itcast.day1;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
public class ReflectTest {
	private int x;
	private int y;
	//定义public类型,方便访问
	public String str1="abc";
	public String str2="abcd";
	public String str3="abcdefg";
	public ReflectTest(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}
	@Override
	public String toString()
	{
		return str1+"--"+str2+"--"+str3;
	}	
	public static void main(String[] args)throws Exception
	{
		String str1="abc";
		Class cls1=str1.getClass();	
		Class cls2=String.class;
		Class cls3=Class.forName("java.lang.String");
		System.out.println(cls1==cls2);	
		System.out.println(int[].class.isArray());	
		//
		String.class.getConstructor(StringBuffer.class);
		//获取Constructor构造函数,构造方法反射应用
		Constructor constructor1=String.class.getConstructor(StringBuffer.class);
		String str2=(String)constructor1.newInstance(new StringBuffer("abc"));
		System.out.println(str2.charAt(2));
		
		ReflectTest pt1=new ReflectTest(3,5);
		Field fieldY=pt1.getClass().getDeclaredField("y");
		Field fieldX=pt1.getClass().getDeclaredField("x");
 		fieldX.setAccessible(true);//暴力反射
 		//看见拿不到,fieldY代表的类中字节码的变量,不代表某个对象。
		System.out.println(fieldY.get(pt1));
 		System.out.println(fieldX.get(pt1));
		//fieldY不是对象身上的变量,而是类上,要用它的取对象的值
 //		ReflectTest pt2=new ReflectTest();
 		changeStringValue(pt1);
  		System.out.println(pt1);
	}
	//改变一组字符串变量c-->a;
	private static void changeStringValue(Object obj)throws Exception
	{
		//字节码变量数组
		Field[] fields=obj.getClass().getFields();
		for(Field fie:fields)
		{
			//如果获取的字节码变量类型为String
			if(fie.getType()==String.class)
			{
				//get方法获取变量
				String oldValue=(String)fie.get(obj);
				String newValue=oldValue.replace('c', 'a');	 
				fie.set(obj, newValue);
			}
		}
	}
}


 

内容概要:本文档详细介绍了利用Google Earth Engine (GEE) 平台对指定区域(位于中国广东省某地)进行遥感影像处理的一系列操作。首先,定义了研究区边界,并选取了 Landsat 8 卫星2023年8月至10月期间的数据,通过去云处理、归一化等预处理步骤确保数据质量。接着,基于预处理后的影像计算了地表温度(LST)、归一化植被指数(NDVI)、湿度指数(WET)、建筑指数(NDBSI)四个关键指标,并进行了主成分分析(PCA),提取出最重要的信息成分。为了进一步优化结果,还应用了像素二元模型对主成分分析的第一主成分进行了条件规范化处理,生成了最终的环境状态评估指数(RSEI)。最后,利用JRC全球表面水体数据集对水体区域进行了掩膜处理,保证了非水体区域的有效性。所有处理均在GEE平台上完成,并提供了可视化展示及结果导出功能。 适合人群:具备地理信息系统基础知识,对遥感影像处理有一定了解的研究人员或技术人员。 使用场景及目标:① 对特定区域的生态环境状况进行定量评估;② 为城市规划、环境保护等领域提供科学依据;③ 掌握GEE平台下遥感影像处理流程和技术方法。 其他说明:本案例不仅展示了如何使用GEE平台进行遥感影像处理,还涵盖了多种常用遥感指标的计算方法,如LST、NDVI等,对于从事相关领域的科研工作者具有较高的参考价值。此外,文中涉及的代码可以直接在GEE代码编辑器中运行,便于读者实践操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值