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 对象的列的编号、名字、类型和属性
一、反射是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 对象的列的编号、名字、类型和属性