javaBean&反射&注解

86 阅读4分钟

image.png

javaBean

javaBean是一个特殊的类,或者说是满足一定规范的类

javaBean的概念

规范标准描述
必须有包编程规范/良好的编程习惯
必须是具体的和公共的访问权限最大化,非抽象的
必须有公有无参构造方便框架或底层通过反射创建对象
必须有相应公有的setter、getter方法方便设置和获取属性/el表达式
建议对象属性私有化控制直接操作对象属性

 对象属性

image.png

javaBean属性(name age set和get方法名中的属性)

image.png

jar包

概念

jar包是.class的压缩包,就是把写好的类,打包成自己可以使用,也可让别人使用的一个压缩包

打jar包

File --> Project Structure --> Artifacts --> 点击“+” --> JAR --> From moddules with dependencies... -->main class(选择需要打包的类) --> OK (这会儿只是把项目加入jar包里面,打包还需要继续) --> Billd -->Build Artifacts... --> Build

  • 注意:如果出现以下错误,是因为之前已经打过包了

image.png

  • 解决方法:删除以下位置文件重新打包

image.png

导jar包

  • 导的是没有后缀的jar包

image.png

  • 步骤:在项目上New --> Directory(名字写lib) --> 将jar包复制到lib底下 --> 在jar包右键New --> Add as Library --> ok(加载到项目)

属性拷贝

导包完成后就能使用包里的方法,类名一般都是包名大写首字母

image.png

例子:把对象1的值Copy到对象2里面去

image.png 输出:李斯 32 image.png 输出:赵高 43

反射

要让程序运行,就要让java类被java虚拟机加载,class文件要加载

class的获得方式(获取字节码对象c)

  • class c=对象名.getclass();(先New一个对象)
  • class c=类名.class
  • 【重点】class c=Class.forName(String package);(package必须是全限定名,不用类名,只要不编译就不会报错,可以继续往下写程序,不影响进度)

image.png

反射获取构造方法

getConstructors(只能获取全部公共构造方法)

  • 先通过反射拿到字节码对象
  • 使用字节码对象.newInstance方法拿到类的对象

image.png

  • 获取构造方法:使用字节码对象aClass.getConstructors()

image.png

getConstructor(只能获取指定公共构造方法)

  • 获得指定有参参数构造器方法:aClass.getConstructors(数据类型.class)
  • 初始化值:使用有参构造器传入一个值

image.png 总结:通过反射获取了构造方法,通过构造方法创建了对象

getDeclaredConstructors

获取全部构造方法(包括私有
使用方法和之前一样
例子(这里面name是公有,age是私有)

getDeclaredConstructor(获取指定的构造)

image.png

反射获取方法

getmethods

获取全部方法,包括父类里面的

image.png

getDeclaredMethods

获取声明的方法(即父类里面所有包括私有的方法)

image.png

invoke(调用方法,配合getMethod使用)

获取公有方法

  • 获取方法(getMethod)
  • 调用方法(invoke)

image.png

获取私有方法 需要破解私有化,使用setAccessible(true)

image.png

反射获取属性

方法描述
getDeclaredFields获取全部声明属性
getDeclaredField拿到指定属性

image.png

注解

JDK四大内置注解

  • Override
该注解表示重写父类的方法
  • Deprecated
使用该注解会显示一条删除线,表示过时,但不影响使用
  • SuppressWarings
抑制警告,镇压警告
  • SafeVarargs 抑制堆警告

元注解

用来定义其他注解的注解

  • @Target
用于描述注解的使用范围(即:被描述的注解可以用在什么地方)。
表示支持注解的程序元素的种类,一些可能的值有TYPE, METHOD, CONSTRUCTOR, FIELD等等。
如果Target元注解不存在,那么该注解就可以使用在任何程序元素之上。
取值(ElementType)描述
CONSTRUCTOR用于描述构造器
FIELD用于描述域(属性)
LOCAL_VARIABLE用于描述局部变量
METHOD用于描述方法
PACKAGE用于描述包
PARAMETER用于描述参数
TYPE用于描述类、接口(包括注解类型) 或enum声明

@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})

  • Retention
被描述的注解在什么范围内有效,可作用的时间段 
RUNTIME>CLASS>SOURCE

image.png

取值描述
SOURCE在源文件中有效(即源文件保留)
CLASS在class文件中有效(即class保留)
RUNTIME在运行时有效(即运行时保留)
  • Documented
使用@Documented定义后的注解,在该注解使用后,如果导出API文档,会将该注解相关的信息可以被例如javadoc此类的工具文档化。
  • Inherited
用在类上,可以直接继承;
用在方法上,如果子类没有重写,可以继承,重写以后不能继承