基础知识
概念
JDK
JRE
JVM
- 先编译,再执行。先用
javac
编译.java
文件成.class
文件,再用java
执行。
JDK
环境搭建,下载,安装。
安装的时候遇到问题:
点击下一步没有反应,然后在某处看到是百度输入法的问题,试试把百度输入法切换到系统输入法就好了。
配置环境变量:
问题:java 不是内部或外部命令,也不是可运行的程序
window10 路径:控制面板 -> 系统 -> 高级系统设置 -> 环境变量
在系统变量中,新建:
- 变量名:
JAVA_HOME
- 变量值:
C:\Program Files\Java\jdk1.8.0_321
安装目录
再到变量名Path
中,新建:
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
Java 平台
- Java SE: 桌面程序
- Java EE: web 程序
- Java ME:移动程序
工具
- 开发工具:
eclipse
类型转换
数据类型
基本数据类型
整数类型:byte,short,int,long
浮点数类型:float,double
字符类型:char
布尔类型:boolean
引用类型
- 所有 class 和 interface 类型,除了上述基本类型其它都是引用类型
反射
在程序运行时动态创建对象,动态调用方法,动态修改属性。
大多数 Java 框架都是基于反射实现参数配置、动态注入等特性。
反射的核心类
Class
:类的对象Constructor
:类的构造方法Method
:类的方法Field
:类的成员变量
Class 核心方法
- Class.forName("类名"):返回类的对象
- Class.newInstance():返回类的实例
- Class.getConstructors():返回类的所有构造方法
- Class.getMethods():返回类的所有 public 修饰方法
- Class.getFields():返回类的所有 public 修饰成员变量
Lambda 表达式
JDK8 开始支持,用来让代码更简洁,更易读。更简洁的实现匿名内部类与函数声明与调用。
约束条件:Lambda 表达式只能用来实现函数式接口。
函数式接口:只有一个抽象方法的接口。
语法
参数列表 -> 方法体
- 参数列表:参数类型可以省略,如果只有一个参数,小括号可以省略
- 方法体:如果只有一条语句,大括号可以省略,如果有返回值,return 也可以省略
(int a, int b) -> a + b
1
函数式编程
函数式编程是基于 lambda 表达式的编程方式。
函数式编程理念是将代码作为可重用数据带入到程序运行中。非常灵活,非常轻松。
- 函数式接口:只有一个抽象方法的接口
- 函数式编程:基于 lambda 表达式的编程方式
Java 函数式接口
常用接口:
- Predicate:有参数,返回 boolean
- Function:有参数,有返回值
- Consumer:有参数,无返回值
- Supplier:无参数,有返回值
添加注解
@FunctionalInterface
:标记函数式接口
通知编译器这是函数是接口,如果接口中有多个抽象方法,编译器会报错。
Stream 流式处理
是建立在 Lambda 表达式基础上的一种数据处理方式。
对集合数据处理进行高度抽象,让我们用一种声明式的方式来处理数据,极大简化代码量,实现对集合的快速处理,迭代、去重、筛选、排序、聚合等一系列处理。
特点
- 不是数据结构,不会保存数据
- 不会改变源对象,会返回一个持有结果的新 Stream
- 惰性求值,只有终止操作的时候才会执行
流的操作
- 创建流
- 中间操作
- 终止操作
创建流
- 通过 Stream.of() 创建流
- 通过集合创建流:
stream()
- 通过数组创建流:
Arrays.stream()
- 创建无限流:
Stream.iterate()
,Stream.generate()
中间操作
- forEach:遍历
- filter:过滤
- limit:限制
- map:映射
- flatMap:扁平化
- skip:跳过
- sorted:排序
- distinct:去重
- count:计数
- collect:收集
终止操作
- allMatch:所有元素都匹配
- anyMatch:任意一个元素匹配
- noneMatch:所有元素都不匹配
- findFirst:返回第一个元素
- findAny:返回任意一个元素
- max:返回最大值
- min:返回最小值
- reduce:规约
- forEachOrdered:有序遍历