Java是sun公司推出的(1995年),但在09年Oracle收购了sun;
二进制与十进制的相互转换:乘基取整(0.3并不能准确的用二进制表示);除基取余;
字节:计算机中存储的最小存储单元(并不是位)。 KMGTPEZ
命令提示符常用命令:(tab切换)
- 启动命令提示符 win+R→cmd
- 切换盘符 盘符:(d:)
- 进入文件夹 cd文件夹名称
- 进入多级文件夹 cd 文件夹1\文件夹2\文件夹3
- 返回上一级 cd..
- 直接回根路径 cd \
- 查看当前内容 dir
- 清屏 cls
- 关闭命令提示符 exit
Java语言具有跨平台特性,该特性是由jvm实现的,程序运行在jvm中,而jvm运行在OS中(每个OS有自身的jvm)。
想运行一个已有的程序,只需安装JRE;若想开发一个全新的,必须安装JDK;
JDK→JRE→jvm
JRE (java Runtime Environment)是Java程序的运行时环境,包含jvm和运行时所需要的核心类库;
JDK (Java development kit)是Java程序开发工具包,包含JRE和开发人员使用的编译器等开发工具;
搭建Java开发环境:源码必须通过javac编译工具进行翻译,然后再通过Java执行工具执行。
JDK最好选择8/11/17版本的(LTS版本);11以上可直接执行源程序。
JDK中最重要的2个命令程序:Java(执行工具)、javac(编译工具)命令行中输入观察看是否报错;
输入Java -version;javac-version;查看版本号,验证是否安装成功;
Path环境变量用于记住程序路径,方便在命令行窗口的任意目录启动程序。
JAVA_HOME告诉了操作系统JDK安装在了哪个位置,将来其他技术要通过他找到JDK
程序开发步骤:编写、编译、运行
Java源程序(.java)→编译器(javac.exe)→Java字节码文件(.class)→jvm运行
Java.exe是解释器
Cmd中用javac进行编译,用java进行运行。
Eg: Javac demo1.java; java demo1;
Java区分大小写
Java注释:
单行注释://
多行注释(区块注释):/* */
类名必须和所在文件名称一样,类是Java中所有源代码的基本组织单位
main方法:程序执行的起点
关键字:(完全小写)
标识符:
自定义的名称,比如类的名字,方法的名字和变量的名字;
可以包含英文字母(区分大小写)、数字、$、_;
不能以数字开头,不能是关键字
类名:大驼峰式HappyDay
变量名和方法名:小驼峰式happyDay
常量:在程序运行期间,固定不变的量
- 字符串常量 “abc” “123”
- 整数常量 100 -90 0
- 浮点数常量 2.5 -3.14 0.0
- 字符常量(有且仅有一个字符) ‘q’ ‘9’ ‘中’
- 布尔常量 true false
- 空常量(不能直接打印null,就让他空着就行) null
变量:程序运行期间,内容可以发生改变的量;没有赋值的变量不能直接使用;
创建一个变量:
数据类型 变量名称=数据值;
对于float和long类型,FL不能丢掉,对于byte和short,右侧的数据值不能超过左侧类型的范围。且变量使用不能超过作用域。
数据类型:
- 字符串不是基本类型,而是引用类型;
- 浮点数可能只是一个近似值,并非精确的值;
- 数据范围与字节数不一定相关,例如float数据范围比long更加广泛,但是float是4字节,而long是8字节;
- 浮点数当中默认类型是double。如果一定要使用float类型,需要加上一个后缀F。如果是整数,默认类型为int类型,如果一定要使用long类型,需要加上后缀L。
基本数据类型:
整数型:byte(1B) short(2B) int(4B) long(8B)
浮点型:float(4B) double(8B)
字符型:char(2B)
布尔类型:boolean(1B)
引用数据类型:字符串、数组、类、接口、lambda
数据类型转换:
自动类型转换(隐式)
- 特点:代码不需要进行特殊处理,自动完成。
- 规则:数据范围从小到大
强制类型转换(显式)
- 特点:代码需要进行特殊的格式处理,不能自动完成。
- 格式:范围小的类型 范围小的变量名=(范围小的类型) 原本范围大的数据
表达式的自动类型转换:
在表达式中,小范围类型的变量会自动提升成大范围运算。表达式的最终结果类型是由其最高数据类型决定,最高数据类型是什么,其结果数据的类型就是什么。Eg: byte、short、char在表达式中,是直接提升成int运算。
强制类型转换:
大范围类型的变量或者数据不能直接赋值给小范围类型的变量,否则报错!必须进行强制类型转换才可以。强转可能会导致数据丢失,即数据溢出,浮点类型的变量或者数据强制转换为整型,保留整数部分返回的,小数部分直接不要了。
注意事项:
强制类型转换一般不推荐使用,因为有可能发生精度丢失,数据溢出;
Byte/short/char这三种类型在运算的时候,都会首先提升为int型,然后再计算
Boolean类型不能发生数据类型转换。
ASCII编码表
48:0 65:A 97:a
运算符
算术运算符:+ - * / %
整数乘除的结果一定是整数:10/3=3 → 1.0*10/3=3.33333
一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的的那种。
加号+:
对于数值,就是加法
对于字符char类型,计算前,char会被提升成为int,然后再计算。
对于字符串String类型,代表连接操作
任何数据类型和字符串进行连接的时候,结果都会变成字符串
自增自减
自增运算符:++
自减运算符:--
单独使用时,前++和后++没有任何区别,是完全一样的。
但混合使用时:
A:前++ ++i 先+1再使用
B:后++ i++ 先使用后+1(拿走的是原来的数,暂时未+1)
赋值运算符
基本赋值运算符:=
复合赋值运算符:+=、-=、*=、/=、%=; a+=3(自带强转)→a=a+3
只有变量才能使用赋值运算符,常量不能赋值;复合赋值运算符其中隐含了一个强制类型转换;
比较运算符
== < > <= >= !=
比较运算符的结果一定是一个boolean值,成立就是true,不成立就是false;
逻辑运算符
与(并且):&& 全1为1 &(逻辑与);&&(短路与);
或(或者):|| 全0为0 |(逻辑或); ||(逻辑与);
非(取反):! ^异或操作;
与或具有短路效果,如果根据左边的已经可以判断得到最终结果,那么右边的代码将不再执行,从而节省一定的性能。
- 逻辑运算符只能用于boolean值
- 与或需要左右各自有一个boolean值,但是非只需一个
三元运算符
一元运算符:只需一个数据就可以进行操作的运算符。取反!、自增++、自减- -
二元运算符:需要两个数据才可以进行操作的运算符。加法+、赋值=
三元运算符:数据类型 变量名称 = 条件判断 ?表达式A :表达式B;
max=a>b?a:b
流程:首先判断条件是否成立:如果成立为true,那么将表达式A的值赋值给左侧的变量。如果不成立为false,那么将表达式B的值赋值给左侧的变量。二者选其一
方法:先后顺序无所谓,调用后才执行
public static void main(String[ ] args){
farmer( );
}
public static void farmer( ){
}
对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含地为我们补上一个(byte)/(short)/(char)
- 如果没有超过左侧的范围,编译器补上强转。
- 如果右侧超过了左侧范围,那么直接编译器报错
- short+short→int+int→int
- 当右侧全是常量时,编译器会进行常量优化。
顺序结构
自上而下的执行代码
判断语句if else:区间匹配
可与三元运算符等效替换
选择语句switch:值匹配
switch(表达式){
case 常量值1:
语句体1;
break;
…
default: 如果所有的都不匹配,则执行default部分。
语句体n+1;
break; 这个break可省略
}
注意事项:1、多个case后的数值不可以重复;
2、Switch后的小括号当中只能是byte/short/char/int/String/enum枚举
3、Switch语句格式可以很灵活,前后顺序可以颠倒,而且最后一个break
可以省略,匹配后直到遇到break或者整体结束为止。
循环语句
for
for(初始表达式①;布尔表达式②;步进表达式④){
循环体③
}
While
初始表达式①;
While(布尔表达式②){
循环体③
步进表达式④
}
do while
初始表达式①;
do{
循环体③
步进表达式④
}while(布尔表达式②)
三种循环的区别
- 如果条件判断从来没有满足过,那么for循环和while循环将会执行0次,但是do while循环会执行至少一次。
- For循环的变量在小括号中定义,只能在循环内部使用。While循环和do while循环初始化语句本来就在外面,只有for循环自己才能使用。
- 凡是次数确定的场景多用for循环,否则多用while循环。
循环控制语句
break
- 可以用在Switch语句当中,一旦执行,整个Switch语句立刻结束。
- 可以用在循环语句当中,一旦执行,整个循环语句立刻结束,打断循环。
continue
一旦执行,立刻跳过当前次循环剩余内容,马上开始下一场循环。
死循环
While(true){
循环体
}
循环嵌套
循环次数为外层循环次数*内层循环次数