发表于: 2018-04-01 22:48:56
1 528
今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)
一、将代码上传到修真院github
1.首先将修真院的库fork到自己的库里
2.从自己的库里clone到本地
3.在本地添加新文件夹后再Pull上去
4.在刚修改完的库上提交新的pull requests
5.管理员同意后就可以提交成功了
二、反射机制:反射就是把java类中的各种成分映射成相应的java类
1.类对象概念: 所有的类,都存在一个类对象,这个类对象用于提供类本身的信息,比如有几种构造方法, 有多少属性,有哪些普通方法。如果把类看成一个人,那么类对象可以看成是这个人的档案。
2.获取类对象有3种方式
① Class.forName(完整类名)
②类.class,这种方法一般用的比较多,像是加载某个类对象时。
③ new 类().getClass(),等价于 此类的对象.getClass(),一般用的比较少
在一个JVM中,一种类,只会有一个类对象存在。所以以上三种方式取出来的类对象,都是一样的。
注1: 准确的讲是一个类加载器(ClassLoader)下,一种类,只会有一个类对象存在。通常一个JVM下,只会有一个ClassLoader。
注2:字节码的比较使用==而不是使用equals
注3:一个class对象实际上表示的是一个类型,而这个类型不一定是一种类,也有可能是java的基本类型,比如int.class是一个class类型的对象,但是int不是类。
3.在获得类对象后,就可以使用其类方法来获得包括包路径、类名称、继承类、实现接口、构造方法、方法、成员变量、内部类、内部类的声明类等信息。
4.。Constructor类:使用反射机制新建对象与传统的通过new 来获取对象的方式不同,反射机制,会先拿到类的“类对象”,然后通过类对象获取“构造器对象”,再通过构造器对象创建一个对象
//获取类对象pClass3
Class pClass3=new Person().getClass();
//获取构造器
Constructor c=pClass3.getConstructor();
//通过构造器创建一个新实例
Person p2=(Person) c.newInstance();
p2.name="dufu";
System.out.println(p2);
5.Field类:通过反射机制修改对象属性,getField()只能得到可见字段,private的字段得不到,get()也是,此时可以使用暴力反射,先执行field.setAccesible(true),再获取
//获取类对象pClass3中的name字段,存在f中
Field f=pClass3.getDeclaredField("name");
//通过f调用set方法将新的name存进p2中
f.set(p2,"baijuyi");
6.Method类:通过反射机制,调用一个对象的方法
//获取类对象pClass3中的setName方法,存在m中
Method m=pClass3.getDeclaredMethod("setName", String.class);
//使用m调用Method对象的方法,将新名字存进p2对象
m.invoke(p2,"liqingzhao");
7.总结起来,先创建类对象,再通过类对象来获取构造器创建新对象,或是通过类对象获取字段访问成员变量,或是通过类对象获取方法并调用方法。
8.作用,可以使用配置文件的方式来获取对象,这样当需要改动时,可以只改动配置文件,降低耦合度。
三、注解
1.注解可以用一个词来形容,就是元数据,即描述数据的数据,是一种代码级别的说明。
2.注解相当于注释,但不同于注释的是,注解不是单纯对代码功能的说明,而是实现程序功能的组成部分。每一个注解就是一个类,每一次使用一次注解就是创建相应的实例对象,可以对照spring中自动注入时使用的注解,每次注解可以理解为创建了一个注解的对象来注入被注解的类对象中
3.Java内置的标准注解
①@override,重写,表示当前方法将覆盖超类中的方法。
②@Suppresswarnings,关闭不当编译器警告信息。在平时经常遇见编译器warning,可以使用此注解关闭。
③@Deprecated,编译器将对注解为@Deprecated的元素发出警告,注解@Deprecated是不赞成使用的、被弃用的代码。用来标记那些不用的代码。其实一般可以直接注释掉,所以此注解用得比较少。
4.元注解就是在注解类上加的注解
①@Retention:表示需要在什么级别保留改注解信息
@Rentention(RetentionPolicy.SOURCE)//只存在于java源文件中,会被编译器丢弃
@Rentention(RetentionPolicy.CLASS)//Annotation未加注解时的默认范围,保留到类文件中,会被JVM抛弃
@Rentention(RetentionPolicy.RUNTIME)//在运行时加载Annotation到JVM中,有效范围最大
②@Target:表示该注解应该用在什么地方
@TargetElementType.CONSTRUCTOR//构造器的声明
@TargetElementType.FIELD//成员变量声明(包括enum实例)
@TargetElementType.LOCAL_VARIABLE//局部变量声明
@TargetElementType.METHOD//方法声明
@TargetElementType.PACKAGE//包声明
@TargetElementType.PARAMETER//参数声明
@TargetElementType.TYPE//类、接口(包括注解类型)或enum声明
③@Documented是一个标记注解,没有成员。该元注解用于将其他注解包含在Javadoc中,从而被文档化
④@Inherited也是一个标记注解,被该注解标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。
5.自定义注解
①用关键字@interface 定义一个注解标记,使用@interface 关键字实际上的意思就是该接口继承自java.lang.annotation.Annotation接口。
②定义注解格式:public @interface 注解名{定义体}
③注意:
- 注解方法不能有参数。
- 注解的值必须是确定的,且不能使用null作为值。
- 注解方法的返回类型局限于原始类型,String,Enum,Annotation,或以上类型构成的数组。
- 注解方法可以包含默认值,使用default就可实现。
- 注解只有一个元素的时候,该元素名称必须是value,并且在使用该注解的时候可以省略”value=”。
- 注解可以包含与其绑定的元注解。
明天计划的事情:(一定要写非常细致的内容)
明天看一下动态代理,复习一下mybatis,就开始看spring mvc了
遇到的问题:(遇到什么困难,怎么解决的)
反射和注解都用过了但是还是很难理解概念。
收获:(通过今天的学习,学到了什么知识)
系统性的看了一下反射和注解,但是效率不高,脑子一直很空,要早点恢复状态了
评论