jdk1.5特性

1.自动装箱与拆箱.
java中的包装类.
包装类是对java中的基本数据进行包装,可以将基本类型包装成类类型。

基本数据类型

四类八种.
1.整型 byte short int long
2.浮点型 float double
3.字符 char
4.布尔 boolean

包装类
Byte Short Integer Long
Float Double
Character
Boolean

自动拆箱
直接将Integer对象赋值给int

自动装箱
直接将int赋值给Integer。


//对于Integer类它的自动装箱时,如果int值是在-128----127之间是从IntegerCache中取出的一个值,
如果不在这个范围内是重新new Integer()

-------------------------------------------------------------
增强for循环
它的底层实现就是使用Iterator。
什么样的容器可以使用增强for?-----------Iterable

增强for的缺点:只能进行遍历,不能进行在遍历过程中的操作.

增强for的格式
for(类型 引用:容器){
}
--------------------------------------------
关于对集合的遍历.
List
1.Iterator
2.增强for
3.普通for
4.ListIterator
Set
1.增强for
2.Iterator
Map
1.keySet---得到所有的key的Set视图
2.entrySet--得到key-value的set视图

-------------------------------------------------------------------------
可变参数:
格式 类型... 变量
本质上这个参数是一个数组。

优点:1.传参数时可以传递数组,也可以传递多个值。
2.可以不传递值.



Arrays.asList()可以将数组转换成List集合.
注意:得到的是一个固定长度的List集合。
原因:是因为数组长度是固定的,这个集合是由数组转换成的。

为什么要将数组转换成集合?
集合中提供更丰富的操作.


int[] arr = { 1, 2, 3 };
List list = Arrays.asList(arr);
System.out.println(list.size());

System.out.println(list);

将一个int[]转换成了List集合使用Arrays.asList方法
得到的集合长度为1,集合中的元素是int[]为什么?

集合中的元素是Object。
因为我们现要转换的集合中的元素是int类型,不能直接装入到集合中(也没有进行装箱)
这时就将数组对象做为了集合对象.List<int[]>

----------------------------------------------------------------------------------
静态导入(知道)
格式:import static 包名.类名.方法名(属性名);

在类中使用这个静态成员时可以不用类名。直接写方法名或属性名就可以。

静态导入缺点:
1.代码可读性下降.
2.由于方法名的重复,静态导入在一些特定的情况下会报错.

----------------------------------------------------------------------
泛型(重点)
什么是泛型?
对数据类型进行一个限定.
应用最多的地方是集合。
为什么要使用泛型?
1.提高我们程序安全性.
2.将运行阶段的问题在编译阶段解决.
3.不用进行类型强制转换
-----------------------------------------------
我们学习泛型的目的:会使用集合上定义的泛型。

1.集合上泛型的基本使用.
//Collection<E>
//List<E>
//Set<E>
//它们的作用是限定集合中元素的类型.

我们可不可以自己在类上或接口上定义泛型?
可以。怎样定义?

class 类名<T>{

}
在类上声明的泛型怎样使用?
类的成员:成员属性---成员方法.
成员属性:类属性(static) 实例属性(非static)---我们管实例属性就叫成员属性.
成员方法:类方法 实例方法(成员方法)

类上声明的泛型 可以应用于成员方法或成员属性上。


在类上声明的泛型不能在类的静态成员上使用?
原因:是类上声明的泛型,只有在创建对象进才能进行类型传递。
而静态成员是不需要对象就可以调用。


我们可不可以在静态的方法上声明泛型?

可以
格式
修饰符 <泛型> 返回值 方法名(){}


泛型是应用于设计阶段.

-----------------------------------------------------------------------------
在集合上应用泛型高级
通配符. ?

关于?在集合中的应用.
1. ? extends E
代表的是E类型或E的子类类型.

应用:在Collection接口中的addAll 方法
2. ? super E
代表的是E类型或E的父类类型.

应用:在TreeSet的构造方法上。

TreeSet集合:
它是一个可以排序的Set集合.

TreeSet集合怎样排序?
1.自然顺序
只要实现这个接口Comparable,就代表这个类型的元素具有自然顺序
2.比较器.
实现这个接口Comparator的类,可以根据指定条件进行比较。

指定比较器时,如果集合中的元素是按照父类中的属性进行比较,这时可以使用父类的比较顺.

------------------------------------------------------------------
泛型擦除机制

笔试题:List<String> list=new ArrayList<String>().要求向集合中添加一个Integer数值10

List<String> list = new ArrayList<String>();

// list.add(10);

List a = list;
a.add(10);

System.out.println(list);

上面操作,在笔试中不要使用,而要使用反射完成.

泛型在编译阶段有效,在运行阶段无效果。



-------------------------------------------------------------------------------------------------------------------
枚举

枚举是什么?
它就是一个特殊的java类.

类的定义
class 类名{}
接口的定义
interface 接口名{}
枚举的定义
enum 枚举名{}

示例
public enum Demo1{} 也会生成一个class文件.

我们对其进行反编译.
定义到我们的class文件所在目录下 执行 javap Demo1

得到的结果
public final class Demo1 extends java.lang.Enum<cn.itcast.enumdemo.Demo1> {
static {};
public static Demo1[] values();
public static Demo1 valueOf(java.lang.String);
}

枚举它是一个java类,它继承了java.lang.Enum这个类.



枚举有什么用?

我们在开发中,有些数据必须被限定在某个范围内取值,不可以超出这个范围,那么这时就可以使用枚举.
比我们传统的代码书写简单.

------------------------------------------------------------
枚举的语法
枚举类也是一种特殊形式的Java类。
枚举类中声明的每一个枚举值代表枚举类的一个实例对象。

与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。
若枚举类只有一个枚举值,则可以当作单态设计模式使用。


注意:在枚举中可以声明方法,属性,构造方法.构造方法必须private。

如果枚举中只有枚举值,最后一个枚举值后面可以不写;结束符.
如果有了其它成员,必须在最后一个枚举值加上";".

1.构造方法必须private,可以重载.
2.在枚举中声明属性,声明方法.

---------------------------------------------------
1:枚举默认就是abstract的,不可以实例化。
2:枚举中可以拥有abstract抽像方法。
3:枚举的所有成员,都默认是public static final类型的。且必须要第一行开始声明。必须在,(逗号)分开。
4:所有的枚举,默认都是java.lang.Enum。
5:Enum类不但是所有枚举的公共的基类,还是一个工具类。


enum ------它是用于声明枚举类的.
Enum ------java中的一个类,它代表所有枚举的父类.
Enumeration----相当于Iterator 遍历集合

--------------------------------------
枚举类中可以声明abstract方法.
如果枚举类中存在抽象方法,对于每一个枚举值必须对这些抽象方法进行重写.

-------------------------------------------------------------------------------
枚举的方法.

1.枚举类中自带
values()-----得到枚举类中的所有枚举值
valueOf()------

2.枚举类从java.lang.Enum类继承的.

name方法---得到枚举值的字符串表现形式.
ordinal() ----得到枚举值的序号
valueOf(Class c,String name)将一个字符串转换成指定枚举类型的枚举值

----------------------------------------------------
枚举知识点掌握
1.枚举在什么时候使用,怎样定义枚举.
2.枚举中可以包含什么内容
3.枚举中常用的方法.

------------------------------------------------------------------------------------------------------------
反射:
什么是反射?
剖析Java类中的各个组成部分映射成一个个java对象
为什么用反射?
多用于框架和组件,写出复用性高的通用程序

1.Class类.
Class代表的就是我们的字节码文件.
三种方式.
1.类名.class
2.对象.getClass();
3.Class.forName();

在开发中创建使用第三种 Class.forName();为什么?
这种方式耦合度低,没有依赖性.

------------------------------------------
2.Constructor(构造器对象)
构造器的作用就是用来创建对象的。
Constructor代表的是构造器对象,我们得到它后就可以实例化对象.

1.怎样得到Constructor对象.
getConstructor()-----得到指定的构造器
getConstructors();---得到所有的构造器


2.关于Constructor的注意事项
1.如果构造方法不是public。那么要获取其构造器对象使用 getDeclaredConstuctor()方法.

2.对于私有化权限,在使用前必须设置权限检查.
public void setAccessible(boolean flag)
值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查

3.在开发中,我们在得到Class时,一般会直接实例化类的对象.


2.Field

3.Method

1.

2.对于static方法怎样调用?
静态方法调用时不需要使用对象,直接写null
staticMethod.invoke(null,参数);
方法的参数如果是数组怎样调用?

在调用invoke时,第二个参数强制转换成Object,或在外面在包装一层数组.

------------------------------------------------------------------------------

posted @ 2014-12-06 19:41  小菜希  阅读(150)  评论(0编辑  收藏  举报