Excel不相邻列如何打印在一起-英雄云拓展知识分享
149
2023-10-25
【摘要】 本书摘自《JAVA服务端研发知识图谱》一书中第1章,第11节,由何为、迟文恒 编著。
1.11.1 反射
虽然平时使用反射较少,但是理解反射却非常重要,反射就像粘合剂一样,把 Java 框架和 程序粘合在一起,下面通过代码了解反射的基本能力。
public class JavaReflect{
public long num=123456;
public String name ="xiaoming";
@Override
public String toString(){
return "num="+num+"/name="+name;
}
public void print(){
System.out.println(toString0);
public void set(long num,String name){
this.num=num;
this.name =name;
}
private void privatefun(){
System.out.println("private fun");
}
@SuppressWarnings({"rawtypes","unchecked"})
public static void main(Stringl) args){
try {
Class reClass =JavaReflect.class;
Class reClass2=Class.forName("com.javadevmap.Reflect.JavaReflect");
if(reClass—reClass2){
System.out.println("class is single");
Field[] fields = reClass.getFields();
System.out.println("fields:"+Arrays.asList(fields));
Method[] methods = reClass.getMethods();
System.out.printin("methods:"+Arrays.asList(methods));
Constructor] constructors = reClass.getConstructors();
System.out.println("constructors:"+Arrays.asList(constructors));
Object reObject =reClass.newInstance();
Method method = reClass.getMethod("print");
method.invoke(reObject, null);
method =reClass.getMethod('set",long.class,String.class);
method.invoke(reObject, 234567,"daming");
method = reClass.getMethod("print");
method.invoke(reObject, null);
method =reClass.getDeclaredMethod("privatefun");
method.setAccessible(true);
method.invoke(reObject, null);
} catch(Exception e){
e.printStackTrace(
j
运行结果如下:
class is single
fields:[public long com.javadevmap.Reflect.JavaReflect.num, public java.lang.String
comjavadevmap.Reflect.JavaReflect.name]
methods:[public static void com.javadevmap.Reflect.JavaReflect main(java.lang.String[]), public
javalang String comjavadevmap.ReflectJavaReflecttoString(O, public void comjavadevmap.RefiectJavaReflect printO,
public void
com.javadevmap.Reflect.JavaReflect.set(long.java.lang.String),public final void java.lang.Object. wait() throws java.lang.InterruptedException, public final void java.lang.Object wait(long,int) throws
java.lang.InterruptedException, public final native void java.lang.Object.wait(long) throws
java.lang.InterruptedException, public boolean java.lang,Object.equals(java.lang.Object), public native int java.lang.Object.hashCode(), public final native java.lang.Class java.lang.Object.getClass(, public fnal native void java.lang.Object.notifyO, public final native void java.lang.Object.notifyAllO]
constructors:[public com.javadevmap.Reflect.JavaReflect(O]
num=123456/name=xiaoming
num=234567/name=daming
private fun
从代码中可以看出,反射有两种获取 Class 对象的方式,但是常用的还是第二种方式。这两 种方法生成的 Class 对象是同一个,每个类都有一个 Class 对象,并且唯一。可以通过反射获取 字段、方法、构造器。并且可以通过反射直接获取方法,调用带参数或者不带参数的方法,甚 至可以调用私有方法。
如果没有特殊需求, 一般的业务逻辑中不会带有反射,了解反射的用处和能力就好,如果 有更高的要求,那么反射还是要仔细研究的。
1.11.2 注解
注解是丰富代码信息的一种方法,通过注解可以更加了解代码,并且通过注解解析和使 用,能够方便管理代码和让编程更加简单。
(1)Java 内置了三种注解,分别是:
■ @Override: 表示当前方法覆盖基类的方法,如果基类不存在此方法,则编译器会报错 (如果不使用注解,则编译器不会检查到)。
@Deprecated: 表示弃用的方法,如果其他类使用了这个注解标注的方法,编译器会生成 警告。
@SuppressWarnings: 关闭警告的注解,使用此注解后编译器会关闭相应类型的警告。
(2)元注解
注解的定义是基于元注解的,元注解可以理解为注解的注解。通过元注解来修饰自定义注 解,例如圈定使用范围或应用阶段等,见表1-8。
(3)自定义注解
自定义注解的写法和接口很像,只是在名字前面加上@即可。注解中用元注解修饰自定义 注解的应用范围和应用级别;注解可以用的数据类型包含基本类型、 String、Class、enum、 Annotation 以及这些类型的数组。注解中的方法不能有参数,但是可以有默认值。
下面定义一个自定义注解,这个注解是用来辅助说明方法是做什么的,以及它对外暴露的 接口是什么。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~