Java8的特性:
lambda表达式:
可选类型声明:不需要声明参数类型,编译器可以同意识别参数值
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号
可选的大括号:如果主题包含了一个语句,就不需要使用大括号
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回一个数值。、
lambda注意事项:lambda表达式主要用来定义行内执行的方法类型接口。
lambda表达式免去了使用匿名方法的麻烦,并给予Java简单但强大的函数化的编程能力。
方法引用:
可以通过方法的名字来指向一个方法
方法引用可以使语言的构造更加紧凑简洁,减少冗余代码
方法引用四种方式:
构造器引用:语法:Class::new,或者跟一般的Class::new
静态方法引用:语法:Class::static_method
特定类的任意对象的方法引用:语法:Class::method
特定对象的方法引用:语法:instance::method
函数式接口:
有且仅有一个抽象方法,但可以有多个非抽象方法的接口
函数式的接口可以被隐式转化为lambda表达式
默认方法:
默认方法就是接口可以实现方法,而且不需要实现类去实现其他方法
只需要在方法名前面加一个default关键字即可实现默认方法
为了解决接口的修改与现有的实现不兼容的问题
Stream API
新抽象称为流Stream,可以以一种声明的方式处理数据。
Optional类
Optional类是一个null的容器对象,如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象
Optional类的引入可以很好的解决空指针异常
Nashorn,JavaScript引擎
Nashorn完全支持ECMAScript5.1规范以及一些扩展。基于JSP292的新语言特性。可以将JavaScript编译成Java字节码,提升性能2-10倍
Date Time API
旧版的问题很多:非线程安全,设计很差,时区处理麻烦,
Local(本地),Zoend(时区)
JDK与JRE的区别:
JRE面向Java程序的使用者,不是开发者。是运行Java程序所必须环境集合
包含Java虚拟机,Java平台核心类和支持文件,不包含开发工具
JDK:是Java开发工具包,提供Java的开发环境(提供了编译器javac等工具,用于Java文件编译class文件)
和运行环境(提供了JVM和Runtime辅助包,用于解析class文件使其得到运行)
JDK是整个Java核心,包含了Java运行环境(JRE),一堆Java工具tools.jar和Java标准类库(rt.jat)
java:是一门编程语言,用于解决问题,高效、清楚、实用;与计算机交流
CMD:在windows操作系统中,利用命令行操作计算机的方式
打开步骤:win+R ;输入cmd,回车
常见cmd命令
盘符名称+冒号:切换盘符
dir:查看当前目录下所有的内容
cd 文件名 :进入单级文件夹
cd… :回退单级文件夹
cd文件夹名1\文件夹名2:进入多级文件夹cd/ : 回退到根目录
cls:清屏
exit:退出
Javac:将Java文件编译为.class文件,然后用java +文件名:运行文件
配置Path环境变量:可以在任意的目录下打开指定的软件
java三大分类
Java SE(用于桌面应用开发,目的:为后面学习JavaEE打基础)
Java ME(用于嵌入式设备和小型移动设备开发)
Java EE(企业机的服务器开发,在这个领域Java当之无愧)
JVM:虚拟机,是代码真正运行的地方
JRE:包含了JVM和核心类库
JDK:包含了JRE和开发工具 程序员:JDK 使用者:JRE
Java特点
用户量大,适用面广,与时俱进,自身特点(面向对象)
Java的主要特征:安全行,多线程,简单易用,开源,跨平台
注释:内容不会参与编辑和运行,仅仅是对代码的解释说明
不管单行注释还是多行注释,在书写的时候不要嵌套
代码在编译之后,class文件里面没有注释信息,会做一个注释擦除
关键字
被Java赋予了特定含义的英文单词
关键字的字母全部小写,常用的代码编辑器,针对关键字有特殊颜色标记,直观
关键字:assert,const,long,public,final,continue,goto,static,while,strictfp
abstract,default,int,extends,void,boolean,break,throws,volatile,transient,
native,double,import,short,interface,else,super,new,throw,instanceof,
case,enum,package,for,protected,if,try,switch,return,sychronized,
catch,extends,private,byte,float,class,finally,this,char,implements
class关键字表示定义一个类,后面跟随类名;类名后面跟随一对大括号,表示类的范围
public关键字:当public写在class前面的时候,表示强制让文件名跟类名一定要保持一致
没有一致,代码会报错
建议:习惯养成:一个Java文件中,只写一个Java类,
这个是public关键字的第一个作用,第二个作用我们会在面向对象的时候学习
整数类型:不带小数点的数字,
小数类型:带小数点的数字
字符串类型:用双引号括起来的内容
字符类型:用单括号括起来,且内容只能有一个
布尔类型:布尔值,表示真假
空类型:一个特殊的值,空值
变量
在程序的执行过程中,其值有可能发生改变的量(数据)
当某个数据经常发生改变时,我们可以用变量存储,当数据变化时,只用修改变量里面记录的值即可
数据类型 变量名=数据值(数据类型:为空间中存储的数据,加入类型限制)
变量名:为空间起的名字;数据值:存在空间里面的数值;分号:表示语句的结束
变量的使用方式:输出打印,参与计算,修改记录的值
变量注意事项:只能存一个值,变量名不允许重复定义,一条语句可以定义多个变量
变量在使用前一定要赋值,变量的作用域范围
建议:虽然变量的定义和赋值可以分开写,但不建议;
建议在以后写代码的时候,定义变量直接给值
第一次课要求
Java跨平台原理,能说出JDK,JRE,JVM的作用和关系
能运用JDK的下载与安装,配置JDK的环境变量,编写helloworld案例
使用注释,关键字,常量;使用变量编程,使用标识符
Scanner:这个类用于接受键盘输入的数据
运算符:对字面量或者变量进行操作的符号
表达式:用运算符把字面量或者变量连接起来,符合Java语法的式子成为表达式
算术运算符:加+、减-、乘*、除/、取模%
加法:数字进行运算是,数据类型不一致不能运算。
类型转化的分类
隐式转化:数据类型不一致,取值范围小的数值会转化成取值大的数值。(自动类型提升)
两种提升规则:取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算;byte,short,char三种类型的数据在运算的时候,都会直接提升为int,然后再进行运算。
强制转化:把取值范围大的数值转化为取值范围小的数值;
格式:目标数据类型 变量名=(目标数据类型)被强转的数据;
字符串相加:加号+出现在字符串的操作时,作为连接符。将前后拼接,并产生一个新的字符串;连续执行+操作时,从左到右逐个执行;
字符的+操作:ASCII码表:0:48,A:65,a:97
找某个字符的ASCII码:加0 char e=‘a’; int f=e+0;
自增自减运算符:++:变量的值加一;–:变量的值减一;可以放在变量的前面和后面;
运算符
赋值运算符:
赋值:= 加后赋值:+= 减后赋值:-= 除后赋值:/=
乘后赋值:*= 取余后赋值:%= (扩展的赋值运算符隐含了强制类型转换)
==与equals的区别:
· “==”是运算符,如果是基本数据类型,则比较****存储的值*;如果是引用数据类型,则比较*所指向对象的地址值****。
· equals是Object的方法,比较的是****所指向的对象的地址值*,一般情况下,重写之后比较的是*对象的值****。
==运算符和 equals() 方法,==运算符是比较两个引用变量是否指向同一个实例,
equals() 方法是比较两个对象的内容是否相等,通常字符串的比较只是关心内容是否相等
关系运算符:
==:相等 !=:不相等 >:大于 >=:大于等于 <:小于 <=:小于等于
注意事项:关系运算符的结果都是boolean类型,要么是true,要么是false
逻辑运算符:
& :逻辑与(并且),两边为真为真 |:逻辑或(或者)两边为假才是假
^:逻辑异或(相同为false,不同为true) !:取反
&&短路与 ||短路或
两者的区别:& 、|无论左边是否成立,右边都会执行
&&:如果左边为false,则不在判断右边的结果
||:如果左边为true,则右边不再判断
三元运算符:
定义一个变量记录量个数值 格式:关系表达式?表达式1:表达式2
int max=(a>b?a:b) 三元运算符:要么使用变量接受,要么直接打印输出
流程语句
顺序结构,判断分支结构,循环1结构
if语句:
执行流程:自上而下
细节:当if语句结构语句体只有一行代码时,可以省略{}不写,但为了阅读性更强,建议加上。
if(关系表达式){}else{} if(关系表达式1){}else if(表达式2){} else{}
Switch语句
1先计算表达式的值 2依次和case后面的值进行比较,如果有对应的值,就返回数据,break结束
break后,跳出循环
case:后面接要跟表达式进行比较的值 break:表示中断
如果匹配一个范围:推荐使用if else if结构;如果匹配针对条件,用switch
while循环
初始化语句;while(条件判断语句){循环体语句;条件控制语句}
控制循环的变量,对while循环来说不属于其循环语句中,while结束后还可以使用
for循环:知道循环次数和范围;while循环:只有条件,不知道循环次数;
do-while循环:无论条件是否成立,都要执行一次循环体代码,就可以使用。
do-while循环
初始化语句;do{循环体语句;条件控制语句}while(条件判断语句);
先执行,再判断
循环高级
无限循环:
循环一直不会停下来
跳转控制语句:
在循环过程中,跳到其他语句上执行;
continue:跳过本次循环,继续执行下次循环
break:结束本次循环,不再执行下面操作。
Random
random再方法生成时,不包含范围的值;
数组
数组时一种容器,可以用来储存同种数据类型的多个值
数组容器再储存数据的时候,需要结合隐式转化考虑
定义数组:数据类型[] 数据名;数据类型 数据名[]
初始化:在内存中,为数组容器开辟空间,并将数据存入容器中的过程
索引:下标,角标;特点:从0开始,逐个+1;连续不间断
数组遍历:将数组的内容取出来的过程
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
格式:数据类型[] 数组名=new 数据类型[数组长度]
区别:动态初始化:手动指定数组长度,由系统给出默认初始值
静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度使用场景:动态初始化:只明确元素个数,不明确具体数值
静态初始化:需求中已经明确了要操作的具体数据,直接静态初始化即可
数组常见问题:当访问了数组不存在的索引时,会数组越界异常
空指针异常:只是进行了一个null,没有进行new创建
Java内存(扩展)
寄存器:给CPU使用,和开发无关
本地方法栈:JVM在使用操作系统功能的时候使用,和我们开发无关
方法区:储存可以运行的class文件
堆内存:存储对象或者数组,new来创建的,都储存在堆内存中
方法栈:方法运行时使用的内存,比如main方法(压栈)
程序运行结束后,main方法就会弹栈消失
两个数组指向同一个空间:将一个数组的地址赋值给另一个数组
方法
方法是程序中最小的执行单元
方法的使用场景:可以打包使用,用的时候调用;不调用,方法里面的代码就不会执行
方法的作用:提高代码的重复性;提高代码的可维护性
方法的定义和调用
前提:把一些代码打包起来,用到的时候就调用
格式:方法名();
注意:方法必须先定义,都调用,否则报错
带参数方法的定义和调用
单个参数定义:public static void 方法名(参数){}
多个参数定义:public static void 方法名(参数1,参数2,…){}
注意:方法调用时,参数的数量与类型必须与方法定义中小括号里面的遍历一一对应,否则程序报错
形参:形式参数,方法定义中的参数
实参:实际参数,方法调用中的参数
方法的返回值
方法的返回值就是方法运行的最终结果
public static 返回类型 方法名(参数){方法体;return 返回值};、
直接调用:方法名(实参)|没有意义,没得输出
赋值调用:数据类型 变量名=方法名(实参)
输出调用:sout(方法名(实参));
方法重载
概述:在一个类中,定义了多个同名的方法,但每个方法具有不同的参数类型或者参数个数,这些同名的方法,就构成了重载关系。
方法名相同,参数不同的方法,与返回值无关。