java 基础加强,Javaweb_day01_基础加强

本文详细探讨了Java中的Class对象获取方法,包括Class.forName、类名.class和对象.getClass,以及如何通过反射操作成员变量、构造方法和方法。此外,讲解了注解的使用、JDK预定义注解如@Override和自定义注解,以及如何解析和应用注解。最后,通过实例展示了如何通过反射调用带有特定注解的方法并处理异常。
摘要由CSDN通过智能技术生成

37b1df2c585046fb67b3e09a240e0e51.bmp

获取Class对象的方式:

1.Class.forName("全路径类名"):Class类的静态方法forName,将字节码文件加载进内存,返回Class对象

* 多用于配置文件,将类名定义在配置文件中。读取文件,加载类

2.类名.class:通过类名的属性class获取

* 多用于参数的传递

3.对象.getClass():getClass()方法在Object类中定义着。

* 多用于对象的获取字节码的方式

结论:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。

Class对象功能:

获取功能:

1.获取成员变量们

Field[] getFields() 获取所有public修饰的成员变量

Field getField(String name)   获取指定名称的public修饰的成员变量

Field[] getDeclaredFields()  获取所有的成员变量,不考虑修饰符

Field getDeclaredField(String name) 获取指定名称的public/private修饰的成员变量

2.获取构造方法们

Constructor>[] getConstructors()  获取所有public修饰的构造方法

Constructor getConstructor(Class>... parameterTypes)  获取指定的public修饰的构造方法

Constructor getDeclaredConstructor(Class>... parameterTypes)  获取指定的public/private修饰的构造方法

Constructor>[] getDeclaredConstructors() 获取所有的public/private修饰的构造方法

3.获取成员方法们:

Method[] getMethods()  获取所有的public修饰的成员方法

Method getMethod(String name, Class>... parameterTypes)  获取指定的public修饰的成员方法 (最常用)

Method[] getDeclaredMethods()  获取所有的public/private修饰的成员方法

Method getDeclaredMethod(String name, Class>... parameterTypes) 获取指定的public/private修饰的成员方法

4.获取全路径类名

String getName()

Field:成员变量

操作:

1.设置值 void set(Object obj, Object value)

2.获取值 object get(Object obj)

3.忽略访问权限修饰符的安全检查 void setAccessible(true):暴力反射

Constructor:构造方法

创建对象:T newInstance(Object... initargs)

如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法

Method:方法对象

执行方法:Object invoke(Object obj, Object... args) (被执行方法的对象,方法参数值)

获取方法名称:String getName():获取方法名

反射案例:

类加载器ClassLoader:

获取:Class对象的getClassLoader()方法进行获取

使用(结合Properties):

InputStream is = 加载器对象.getReasourceAsStream("src目录下的文件")

Properties prop = new Properties();

prop.load(is);

注解:

1.注释与注解:

注释:不参与代码的编译,给程序员看的

注解:参与代码的编译,给计算机看的

2.JDK预定义注解:

@Override:检查重写的方法

@Deprecated:标注当前方法已过时

@SuppressWarnings:压制警告(SuppressWarnings("all") 压制所有警告)

3.自定义注解:

格式:public @interface 注解名称{}

本质:就是一个接口,默认继承Annotation接口

public interface MyAnno extends java.lang.annotation.Annotation {}

属性:

介绍:相当于抽象方法

属性的返回值类型:基本类型、String、枚举、注解、以上类型的数组

定义了属性,使用时需要给属性赋值:

1.定义属性时,通过default关键字设置了默认值,则使用时可以不赋值

2.如果属性只有一个,并且名称是value,则赋值时,value可以不写

3.数组赋值时,使用{}包裹,如果只有一个值,{}可以省略不写

4.元注解:

概念:用来描述注解的注解

@Target:描述注解作用的位置

ElementType.TYPE:作用在类上

ElementType.METHOD:作用在方法上

ElementType.FIELD:作用在成员变量上

@Retention:描述注解被保留的阶段

Retentionpolicy.SOURCE:保留在源码阶段

Retentionpolicy.CLASS:保留在字节码文件阶段

Retentionpolicy.RUNTIME:保留在JVM运行阶段

@Documented:描述注解是否被抽取到API文档中

@Inherited:描述注解是否被子类继承

5.解析注解:

1.获取注解所在位置对应的对象(Class,Method,Field)

2.通过对象获取注解对象

*getAnnotation(Class)//其实就是在内存中生成了一个该注解接口的子类实现对象

public class ProImpl implementsPro{publicString className(){return "cn.itcast.annotation.Demo1";

}publicString methodName(){return "show";

}

}

3.获取注解的属性值

6.注解综合案例

1.获取测试类的Class对象

2.通过Class对象获取所有的方法

3.循环遍历所有方法,获取每个方法

4.判断当前方法是否含有指定注解

5.执行含有注解的方法,出现异常时,将异常信息写入到本地文件

代码展示:

Check注解:

importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)public @interfaceCheck {

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值