昨天在昆仑巢,下午练习Spring Boot的过滤器Filter。
昨天傍晚开始阅读《疯狂Java讲义(第2版)》,熟悉了UML建模语言、Final修饰符、List集合和泛型。
1.UML建模语言: 13种图,常用的包括用例图、类图、组件图、部署图、顺序图、活动图和状态机图等。
2.final可用于修饰类、变量和方法。
final修饰变量时,表示该变量一旦获得了初始值就不可被改变。
final修饰的成员变量,必须由程序员显式地指定初始值。
3.List集合,元素有顺序、可重复,集合中的每个元素都有其对应的顺序索引。
List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。
4.泛型:
List<String> 等同于如下接口:
public interface ListString extends List
所谓泛型,就是允许在定义类、接口、方法时使用类型形参,这个类型形参将在声明变量、创建对象、调用方法时动态地指定(即传入实际的类型参数,也成为类型实参)。
4.1 可以为任何类、接口增加泛型声明,并不是只有集合类才可以使用泛型声明,虽然集合类是泛型的重要使用场所。
示例代码如下:
定义了Apple类时使用了泛型声明:
public class Apple(T)(){
//使用T类型形参定义实例变量
private T info;
public Apple(){}
//下面方法中使用T类型形参来定义构造器
public Apple(T info){
this.info=info;
}
public void setInfo(T info){
this.info=info;
}
public T getInfo()
{
return this.info;
}
public static void main(String[ ] args)
{
//因为传给T形参的是String实际类型
//所以构造器的参数只能是String
Apple(String) a1= new Apple<>(" 苹果");
System.out.println(a1.getInfo());
//因为传给T形参的是Double实际类型
//所以构造器的参数只能是Double或者double
Apple<Double> a2 = new Apple<>(5.67);
System.out.println(a2.getInfo());
}
}
4.2 不管为泛型的类型形参传入哪一种类型实参,对于Java来说,它们依然被当成同一个类处理,在内存中也只占用一块内存空间,因此在静态方法、静态初始化块或者静态变量的声明和初始化中不允许使用类型形参。
public class R<T>
{
// 下面代码错误,不能在静态Field声明中使用类型形参
static T info;
T age;
public void foo(T msg){}
// 下面代码错误,不能在静态方法声明中使用类型形参
public static void bar(T msg){}
}