JDBC
JDBC(Java Database Connective),Java数据库连接,是一组专门负责连接并操作数据库的标准
作用
Ø 完成数据库的连接创建
Ø 传送SQL命令给数据库,完成数据库操作及数据表
Ø 接受和处理数据库所执行的结果
JDK新特性
泛型
Ø 泛型就是参数化类型,是一种类型占位符。当我们把一个对象“丢进”集合中后,系统会把该元素向上转型为Object实例,当把它取出来时,就是获取了一个对Object对象的引用。JDK1.5以后,可以使用泛型类限制集合元素的类型,这样就统一了集合放入的元素类型。
Ø 回顾一下数组:int[] a = {1, 2, 3.0};在编译时就已经提示错误,将问题解决在萌芽时期。那么集合也能否像数组那样,把问题放在编译时、而不是在运行时解决呢?泛型的出现将运行时异常提前到编译时异常,减少了安全隐患
Ø 泛型能够带来的两个明显好处是——类型安全(提高安全性)和减少装箱拆箱、向下转型(提高效率)。
泛型的擦除与补偿
n 泛型的擦除 (编译时)
泛型技术是组编译器使用的技术,用于编译时期确保类型的安全。在编译通过之后,完全转换成*.class文件之前,会进行泛型的擦除。这个过程称为泛型的擦除。
n 为什么要有泛型的擦除?
原因是:泛型是JDK1.5后才出现的产物,而某些市面上还遗留着许多使用JDK1.5以下版本的软件系统,为了兼容这些老系统,所以需要泛型的擦除。
n 泛型的补偿(运行时)
在运行时,通过获取元素的类型自动进行转换动作,这就是泛型的补偿。不需要程序员再进行强制类型转换了。泛型的补偿是能过getClass()实现的。
泛型的使用场景:
1, 方法参数是方法名后小括号里的东西,而泛型接收的参数就是指定的数据类型如类、接口或数组,而使用的方式就是<>
2, 没有泛型之前,ArrayList是这样写的:ArrayList<Object>,而这样子需要向上、向下转型,而ArrayList<E>不用。<E>表示直接接收引用数据类型(如:类、接口或数组),不会涉及到转型
3, 用在类上。如自定义类中可以加入泛型。class Person<E1, E2> {} 这个能看懂不?Person<String, Integer> p = new Person<String, Integer>();
4, 用在函数上。函数的泛型与所属类的泛型一样,则不用在函数中另外声明,如果与类的泛型不一样,就要另在函数中声明泛型,public <E> void method(E e){},<E>必须放在修饰符之后后返回值之前。
静态函数一定要另外声明泛型,因为类的泛型是作用于对象,而静态先于对象存在。Public static <T> void method(T t){}
5, 用在接口上。实现接口的类有具体类型,实现的时候就要传具体类型,如果实现接口的类也不确定泛型的类型时,要继续定义泛型,让调用这个类的程序来传具体的类型。
通配符与<T>的区别
1,“?”通配符不需要声明,但是T是另外声明<T>的
2,T还可以当具体的数据类型使用,但是“?”不行。
泛型的限定:
上限:?extends E:可以接收E和E的子类
用法:Object可以接收任何对象,但前提是只用父类的方法
下限:?super E:可以接收E和E的父类
用法:子类的方法,父类都有,只要子类可以接收的父类都可以接收。
高级for循环&可变参数
增强for循环和传统for循环的区别?foreach可以遍历map吗?
增强for循环简化了书写,但是只能遍历元素.传统for循环可以在遍历的过程中对元素进行操作
高级for循环,只用于集合和数组的遍历,集合只能用Collection不能用Map集合只能把Map集合转化成Set集合,才能用for循环。foreach可以间接遍历map,可以通过map.entrySet()或map.keySet()方法获得单列集合,然后进行遍历。
格式:for(元素类型变量名: Collection集合&数组)
可变参数的使用方式,和注意事项?
类型...变量名
注意事项:一般参数必须定义在可变参数前 public void method(int a,int...arr);
其实可变参数的底层实现就是数组
反射
Class.forName("类名")和类名.class的区别?
每个Class<