传智博客课堂学习笔记3.27
复习
.可变参数
.增强for循环
.静态引用
.装箱、拆箱
.内省 java.beans
.枚举Enum
.反射(构造对象【默认构造器和指定构造器,如果构造器属性为private,通过getDeclaredConstructor,setAccessiable(true)】,
读写Field,获取属性【getter和setter方法、属性类型】,获取和调用方法【如果方法是static,调用时method.invoke(null,args)】
.读取注解)
XML用作配置应用
.注解用作配置
1.通过反射技术读取注解
2.通过反射技术读写field
import java.lang.annotation。RetentionPolicy;
RetentionPolicy.RUNTIME:指定该注解保留在源代码/编译过后的class并随着类被装载到JAVA虚拟机内
RetentionPolicy.CLASS:指定该注解只保留在源代码/编译过后的class中
RetentionPolicy.SOURCE:指定该注解只保留在源代码上
.泛型generic
所有的泛型都必须实现ParameterizedType接口
方法上、类上
泛型的继承
泛型的反射
public Class<? super T>getXxxx()
{
}
public class
Class<? super T>返回的是class对象,class的类型必须是T的父类
public void getXxx(Class<?> sss)
{
}
.代理,ClassLoader,BeanUtil(可以实现类型转换和对属性进行操作)
ClassLoader负责从指定路径加载字节码到java虚拟机
类装载器
Bootstrap类装载器
ExtClassLoader
AppClassLoader
类装载器的委托模式
Field:
getModifiers
public int getModifiers()Returns the Java language modifiers for the field represented by this Field object, as an integer. The Modifier class should be used to decode the modifiers.
class.forName():get class for name
compile time 和 run time
the name of the class object for a one-dimensional int array is [I
System.out.println(String[].class.getName());
Class cls = Class.forName("[Ljava.lang.String;");
X.class.newInstance() is the same as new X().
静态代理
动态代理
通过JDK代理技术创建代理技术时,目标对象必须具有接口(创建出来的代理需要实现这些接口)
public class Proxy7 implements PersonService{
private InvocationHandler h = new MehodInvokeBean(target);
public String sayHello(String name){
h.invoke(this,Method["sayHello"],name);
}
}
要求:
可变参数
增强for循环
装箱/拆箱
内省(读取属性)
枚举(简单的定义)
注解(简单的定义)
泛型(简单的定义)
反射(读写Field,构造对象,获取和调用方法)
目标:
反射获得属性
今天讲课内容较多,并且比较深入复杂。需要一定的时间消化整理。幸亏课程安排比较合理,每两三天即有一天休息。方便了学习。
黎老师讲课比较深入,会涉及到一些高级技术。显然是技术型高手~