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,或在外面在包装一层数组.
------------------------------------------------------------------------------