一.通配符
通配符 ?
是在使用泛型类型时使用的,通常用于声明一个方法的参数、局部变量或字段的类型。它表示一种“未知的类型”。
1.使用
2.通配符上界
语法:
使用:
3.通配符上界
语法:
使用:
二 .String 类
在Java程序中,类似于:1, 2, 3,3.14,“hello”等字面类型的常量经常频繁使用,为了使程序的运行速度更快、 更节省内存,Java为8种基本数据类型和String类都提供了常量池。
为了节省存储空间以及程序的运行效率,Java中引入了:
1. Class文件常量池:每个.Java源文件编译后生成.Class文件中会保存当前类中的字面常量以及符号信息
2. 运行时常量池:在.Class文件被加载时,.Class文件中的常量池被加载到内存中称为运行时常量池,运行时常 量池每个类都有一份
3. 字符串常量池
字符串常量池
字符串常量池在JVM中是StringTable类,实际是一个固定大小的HashTable(哈希桶)
1.举例及其图像
2.intern方法
作用:把一个不在字符串常量池的String对象添加到字符串常量池中
三. 反射
1.定义
Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任 意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息;这种动态获取信 息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。
2.用途
1.在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统 应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法
2.反射最重要的用途就是开发各种通用框架,比如在spring中,我们将所有的类Bean交给spring容器管理,无 论是XML配置Bean还是注解配置,当我们从容器中获取Bean来依赖注入时,容器会读取配置,而配置中给的 就是类的信息,spring根据这些信息,需要创建那些Bean,spring就动态的创建这些类。
3.放射相关的类
4.Class类(反射机制的起源 )
Java文件被编译后,生成了.class文件,JVM此时就要去解读.class文件 ,被编译后的Java文件.class也被JVM解析为 一个对象,这个对象就是java.lang.Class .这样当程序在运行时,每个java文件就最终变成了Class类对象的一个实 例。我们通过Java的反射机制应用到这个实例,就可以去获得甚至去添加改变这个类的属性和动作,使得这个类成 为一个动态的类 .
4.1 相关方法
常用获得类相关的方法:
常用获得类中属性相关的方法:
获得类中构造器相关的方法:
获得类中方法相关的方法:
获取class对象的相关方法:
5.使用
四.枚举
1.背景及其定义
枚举是在JDK1.5以后引入的。主要用途是:将一组常量组织起来,在这之前表示一组常量通常使用定义常量的方式,但是常量举例有不好的地方,例如:可能碰巧有个数字1,但是他有可能误会为是RED,现在我们可以直接用枚举 来进行组织,这样一来,就拥有了类型,枚举类型。而不是普通的整形1。
本质:自己写的枚举类,是 java.lang.Enum 的子类,就算没有显示的继承Enum,但是其默认继承了 这个类。
2.使用
2.1 switch使用
2.2 方法使用
2.3 带参数的构造方法
3.访问枚举类的私有方法及其失败原因
五.lambda表达式
1.概念
Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达 式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体
语法:
1. paramaters:类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明 也可不声明而由JVM隐含的推断。另外当只有一个推断类型时可以省略掉圆括号。
2. ->:可理解为“被用于”的意思
3. 方法体:可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反 回,这里的代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不反回。
2.使用
3. 函数式接口
要了解Lambda表达式,首先需要了解什么是函数式接口
定义:一个接口只有一个抽象方法
注意:如果我们在某个接口上声明了 @FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接 口,这样如果有两个抽象方法,程序编译就会报错的。所以,从某种意义上来说,只要你保证你的接口中只 有一个抽象方法,你可以不加这个注解。加上就会自动进行检测的。
定义方式:
4.lambda表达式的使用
5.变量捕获
在匿名内部类或lambda表达式中,只要用到了重写方法外部的变量,该变量就会有和被 final 修饰的变量一样的性质,不能被修改
举例:
6.Lambda在集合当中的使用
为了能够让Lambda和Java的集合类集更好的一起使用,集合当中,也新增了部分接口,以便与Lambda表达式对 接。