Annoation
内置注解:
(1)@Override:此注解用于修饰方法,表示一个方法明打算重写超类中的方法。
(2)@Deprecated:此注解可以修饰方法、属性、类,表示不鼓励程序员使用这样的元素,通常因为它很危险或存在更好的选择。
(3)@SuppressWarnings:用来抑制编译时的警告信息(需要添加一个参数才能正确使用)。
元注解:负责注解其它注解
@target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)。
@Retention:表示需要在什么级别保存该注解信息。
反射(reflection):Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
public class Hello { public static void main(String[] args) { try { Class clazz = Class.forName("com.user"); //获取类的名字 System.out.println(clazz.getName());//获取保命+类名(类的全路径) System.out.println(clazz.getSimpleName());//获取类名 //获取属性信息 //Field[] fields = clazz.getFields();//只能获取public的field Field[] fields = clazz.getDeclaredFields();//获取所有的field Field field = clazz.getDeclaredField("name"); //获取方法信息 //如果方法有参数,则必须传递参数类型对应的class对象 Method methods = clazz.getDeclaredMethod("name", String.class); //获取构造器信息 //无参构造器 Constructor constructor = clazz.getDeclaredConstructor(); //有参数构造器 Constructor constructor1 = clazz.getDeclaredConstructor(String.class); //获取注解 Annotation annotation = clazz.getDeclaredAnnotation(Constructor.class); } catch (Exception e) { e.printStackTrace(); } } }
public class Hello { public static void main(String[] args) { try { Class clazz = Class.forName("com.user"); //通过反射,构造对象 Object object = clazz.newInstance(); //通过有参构造方法构造对象 Constructor c = clazz.getConstructor(String.class); Object object1 = c.newInstance("name"); //通过反射API调用普通方法 Method method = clazz.getDeclaredMethod("setUsername", String.class); method.invoke("name"); //通过反射API操作属性 Field f = clazz.getDeclaredField("username"); //私有属性必须设置该值才能被访问 f.setAccessible(true); f.set(object, "name"); } catch (Exception e) { e.printStackTrace(); } }