黑马程序员——JDK1.5新特性

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一、静态导入

import static语句导入一个类中的某个静态方法或所有静态方法;
eg:import static java.lang.Math.sin;

二、可变参数

前提:一个方法接受的参数个数不固定

特点:1、只能出现在参数列表的最后;  2、...位于变量类型和变量名之间,前后有无空格都可以;  3、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

三、for循环增强

语法:for ( type 变量名:集合变量名 )  { … } ;

注意事项:1、迭代变量必须在( )中定义!  ;2、集合变量可以是数组或实现了Iterable接口的集合类。

四、基本数据类型的自动拆箱与装箱

1、自动装箱:Integer num1 = 12;   //int->Integer
2、自动拆箱:System.out.println(num1 + 12);  //Integer->int

五、枚举

1、为什么要有枚举?

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

2、普通类模拟枚举

1)私有的构造方法 ;2)每个元素分别用一个公有的静态成员变量表示;3)可以有若干公有方法或抽象方法。

3、枚举特点

1)枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法;2)枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误;3)带构造方法的枚举(构造方法必须定义成私有的);4)带方法的枚举;5)枚举只有一个成员时,就可以作为一种单例的实现方式。

六、泛型

1、ArrayList<E>类定义和ArrayList<Integer>类引用中涉及如下术语:

整个称为ArrayList<E>泛型类型,ArrayList<E>中的E称为类型变量或类型参数,整个ArrayList<Integer>称为参数化的类型,ArrayList<Integer>中的Integer称为类型参数的实例或实际类型参数,ArrayList<Integer>中的<>念着typeof,ArrayList称为原始类型。

2、泛型的应用

泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会去除掉“类型”信息,使程序运行效率不受影响,对于参数化的泛型类型,getClass()方法的返回值和原始类型完全一样。由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其它类型的数据,例如,用反射得到集合,再调用其add方法即可。

3、泛型的好处 

把运行时的异常转到了编译时期,避免了程序员强制类型的转换。 

4、泛型的特点

参数化类型与原始类型的兼容性(参数化类型可以引用一个原始类型的对象,编译报告警告,原始类型可以引用一个参数化类型的对象,编译报告警告,),参数化类型不考虑类型参数的继承关系,编译器不允许创建泛型变量的数组。即在创建数组实例时,数组的元素不能使用参数化的类型。

5、定义泛型的前提

1、当定义方法时,不确定参数的传入类型;2、只有引用类型才能作为泛型方法的实际参数;3、只有引用类型才能作为泛型方法的实际参数

6、泛型中的?通配符(占位符,任意类型)

使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。
泛型的限定:1)限定通配符的上边界(只能是?或其父类):Vector<? extends Number> x = new Vector<Integer>();
2)限定通配符的下边界(只能是?或其父类):Vector<? super Integer> x = new Vector<Number>();
/*注意:限定通配符总是包括自己,?只能用作引用,不能用它去给其他变量赋值*/

7、通过反射获得泛型类型

七、线程并发库

1、ReadWriteLock

获得读锁: Lock readLock()  ;获得写锁: Lock writeLock()  

2、Lock锁

在等待 Condition 时,允许发生“虚假唤醒”,这通常作为对基础平台语义的让步。对于大多数应用程序,这带来的实际影响很小,因为 Condition 应该总是在一个循环中被等待,并测试正被等待的状态声明。某个实现可以随意移除可能的虚假唤醒,但建议应用程序程序员总是假定这些虚假唤醒可能发生,因此总是在一个循环中等待。

3、传统线程

1)线程的同步互斥 ;
2)Timer(定时器);
3)ThreadLocal(绑定线程相关变量)

4、线程池(就是创建一个存储线程的池子)

1)Executors(线程池工具类):
创建一个固定数量的线程池:static ExecutorService newFixedThreadPool(int nThreads)  
创建单个的线程池:static ExecutorService newSingleThreadExecutor() 
创建一个根据需要创建的线程池:static ExecutorService newCachedThreadPool()  
2)ExecutorService(线程池工具类)
提交任务:void execute(Runnable command)  
完成当前任务后结束线程:void shutdown()  
直接结束任务,并获得未完成任务列表: List<Runnable> shutdownNow() 
提交一个返回值的任务用于执行 :<T> Future<T>  submit(Callable<T> task) 
Callable:必须重写call方法,且必须返回一个结果,返回值类型看泛型
Future:获得返回值中的结果     V get() 

5、Semaphore信号灯

Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。
单个信号量的Semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁”,再由另一个线程释放“锁”,这可应用于死锁恢复的一些场合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值