Java之反射、枚举、内省、注解

Java枚举类的使用与注解 一、枚举类的使用: 1.枚举类的理解:类的对象只有有限个,确定的。我们称此为枚举类 2.当需要定义一组常量时,强烈建议使用枚举类。 3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。 二、如何定义枚举类 方式一:Jdk5.0之前,自定义枚举类 方式二:jdk5.0之后,可以使用enum关键字定义枚举类 三、Enum类的主要方法: 四、使用enum关键字定义的枚举类实现接口的情况 栗子一:实现接口,在enum类中实现抽象方法。 栗子二:让枚举类的 对象分别实现接口中的抽象方法。 五、注解(Annotation)概述 二、常见的Annotation 示例: 六、JDK中的元 立即下载



一:反射技术:

         1.概述:其实就是动态加载一个指定的类,并获取该类中的所有的内容。而且将字节码文件封装成对象,                        并将字节码文件中的内容都封装成对象,这样便于操作这些成员。简单说:反射技术可以对一个                        类进行解剖,解剖后的属性、方法都为对象

           2.反射的好处:大大的增强了程序的扩展性。

           3.反射的基本步骤:

                      3.1.获得Class对象,就是获取到指定的名称的字节码文件对象。

                      3.2.实例化对象,获得类的属性、方法或构造函数。

                      3.3.访问属性、调用方法、调用构造函数创建对象。

           4.获取这个Class对象,有三种方式:

                      4.1.通过每个对象都具备的方法getClass来获取。弊端:必须要创建该类对象,才可以调用getClass方法。

                      4.2.每一个数据类型(基本数据类型和引用数据类型)都有一个静态的属性class。弊端:必须要先明确该类。

                      4.3.使用的Class类中的方法,静态的forName方法。

                             指定什么类名,就获取什么类字节码文件对象,这种方式的扩展性最强,只要将类名的字符串传入即可。

                            4.3.1. 根据给定的类名来获得  用于类加载
                                       String classname ="cn.itcast.reflect.Person";// 来自配置文件

                                       Class clazz = Class.forName(classname);// 此对象代表Person.class

                           4.3.2.如果拿到了对象,不知道是什么类型   用于获得对象的类型

                                       Object obj = new Person();

                                       Class clazz1 = obj.getClass();// 获得对象具体的类型

                          4.3.3.如果是明确地获得某个类的Class对象  主要用于传参

                                       Class clazz2 = Person.class;

             5.反射的用法:

                      5.1.需要获得java类的各个组成部分,首先需要获得类的Class对象,获得Class对象的三种方式:

                            Class.forName(classname) 用于做类加载

                            obj.getClass()                      用于获得对象的类型

                            类名.class                        用于获得指定的类型,传参用

                      5.2.反射类的成员方法:

                           Classclazz = Person.class;

                           Methodmethod = clazz.getMethod(methodName, new Class[]{paramClazz1, paramClazz2});

                           method.invoke();     

                     5.3.反射类的构造函数:

                           Constructorcon = clazz.getConstructor(new Class[]{paramClazz1, paramClazz2,...})

                           con.newInstance(params...) 

                    5.4.反射类的属性:

                           Fieldfield = clazz.getField(fieldName);

                           field.setAccessible(true);

                           field.setObject(value);

          6.获取了字节码文件对象后,最终都需要创建指定类的对象:

                    创建对象的两种方式(其实就是对象在进行实例化时的初始化方式):

                    6.1.调用空参数的构造函数:使用了Class类中的newInstance()方法。

                    6.2.调用带参数的构造函数:先要获取指定参数列表的构造函数对象,然后通过该构造函数的对象的                                                                         newInstance(实际参数)进行对象的初始化。

代码示例如下:
1.定义被反射的类:
package com.JavaSE.Reflect;
public class Point {
	public int x;
	private int y;
	public String str1 = "ball";
	public String str2 = "basketball";
	public String str3 = "itcast";
	public static String str4 = "ball";
	public Point(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}	
}

2.反射实例:

package com.JavaSE.Reflect;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Reflect {
	public static void main(String[] args) throws Exception {
		int i = 0;
		Object obj = i;//单独的基本数据类型赋给Object会被自动装箱
		int[] in = new int[2];
		//Object[] object = in;//会报错,因为数组in中存放的是int基本类型数据,而基本数据类型是没有父类的
		                       //因此不能转换为Object
		System.out.println(obj.getClass());//由于基本数据的自动装箱,obj为Integer类型
		Class clazz = int.class;
		System.out.println(clazz.getSuperclass());//基本数据类型的父类为null
		
		// 反射构造方法
		Constructor[] constructors = String.class.getConstructors();
		Constructor<String> constructor = String.class
				.getConstructor(StringBuffer.class);// 通过类的字节码的方法获取一个构造方法的对象
		String str = (String) constructor.newInstance(new StringBuffer("abc"));// 通过该对象实例化该类
		System.out.println(str.charAt(2));

		// 反射属性字段
		Point p1 = new Point(3, 5);
		Field fld1 = p1.getClass().getField("x");// 将x属性属性对象关联起来
		System.out.println(fld1.get(p1));// 要获取属性值,必须通过传递被映射的对象

		Field fld2 = p1.getClass().getDeclaredField("y");// 映射所有申明过的属性(public,<span style="font-family: Arial; ">private,</span><span style="font-family: Arial; ">protected</span><span style="font-family: Arial; ">

</span>		fld2.setAccessible(true);// 通过暴力反射获取私有属性
		System.out.println(fld2.get(p1));

		changeStringValue(p1);// 通过反射修改成员变量的值
		System.out.println(p1.str1 + ":" + p1.str2 + ":" + p1.str3 + ":"+ p1.str4);

		// 成员方法的反射
		String str1 = "abc";
		Method method = str1.getClass().getMethod("charAt", int.class);// 将方法与方法对象关联
		System.out.println(method.invoke(str1, 1));// 根据该方法的对象调用该方法(参数是方法的对象和方法参数),若第一个参                                                            //数为Null则调用的是静态方法
		System.out.println(method.invoke(str1, new Object[] { 2 }));// 将参数自动转化

		// 对main方法进行反射和调用
		String className = args[0];// 假设main方法所在的类名为className
		Method methodMain = Class.forName(className).getMethod("main",
				String[].class);// 将方法和方法对象相关联
		methodMain.invoke(null, (Object) new String[] { "111", "222", "333" });// 由于在Java1.4以后main方法中会将new String                                                                                       //中的数组对象拆开(编译器特殊处理),			                                                                      // 因此就有了三个对象,造成参数不匹配,解决办                                                                                       //法就是在前面加一个(Object)把他看成是一个                                                                                      //对象

		// 对数组的反射
		String[] str2 = new String[] { "444", "555", "666" };
		printObject(str2);
		printObject(new int[] { 1, 2, 3 });

	}
	// 对数组的反射
	private static void printObject(Object obj) {
		Class clazz = obj.getClass();
		if (clazz.isArray()) {
			for (int i = 0; i < Array.getLength(obj); i++) {
				System.out.println(Array.get(obj, i));
			}
		} else {
			System.out.println(obj);
		}
	}

	// 通过反射修改成员变量的值
	private static void changeStringValue(Object p2) throws Exception {
		Field[] fields = p2.getClass().getDeclaredFields();// 获取所有属性
		for (Field field : fields) {
			if (field.getType() == String.class) {// 当属性类型为String时进行修改
				String oldValue = (String) field.get(p2);
				String newValue = oldValue.replace('b', 'a');// 替换字符
				field.set(p2, newValue);// 将替换的字符重新放
			}
		}
	}
}

class TestMain {
	public static void main(String[] args) {
		for (String arg : args) {
			System.out.println(arg);
		}

	}
}


二:枚举:

        1.概述:枚举就是一个特殊的java类,可以定义属性、方法、构造函数、实现接口、继承类,对象的某个属性的值不能是                             任意的,必须为固定的一组取值其中的某一个,因此出现了枚举。

        2.直接来代码最合适:

代码如下:

1.定义枚举
package com.JavaSE.Enum;
//枚举
public enum WeekDayEnum {
	Sun,Mon,Tue,Wen,Thr,Fri,Sat;
}

2.枚举的原理
package com.JavaSE.Enum;
/*
 * 枚举
 * 1.就是一个类,在该类中每一个成员变量都是一个final static变量
 * 2.有一个私有构造函数,只能通过自己的内部的函数来实例化对象,因此只能实例化已经定义好的对象
 * 3.匿名内部类其实就是一个子类,该子类实现父类的方法
 */

//利用类来解释枚举内部原理
public abstract class WeekDayClass {
	private WeekDayClass() {
	}
	public final static WeekDayClass Sun = new WeekDayClass(){//匿名内部类
		@Override
		public WeekDayClass nextDay() {//重写nextDay方法
			return Mon;
		}		
	};
	public final static WeekDayClass Mon = new WeekDayClass(){
		@Override
		public WeekDayClass nextDay() {
			// TODO Auto-generated method stub
			return Tue;
		}	
	};
	public final static WeekDayClass Tue = new WeekDayClass(){

		@Override
		public WeekDayClass nextDay() {
			// TODO Auto-generated method stub
			return Sun;
		}		
	};
	
	public abstract WeekDayClass nextDay();	
//	public WeekDay nextDay(){
//		if(this == Sun){
//			return Mon;
//		}else if(this == Mon){
//			return Tue;
//		}else{
//			return Sun; 
//		}
//	}
	public String toString(){
		if(this == Sun){
			return "Sun";
		}else if(this == Mon){
			return "Mon";
		}else{
			return "Tue"; 
		}
	}
}


3.枚举的加强
package com.JavaSE.Enum;

/*
 * 1.在枚举中可以有构造函数(代参数或则不代参数),变量根据是否带参数来实例化
 * 2.单只有一个变量时则为单例模式
 */
public enum EnumEnhance {
	GREEN(10){
		@Override
		public EnumEnhance next() {
			// TODO Auto-generated method stub
			return RED;
		}		
	},	
	RED{
		@Override
		public EnumEnhance next() {
			// TODO Auto-generated method stub
			return YELLOW;
		}		
	},	
	YELLOW{
		@Override
		public EnumEnhance next() {
			// TODO Auto-generated method stub
			return GREEN;
		}		
	};
	public abstract EnumEnhance next();
	
	private EnumEnhance() {//枚举中的方法必须在变量之后
		System.out.println("first");
	}
	private EnumEnhance(int days){//带有参数的都早函数
		System.out.println("second");
	}
	public static EnumEnhance GREEN(int i) {//静态枚举构造函数,访问时为EnumEnhance.GREEN(10)
		// TODO Auto-generated method stub
		System.out.println("three");
		return null;
	}
}

4.枚举的应用
package com.JavaSE.Enum;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//利用模拟枚举的类实现枚举的功能
//		WeekDayClass weekday1 = WeekDayClass.Sun;
//		WeekDayClass weekday2 = WeekDayClass.Mon;
//		WeekDayClass weekday3 = WeekDayClass.Tue;
//		System.out.println(weekday1.toString());
//		System.out.println(weekday2.toString());
//		System.out.println(weekday3.toString());
//		
//		System.out.println(weekday1.nextDay());
//		System.out.println(weekday2.nextDay());
//		System.out.println(weekday3.nextDay());
		
		
//		//枚举实例
//		WeekDayEnum weekdayEnum = WeekDayEnum.Mon;
//		System.out.println(weekdayEnum);
//		System.out.println(weekdayEnum.name());
//		System.out.println(weekdayEnum.ordinal());
//		System.out.println(weekdayEnum.valueOf("Tue"));
//		System.out.println(weekdayEnum.values().length);
		
	    //枚举加强
		EnumEnhance RED = EnumEnhance.RED;
		System.out.println(RED.next());
		
	}

}


三:内省:即对JavaBean的操作

        1.说明:对象JavaBean的简单内省操作(简单方便:PropertyDescriptor)和复 杂操作(稍微复杂点:IntroSpector)

        2.步奏:

                   2. 1.创建PropertyDescriptor对象

                   2.2.获取JavaBean的方法对象

                   2.3.通过方法对象获取属性值

                   2.4.修改属性值

代码如下:
1.JavaBean:
package com.JavaSE.IntroSpector;

public class Point {
	private int x;
	private int y;
	public Point(){
		
	}
	public Point(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}

}

2.对JavaBean的操作
package com.JavaSE.IntroSpector;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
//对象JavaBean的简单内省操作(简单方便:PropertyDescriptor)和复杂操作(稍微复杂点:IntroSpector)
//通过内省来操纵JavaBean,通过PropertyDescriptor类才操作,调用该类时也是用的反射
public class IntroSpectorTest {
	/**
	 * 1.创建PropertyDescriptor对象
	 * 2.获取JavaBean的方法对象
	 * 3.通过方法对象获取属性值
	 * 4.修改属性值
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		Point p1 = new Point(3,5);//JavaBean  Point
		//获取JavaBean的属性
		Object value = getProperties(p1);
		System.out.println(value);
		
		//设置JavaBean的属性(简单方式:PropertyDescriptor)
		Object y = 7;//所修改属性的值
		setPropertiesEasy(p1, y);
		System.out.println(p1.getY());	
		
		//设置JavaBean的属性(复杂方式:IntroSpector)
		setPropertiesComplex(p1,y);
		System.out.println(p1.getY());	
	}
	private static Object getProperties(Point p1) throws Exception{
		//1.创建PropertyDescriptor对象,通过属性名和类的字节码初始化一个PropertyDescriptor对象
		PropertyDescriptor pd = new PropertyDescriptor("x", p1.getClass());
		//2.获取JavaBean的方法对象,通过属性名获取JavaBean的方法对象(读)
		Method methodX = pd.getReadMethod();
		//3.通过方法对象获取属性值
		Object retVal = methodX.invoke(p1);
		return retVal;
	}
	private static void setPropertiesEasy(Object p1, Object y) throws Exception{//简单方式
		PropertyDescriptor pd = new PropertyDescriptor("y", p1.getClass());//通过属性名和类的字节码初始化一个PropertyDescriptor对象
		Method methodSetY = pd.getWriteMethod();//通过属性名获取JavaBean的方法对象(写)
		methodSetY.invoke(p1, y);//修改属性值
	}
	private static void setPropertiesComplex(Object p1, Object y) throws Exception{//复杂内省操作JavaBean			
		//1.通过Introspector.getBeanInfo()方法获取bean的对象(BeanInfo),传递JavaBean的字节码参数
		BeanInfo beanInfo = Introspector.getBeanInfo(p1.getClass());
		//2.获取到BeanInfo之后获得所有的JavaBean的Properties
		PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
		//3.通过迭代、反射来修改JavaBean的属性
		for(PropertyDescriptor pd : pds){
			if(pd.getName().equals("y")){//匹配属性值
				Method methodSetY = pd.getWriteMethod();
				methodSetY.invoke(p1, 10);
			}
		}
	}
}

四:注解

     1.概述:注解相当于一种标记,没加则等于没有某种标记,以后javac编译器开发工具和其它程序可以用反                      射来了解你的类

                        以及各种元素上有无何种标及,看你有什么标记就去干相应的事,标记可以加在包,类,字段,方法,方法的参数
                        以及局部变量上。

      2.常用三注解:

                        interface Deprecated 
                               用 @Deprecated 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。 
                        interface Override 
                               表示一个方法声明打算重写超类中的另一个方法声明。 
                        interface SuppressWarnings 
                               指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。 

      3.Retention:指示注释类型的注释要保留多久,如果注释类型声明中不存在Retention注释,则保留策率默认为                                                   RetentionPolicy.Class        

      4.注解生命周期:

                       RetentionPolicy.SOURCE: java源文件,即javac编译之后就不存在啦。
                       RetentionPolicy.CLASS: class文件,即编译后还存在字节码中,但不在内存中。
                       RetentionPolicy.RUNTIME:内存中的字节码,即一直保存在内存中。


      5.为注解添加高级属性:

                      数组类型的属性:
                                注解中:int []arrarAttr() default{1,2,3};
                                类中给注解赋值:@注解名(arrayAttr={2,3,4})
                                如果数组属性中只有一个元素,这时候属性值部分可以省略大括号
    
                      枚举类型的属性:


                      注解类型的属性:
示例代码如下:
1.定义一个注解
package com.JavaSE.Annotation;

import java.lang.annotation.ElementType;

@Retention(RetentionPolicy.RUNTIME)//运行时的注解,表明一直与源程序被保存到内存中
@Target({ElementType.METHOD,ElementType.TYPE})//目标,即注解所放的位置为方法和类型前面
public @interface Annotation {//注解中可以放8个类型得的数据
	//属性
	String str() default "defaultString";
	String value() ;
	int data() default 1;
	int[] array() default{1,2,3};
	MetaAnnotation annotation() default @MetaAnnotation("注解属性");
	Lamp Enum() default Lamp.GREEN; 
	
}

2.测试注解
package com.JavaSE.Annotation;
@Annotation(value="123")
public class AnnotationTest {
    @Annotation(value="123")
	public static void main(String[] args) {
    	if(AnnotationTest.class.isAnnotationPresent(Annotation.class)){//判断当前类是否加了注解
    		Annotation annotation = AnnotationTest.class.getAnnotation(Annotation.class);//通过反射得到注解
    		//打印一些注解的信息
    		System.out.println(annotation.data());
    		System.out.println(annotation.value());
    		System.out.println(annotation.str());
    		System.out.println(annotation.annotation());
    		System.out.println(annotation.annotationType());
    		System.out.println(annotation.array().length);
    		System.out.println(annotation.Enum());
    	}
    	
    }

}
3.定义一个枚举
package com.JavaSE.Annotation;

public enum Lamp {
	RED,GREEN,YELLOW;

}
4.定义一个注解
package com.JavaSE.Annotation;

public @interface MetaAnnotation {
	String value();
}

总结:
        通过反射可以理解Java虚拟机是怎样操作字节码的,由于字节码在Java虚拟机的唯一性,进而更方便的可以拿到自己想要的对象,在struts框架和Hibernate框架中可以体现出反射的作用。
        枚举可以让一个类的实例固定化,从而对比现实生活中一些固定的事物,如交通灯。
        内省可以自由操控实体Bean的属性,可以再Hibernate中得以体现。
        注解也是在Hibernate中体现的,由于注解原理的实现很像一个类,因此可以简化Hibernate的操作。




RK平台PCIE-Ethernet扩展:Intel I210移植与性能飞升之路 本文详细介绍了Intel I210千兆以太网控制器在瑞芯微RK平台的移植与优化过程。通过硬件适配、内核配置、驱动开发及性能调优四个关键环节,实现了RK平台的网络性能提升。硬件方面,重点说明了PCIE接口的规范连接与供电检查;软件方面,系统阐述了内核配置、设备树修改和驱动编译流程。在性能优化环节,详细介绍了中断优化、缓冲区设置和TCP/IP协议栈调优策略,并采用Iperf和Netperf工具进行量化测试验证。测试结果显示,优化后的网络吞吐量提升20%以上,延迟降低40%,为工业控制、智能安防等场景提供了可靠的 阅读详情

相关推荐

深入解析SPLL单相软件锁相环:从SOGI原理到PI系数调优实践

本文深入解析SPLL单相软件锁相环技术,从SOGI原理到PI系数调优实践,详细介绍了其在数字电源设计中的应用。通过数学推导和实际调试经验,帮助工程师快速掌握锁相环的核心参数计算和优化方法,提升电网相位追踪的精确度和响应速度。

weixin_30316097的博客 381

Java 基础系列(八) --- 反射和枚举

反射和枚举一:反射1 概念2 在什么时候会用到反射机制?3 反射相关类3.1 Class类及获得Class对象的三种方式3.2 Field类、Constructor类、Method类及反射的使用4 反射的优缺点4.1 优点4.2 缺点二:枚举1 背景意义2 使用2.1 switch语句3 常用方法4 枚举的优缺点5 枚举和反射的关系 一:反射 1 概念  Java的反射机制是在运行时,对于任意一个类都能知道这个类的所有属性和方法;对于任意一个对象都能够调用它的任意方法和属性;特点是可以动态获取信息及动态调用

Fug_Lee的博客 1483

Python实战:逐笔高频因子构建与回测全流程解析

本文详细解析了使用Python构建与回测逐笔高频因子的全流程。从逐笔数据的价值与清洗入手,通过实战代码演示了‘大买成交金额占比’因子的计算逻辑,并重点阐述了因子正交化处理的重要性以剔除风格影响。最后,提供了一个经典的分位数回测框架来验证因子有效性,并分享了数据质量、计算效率与过拟合等核心避坑指南。

grass的博客 391

Java中的反射和枚举

反射枚举以及面试题

weixin_61518137的博客 835

探索niri:让你的Linux桌面布局无拘无束

niri是一款基于Wayland的滚动平铺合成器,采用创新的窗口管理方式。它将窗口排列为向右无限延伸的条目,支持独立显示器布局和动态垂直工作区,确保多任务操作流畅性。核心功能包括概要视图、截图界面、屏幕投射、手势操作、窗口分组等,并支持自定义布局和动画效果。niri具备良好的稳定性,兼容xwayland-satellite工具,灵感来自PaperWM但突破了GNOME限制。该项目为追求高效桌面管理的用户提供了全新解决方案,欢迎加入社区交流体验。

weixin_44626085的博客 1816

Gitlab+Jenkins+Docker+Harbor+K8s+Rancher集群搭建CICD平台

本文以诺依项目为例详细记录了Kubernetes集群的部署过程以及配套DevOps环境的搭建。主要内容包括:1) 配置8个节点的软硬件环境;2) 基础环境准备(网络、防火墙、Docker等);3) 三节点Kubernetes集群部署;4) GitLab代码仓库安装;5) Harbor私有镜像仓库搭建;6) Jenkins持续集成工具配置;7) 基于若依项目的CI/CD实践;8) Rancher集群管理工具部署。

hickman2023的博客 1201

反射&枚举

反射,枚举

Krive~Irving 1543

Spring Framework 7.002.Spring IoC 容器与 Bean 简介(Introduction to the Spring IoC Container and Beans)

摘要:Spring框架的核心技术包括IoC容器和AOP技术。IoC容器通过依赖注入实现控制反转,提供Bean管理和配置功能。ApplicationContext作为BeanFactory的扩展,增加了企业级特性。文档详细介绍了容器配置、Bean定义、依赖注入、作用域等核心概念,以及基于注解的配置方式。AOP框架支持80%的AOP需求,并可集成AspectJ。此外还涵盖环境抽象、容器扩展点等高级特性,为Java企业应用开发提供全面支持。(150字)

无 212

【JAVA数据结构系列】09_枚举+反射

Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法。枚举是在JDK1.5以后引入的。...

1065

手把手教你学Simulink——基于传统电网建模与稳定性分析的场景实例:基于同步发电机的单机无穷大系统建模与稳定性分析

本文详细介绍了使用MATLAB/Simulink进行单机无穷大系统(SMIB)建模与稳定性分析的方法。教程从系统结构设计入手,包含同步发电机、输电线路、无穷大母线等核心模块的建模步骤和参数配置示例。重点讲解了七个关键步骤:项目创建、模块配置、控制系统集成、负载添加(可选)以及仿真运行与结果分析,并提供了具体的MATLAB代码示例。最后通过性能评估指标(功角差、电压跌落、频率偏差)分析系统稳定性,为电力系统动态特性研究提供了实用指导,强调准确参数设置对仿真结果的重要性。

MHD0815的博客 298

足式机器人全身 MPPI: 利用 MPPI 对足式机器人进行实时全身控制

本研究首次在真实四足机器人上成功部署了基于全身采样的模型预测控制(MPC)系统。采用模型预测路径积分(MPPI)算法,通过并行采样和评估控制轨迹实现实时运动规划。该系统能处理复杂接触场景,完成推箱子、爬越障碍及崎岖地形行走等任务。实验使用Unitree Go1机器人,结合MuJoCo仿真器快速生成运动策略,仅需简单控制策略即可实现稳健操作。硬件验证表明,该方法能有效完成目标导向的箱子推动任务。该成果标志着采样MPC在足式机器人实际应用中的重要突破。

2506_90492529的博客 999

Java工作笔记-枚举类型反射

这里枚举类型有自己的反射方式: 这里我先总结下逻辑: 1. 通过getEnumConstatnts返回目前枚举中存在的对象。 2. 通过getMehod获取方法。 3. 最后用这个对象调用其方法。 程序运行截图如下: 其中对应的枚举: 源码如下: Em.java package en; public enum Em { ONE_EM(10001, "O...

IT1995的博客 6602

SAP Joule Studio 全景解析

摘要:SAP Joule Studio是SAP Build平台中的低代码/专业级复合工作台,用于构建和管理企业专属的Joule智能体与技能。它支持通过拖拽和声明式编排实现跨系统任务自动化,与SAP及第三方系统集成。核心构件包括Agent(智能体)、Skill(技能)、Action(动作)和Project(项目)。Joule Studio强调企业级落地,与SAP Build Process Automation等工具协同,实现从设计到运行的全生命周期管理。典型应用场景包括供应链补货、财务关账和人力服务台自动化

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 391

枚举、注解、反射、内省(Java)

枚举 简介: JDK1.5引入了新的类型——枚举。 在JDK1.5 之前,我们定义常量都是: public static fianl… 。很难管理。 枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 用于定义有限数量的一组同类常量,例如: 错误级别: 低、中、高、急 一年的四季: 春、夏、秋、冬 商品的类型: 美妆、手机、电脑、男装、女装… 在枚举类型中定义的常量是该枚举类型的实例。 枚举的定义 权限修饰符 enum 枚举名称

qq_48783543的博客 200

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java从入门到实战总结-3.8、Java枚举、注解、反射、内省

Java从入门到实战总结-3.8、Java枚举、注解、反射、内省 文章目录Java从入门到实战总结-3.8、Java枚举、注解、反射、内省1. 枚举(1). 枚举概述(2). 定义格式(3). 枚举类的主要方法(4). 实现接口的枚举类(5). 枚举注意事项2. 注解(1). 简介(2). 重点(3). 内置注解(4). 元注解(5). 自定义注解3. 反射(1). 概述(2). 类加载器(3). 所有类型的Class对象(4). 得到Class的几种方式(5). 获取Constructor(6). 获取

逍遥游的博客 247

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

肥桃的Java学习记录20:枚举&注解&反射&内省

枚举&注解&反射&内省 在框架中会有应用,目前阶段只要求了解。 1、枚举 1.1、简介 JDK1.5引入了新的类型——枚举。 在JDK1.5 之前,我们定义常量都是: public static fianl… 。很难管理。 枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 用于定义有限数量的一组同类常量,例如: 错误级别: 低、中、高、急 一年的四季: 春、夏、秋、冬 商品的类型: 美妆、手机、电脑、男装、女装… 在枚举类型中定义的常量是该枚举类型的实例。

Archimontao的博客 200

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java枚举注解反射和内省

1、枚举 1.1 简介 JDK1.5引入了新的类型——枚举。 在JDK1.5 之前,我们定义常量都是: public static final.... 。很难管理。 枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 用于定义有限数量的一组同类常量。 例如: 错误级别: 低、中、高、急 一年的四季: 春、夏、秋、冬 商品的类型: 美妆、手机、电脑、男装、女装... 在枚举类型中定义的常量是该枚举类型的实例。 1.2 定义格式

哈哈哈哈哈哈哈哈的博客 399

Java枚举&注解&反射&内省(知识点整理)

文章目录枚举枚举类的主要方法实现接口的枚举类注解学习的重点内置注解元注解自定义注解反射类加载器加载配置文件所有类型的Class对象得到Class的几种方式获取Constructor通过class对象获取一个类的构造方法Constructor创建对象获取Method通过class对象获取一个类的方法Method执行方法获取Field通过class对象获取一个类的属性Field属性的对象类型获取注解信息获取类/属性/方法的全部注解对象根据类型获取类/属性/方法的注解对象内省IntrospectorBeanInf

yang642019851的博客 872

JavaEE笔记——枚举,注解,反射,内省

一.枚举 目录 一.枚举 定义格式: 例子: 枚举类的主要方法 实现接口的枚举类 枚举的注意事项 二.注解 注释与注解 什么是注解 内置注解 元注解 什么是元注解 有哪些元注解 自定义注解 注解结构 定义格式 注意事项 案例 三.反射 什么是反射 类加载器 类加载器的关系图 委派加载 类加载器的使用 所有类型的Class对象 得到Class的几种方式 获取Constructor 获取Method 获取Field 四.内省 什么是内省 内省的逻

qq_36279562的博客 499

详解枚举、注解、反射与内省

枚举、注解、反射与内省 大纲枚举、注解、反射与内省枚举 - Enum简介定义格式枚举类的主要方法实现接口的枚举类注意事项注解 - Annotation简介内置注解元注解简介类别自定义注解01) Annotation 与 RetentionPolicy 与 ElementType02)ElementType (注解的用途类型)03) RetentionPolicy (注解作用域策略)定义格式案例注意事项反射简介类加载器加载配置文件所有类型的Class对象得到Class的几种方式获取 Constructor通

chrismurphy的博客 360

枚举、注解、反射、内省【学习笔记】

枚举、注解、反射的学习笔记

qq_42285526的博客 751

枚举&注解&反射笔记

枚举&注解&反射笔记1.枚举1.1 简介1.2 定义格式1.3、枚举类的主要方法1.4 实现接口的枚举类1.5 注意事项2.注解2.1 简介2.2 内置注解2.3 元注解2.3.1 简介2.3.2 有哪些?2.4、自定义注解2.4.1、注解架构2.4.2 定义格式2.4.3 注意事项2.4.4 案例3.反射3.1 概述3.2 类加载器3.3 所有类型的Class对象3.4、得到Class的几种方式3.5、获取Constructor3.5.1 通过class对象 获取一个类的构造方法3.5.2

Cherish_zxd的博客 358

JAVA核心技术(5) 枚举、注解、反射、内省

一、枚举 1、简介 JDK1.5引入了新的类型——枚举。 在JDK1.5 之前,我们定义常量都是: public static fianl.... 。很难管理。 枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 用于定义有限数量的一组同类常量,例如: 错误级别: 低、中、高、急 一年的四季: 春、夏、秋、冬 商品的类型: 美妆、手机、电脑、男装、女装... 在枚举类型中定义的常量是该枚举类型的实例 2、格式 格式1: public enum L

molkor的博客 350

03 - Java核心类库 — 枚举、注解与反射

目前阶段这块知识点了解即可,但在学习框架非常重要,能更好的理解框架。枚举能更好的管理一组相同的常量,内省是基于反射的基础,按照Java bean的标准延伸出来一套操作的API。 反射和内省,如果不进行框架开发,则很少使用;注解一般使用定义好的,自定义注解用的比较少。 枚举、注解与反射一、枚举1. 简介2. 定义格式2.1 Java1.5版本之前2.2 Java1.5版本之后3. 枚举类的主要方法3.1 归纳3.2 实例4. 实现接口的枚举类实例5. 枚举类的注意事项二、注解1. 简介2. 学习的重点.

weixin_46312449的博客 320

Java的枚举、注解和反射

Java的枚举、注解和反射 一.枚举 1.介绍和格式 JDK1.5引入了新的类型——枚举。 在JDK1.5 之前,我们定义常量都是: public static fianl… 。很难管理。 1.枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 2.Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。 3.Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 “,”来分割。 4.在枚举类型中

weixin_44178431的博客 198

Java笔记23——Java枚举、注解与反射

Java学习——Java枚举、注解与反射 文章目录Java学习——Java枚举、注解与反射一、枚举(1).(2).二、注解(1).(2).三、反射总结 一、枚举 (1). (2). 二、注解 (1). (2). 三、反射 总结 高级面向对象方法(下),( ̄︶ ̄)↗ !!! ...

来自82年的博客 614
上一篇: 正则表达式和Java常用对象
下一篇: Java之泛型和类加载器
AlanHand
博客等级 码龄14年 12粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值