javaBean
javaBean是一个特殊的类,或者说是满足一定规范的类
javaBean的概念
| 规范标准 | 描述 |
|---|---|
| 必须有包 | 编程规范/良好的编程习惯 |
| 必须是具体的和公共的 | 访问权限最大化,非抽象的 |
| 必须有公有无参构造 | 方便框架或底层通过反射创建对象 |
| 必须有相应公有的setter、getter方法 | 方便设置和获取属性/el表达式 |
| 建议对象属性私有化 | 控制直接操作对象属性 |
对象属性
javaBean属性(name age set和get方法名中的属性)
jar包
概念
jar包是.class的压缩包,就是把写好的类,打包成自己可以使用,也可让别人使用的一个压缩包
打jar包
File --> Project Structure --> Artifacts --> 点击“+” --> JAR --> From moddules with dependencies... -->main class(选择需要打包的类) --> OK (这会儿只是把项目加入jar包里面,打包还需要继续) --> Billd -->Build Artifacts... --> Build
注意:如果出现以下错误,是因为之前已经打过包了
解决方法:删除以下位置文件重新打包
导jar包
- 导的是没有后缀的jar包
步骤:在项目上New --> Directory(名字写lib) --> 将jar包复制到lib底下 --> 在jar包右键New --> Add as Library --> ok(加载到项目)
属性拷贝
导包完成后就能使用包里的方法,类名一般都是包名大写首字母
例子:把对象1的值Copy到对象2里面去
输出:李斯 32
输出:赵高 43
反射
要让程序运行,就要让java类被java虚拟机加载,class文件要加载
class的获得方式(获取字节码对象c)
- class c=对象名.getclass();(先New一个对象)
- class c=类名.class
【重点】class c=Class.forName(String package);(package必须是全限定名,不用类名,只要不编译就不会报错,可以继续往下写程序,不影响进度)
反射获取构造方法
getConstructors(只能获取全部公共构造方法)
- 先通过反射拿到字节码对象
- 使用字节码对象.newInstance方法拿到类的对象
- 获取构造方法:使用字节码对象aClass.getConstructors()
getConstructor(只能获取指定公共构造方法)
- 获得指定有参参数构造器方法:aClass.getConstructors(
数据类型.class) - 初始化值:使用有参构造器传入一个值:
总结:通过反射获取了构造方法,通过构造方法创建了对象
getDeclaredConstructors
获取全部构造方法(包括私有)
使用方法和之前一样
例子(这里面name是公有,age是私有)
getDeclaredConstructor(获取指定的构造)
反射获取方法
getmethods
获取全部方法,包括父类里面的
getDeclaredMethods
获取声明的方法(即父类里面所有包括私有的方法)
invoke(调用方法,配合getMethod使用)
获取公有方法
- 获取方法(getMethod)
- 调用方法(invoke)
获取私有方法
需要破解私有化,使用setAccessible(true)
反射获取属性
| 方法 | 描述 |
|---|---|
| getDeclaredFields | 获取全部声明属性 |
| getDeclaredField | 拿到指定属性 |
注解
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
| 取值 | 描述 |
|---|---|
| SOURCE | 在源文件中有效(即源文件保留) |
| CLASS | 在class文件中有效(即class保留) |
| RUNTIME | 在运行时有效(即运行时保留) |
- Documented
使用@Documented定义后的注解,在该注解使用后,如果导出API文档,会将该注解相关的信息可以被例如javadoc此类的工具文档化。
- Inherited
用在类上,可以直接继承;
用在方法上,如果子类没有重写,可以继承,重写以后不能继承