JAVA泛型、反照、注解、类加载器介绍

JAVA泛型、反射、注解、类加载器介绍
一、反射是Java 1.2开始就具有的特性
Class cla=字节码

Class代表字节码,抽象出代表java所有类的对象,通过Class可以得到类中各个成员
编译java文件到硬盘上class文件(二进制),由类加载器把二进制文件加载到内存中,创建出该对象

基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象
public boolean isPrimitive() 判定指定的 Class 对象是否表示一个基本类型


1.三种方法得到类的字节码
Class cla1=s.getClass();(通过对象)

Class cla2=String.class;(类名.class)

Class cla3=Class.forName("java.lang.String");//如果虚拟机中存在该类的字节码则直接查到返回,否则类加载器加载类到虚拟机中,并缓存起来

2.java反射就是java中各个成分映射成相应的java类,注:反射消耗性能

3.利用反射构建实例二种方法,Class.newInstance();
Class c=Class.forName("com.hp.bean.Person");

Constructor constructor=c.getConstructor(java.lang.String.class);
Person p=(Person) constructor.newInstance("Austin");
System.out.print(p.getName());

Person p2=(Person) c.newInstance();
System.out.print(p2.getName());


二、泛型

泛型只是给编译器编译时检查语法结构的,并不像c++做的那么强悍!

使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要作引用,可以调用于参数无关的方法,不能调用与参数有关的方法。
public void test(Collection<?> collection){
//collection.add(1);
collection.size();
}

通配符的扩展<? extends Number>


注解

jdk自带注解:
@Deprecated
@SuppressWarnings
@Override

声明自己的注解

@Retention(RetentionPolicy.RUNTIME)/*生命周期*/
@Target(ElementType.TYPE)/*目标*/
public @interface HPAnnotation {

}


类加载器
java类加载成树状结构,采用委托加载机制(顾名思义儿子找爸爸,爸爸找爷爷)

BootStarp(最高级加载器)  -----  jre/lib/rt.jar

ExtClassLoader ----- jre/lib/ext/*.jar

AppClassLoader ----- classpath指定的所有.jar或目录

MyClassLoader 继承ClassLoader



通过Connection对象的getMetaData()方法可以得到数据库的元数据
通过ResultSetMetaData rsm=ResultSet().getMetaData()获取此 ResultSet 对象的列的编号、名字、类型和属性