前言 JAVA语言概述
- 高级编程语言
- 适合B/S(Broswer/Serv)
- Java版本 版本5和8牙膏挤的多
- 能做什么?举例:电商系统、物流系统、金融系统、大数据挖掘
引言 计算机基础知识
二进制
逢二进一,计算机中全部采用二进制数0/1表示,1位信息为1bit
- 十进制转二进制
一直除2,取所产生余数的逆序排列 - 二进制转十进制
权重乘系数和 - 工具
计算机->计算器->程序员
HEX/DEC/OCT/BIN
16/10/8/2
字节
- 位(bit):一个数字0或者数字1,代表一位
- 字节(Byte):每逢8位是一个字节,是数据存储最小单位
- 1Byte = 8 bit
- 宽带bps和***Bps之间的关系
- 1KB = 1024 Byte
- 1MB = 1024 KB
- 1GB = 1024 MB
- 1TB = 1024 GB
- 1PB = 1024 TB
- 1EB = 1024 PB
- 1ZB = 1024 EB
命令提示符_基本介绍
- 图形化界面、命令行
- 命令提示符(cmd)
- / 正斜杠
- \ 反斜杠
- 启动:WIN+R -> cmd
- 黑窗口->计算机中的目录与地址
命令提示符_常用命令
- 切换盘符:
C:
根目录\ - 改变路径
cd
TAB键自动补全 - 返回上一级
cd ..
- 绝对路径
cd 文件夹1\文件夹2...
cd \
- 查看当前文件夹内容
dir
- 清屏
cls
- 退出
exit
第一章Java语言开发环境搭建
Java虚拟机--JVM(Java Virtual Machine)
- JVM
JVM是运行所有Java程序的假想计算机,是Java程序的运行环境,即我们编写的Java代码都运行在JVM之上。 - 跨平台
任何软件的运行,都必须运行在操作系统之上,而我们用Java编写的软件可以运行在任何操作系统上,统称为 Java语言的跨平台特性 。该特性是有JVM实现的,我们编写的程序运行在JVM上,而JVM运行在操作系统上。
如图,Java的虚拟机本身不具备跨平台功能,而是每个操作系统下都有不同版本的的虚拟机。 - 打个比方,Java程序是中国话,WINDOWS是韩国,win版JVM就是韩国翻译;Linux系统是日本,linux版JVM就是日本翻译;mac系统是老美,mac版JVM就是美国翻译*
JRE和JDK
- JRE(Java Runtime environment):是Java程序运行时的环境,包含JVM和运行时所需要的核心类库
- JDK(Java Development Kit):是Java程序开发工具包,包含JRE和开发人员使用工具。电工包里面的电笔、电线...
我们想要运行一个已有的Java程序,那么只需要安装JRE即可
我们想要开发一个全新的Java程序,那么需要安装JDK
三者包含关系如下图:
JDK的下载和安装
- ORACLE
- 版本
- 之前在HOW2J学习安装过,不详述
环境变量配置
- 命令行窗口不能直接启动java.exe
- 为了能直接启动,不需要进入bin目录再启动
- 思路:建立一个jAVA_HOME的名字,然后内容是bin的上一级目录,再在Path中添加JAVA_HOME,重启命令行
第三章 Hello World入门程序
程序开发步骤说明
- Java程序开发三步骤:编写、编译、运行
- java源程序 -> java字节码 -> JVM运行
- java源代码编辑器 -> javac.exe编译 -> java.exe解释器运行
- HelloWorld编写 创建文本文件 -> 将.txt后缀改为.java后缀 -> 记事本打开 -> 编写代码
- 编译运行:进入命令行界面 -> 进入.java所在目录 -> 输入
javac HelloWorld.java
-> 目录中生成.class文件 -> 命令行中输入java HelloWorld
->显示HelloWorld!!! - 介绍notepad++
- 注释 单行注释
//
多行注释/*多行注释,也称区块注释*/
- tips1:第一行第三个单词要与文件名一致,大小写也要一样,public class后面代表定义一个类的名称,类是java中所有源代码的基本组织单位
- tips2:第二行的内容是万年不变的固定写法,代表main方法,且这一行是程序执行的起点
- tips3:System.out.println("")是输出语句
- tips4:完整语句后要加英文分号;
- 关键字的特点:1、完全小写的字母 2、特殊颜色
- 标识符:类名,方法名,变量名都是标识符。包含字母、数字、美元符号和下划线_。标识符不能以数字开头;不能是关键字。
- 标识符软性建议:类名规范:大驼峰式;变量名规范:小驼峰式;方法名规范:同变量名,小驼峰式。
第四章 常量
常量
程序运行期间,固定不变的量
常量分类
- 字符串常量:凡是用引号引起来的部分,叫做字符串常量。例如:"Hello"、"abc"、"98"
- 整数常量:自然数(无小数点)。例如:100,-250,0
- 浮点数常量:(有小数点)。例如:2.5、-3.3
- 字符常量:凡是单引号引起来的单个字符,叫做字符常量。例如:'a'、'A'、'9'、'中'
- 布尔常量:ture、false
- 空常量:null。代表没有任何数据。
练习
数据类型(基本数据类型和引用数据类型)
- 基本数据类型:四类八种
- 整数型:byte、short、int(默认)、long (int的2^31大概是21亿,如果表示中国人口用int就够了)
- 浮点型:float、double(默认)
- 字符型:char
- 布尔型:boolean
- 引用数据类型
字符串、数组、类、接口、Lambda
注意事项:
1.字符串不是基本类型,而是引用类型
2.浮点数可能是一个近似值,并非精确值
3.浮点数默认是double。如果一定要使用float类型,需要加上后缀F
4.如果是整数,默认是int类型,如果一定使用long,则要加后缀L
第五章 变量
变量
程序运行期间,内容可以发生改变的量
创建一个变量并使用的格式:
数据类型 变量名称;//创建了一个变量 变量名称 = 数据值;//赋值,将右边的数据值,赋值给左边的变量
一步到位的格式:
数据类型 变量名称 = 数据值;//在创建一个变量的同时,立刻放入指定得数据值
赋值溢出
将一个变量的内容,赋值交给另一个变量
boolean var1 = true; boolean var2 = var1;
注意事项:
1.如果创建多个变量,那么变量之间的名称不可重复
2.对于float和long类型来说,字母后缀F和L不可丢掉
3.如果使用byte或者short类型的变量,那么右侧数值不能超过左侧数值
4.没有赋值的变量不能直接使用,赋值之后才能使用
5.变量使用不能超过作用域范围。[作用域]:从定义变量开始,一直到直接所属大括号为止
6.可以通过一个语句来创建多个变量,但是一般情况下不推荐这么写
练习
第六章 数据类型转换
当数据类型不一样时,将会发生数据类型转换
- 自动类型转换(隐式):1.特点:代码不需要特殊处理,自动完成 2.规则:数据范围从小到大
long num1 = 100 //左边是一个long类型,右边是默认的int类型,左右不一样,等号为赋值,将右侧的int常量交给左侧的long变量进行存储,int -- >long,f=符合数据范围从小到大的要求,所以这一行代码发生了自动类型转换
- 强制类型转换:1.特点:代码需要进行特殊的处理 2.格式:范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据
int num2 = int(100L)
- 注意事项
1.强制类型转换一般不推荐使用,因此可能发生精度损失、数据溢出。
2.byte/short/char这三种类型都可以发生数***算,例如加法“+”
3.byte/short/char这三种类型在进行运算的时候,都会被首先提升为int类型,然后再计算
4.布尔类型不能发生数据类型转换
int num3 = (int)6000000000//运行结果为17亿多。int上限是21亿,右侧是60亿,所以溢出,好比大水桶里的水(60亿)倒进小水桶(int),就会有水溢出
int num4 = (int)3.5//小数位会被舍弃,精度损失,运行结果为3
char zifu1 = 'A' System.out.println(zifu1+1)//运行结果为66,yejiushi daxiezimu A被当做65进行处理。65即是A的ASCII码。计算机的底层会用一个数字(二进制)来代表字符A,就是65。
byte5 = 40; byte6 = 50; //byte + byte -->int + int -->int int result1 = num5 +num6 //result1前不是byte!!!尽管数据并没有溢出,不然会报错,因为num5和num6已经是int类型了,和也是int类型 System.out.println(result1)
ASCII编码表和Unicode码表
- ASCII码表(小表):常用字符的二进制值,源自老美
不需要全记,记三个即可‘0’ --> 48, 'A' --> 65, 'a' --> 97
其他的以此类推 - Unicode码表(大表):万国码。也是数字与符号的对照关系,开头0-127部分和ASCII完全一样,但是从128开始包含更多的字符,中文泰文等,甚至有emoji表情。
第七章 运算符
- 运算符:进行特定操作的符号。例如,+
表达式:用运算符连起来的式子叫表达式。例如:20 + 5。又例如:a + b - 四则运算:
加:+
减:-
乘:*
除:/ - 除法公式:被除数/除数 = 商...余数
对于一个整数的表达式来说,除法用的是整除,整数除以整数,结果仍然是整数。只看商,不看余数。 - 取模:%
只有整数的除法,取模运算符才有余数的意义 - 注意事项:一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种
算数运算符
int a = 20; int b = 30; //两个常量之间的数***算 System.out.println(20+30); //两个变量之间的数***算 System.out.println(a-b) //常量与变量之间的混合运算 System.out.println(a * 10) //除法 int x =10; int y = 3; int result1 = x / y; System.out.println(result1) //3 int result2 = x % y; System.out.println(result2) //取模,余数,1 //int + double --> double double result3 = x + 2.5; System.out.println(result3); //12.5
- 四则运算中加号“+”有常用的三种用法
1.对于数值来说就是加法
2.对于字符char来说,在计算之前,char会被提升为int,然后再计算 ,char类型字符和int类型数字之间的对照关系表:ASCII、Unicode
3.对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串连接操作
任何数据类型和字符串进行连接的时候,结果都会变成字符串System.out.println("Hello"+"World");//HelloWorld System.out.println("java" + 2020) //java2020 //优先级问题 System.out.println("java"+ 2020 + 12) //java202012
- 自增自减运算
- 自增运算符:++
自减运算符:-- - 使用方式:
1.单独使用:不和其他操作混合,自己独立成为一个步骤
2.混合使用:和其他操作混合,例如与赋值混合,或者与打印混合等 - 使用区别:
1.在单独使用的时候,前++和后++没有任何区别
2.在混合使用的时候,有[重大区别]
A. 如果是前++,那么变量立刻马上加一,然后拿着结果来用------先加后用------++在前,先自增,在运算
B. 如果是后++,那么首先使用变量本来的值,然后让变量+1------先用后加------++在后,先运算,再自增
//与打印操作混合 int num1 = 30; int num2 = 20; System.out.println(++num1)//31 System.out.println(num1)//31 System.out.println(num2++)//20 System.out.println(num2)//21
//赋值与打印混合使用 int x = 10; int y = 20; result4 = ++x + y-- //11 + 20 System.out.print(result4) //31 System.out.print(x) //11 System.out.print(y) //19
- 注意事项:只有变量才能自加自减,常量不可变,所以不能使用自加自减。
赋值运算符
赋值运算符分为:
- 基本赋值运算符:就是一个等号 “=”,代表将右侧的数据交给左侧的变量
- 复合赋值运算符:
+= : a += 3 相当于 a = a + 3
-=
*=
/=
%= - 注意事项:等号左边必须是变量,常量不可赋值
byte c = 30; c += 5;// //c = c + 5 //c = byte + int //c = int + int //c =int //c = (byte)int System.out.println(c);//35
比较运算符
- 等于 ==
- 大于 >
- 小于 <
- 不小于 >=
- 不大于 <=
- 不等于 !=
- 比较结果是布尔类型true或者false
//不支持写法 System.out.println(1 < x <3);//编译报错
逻辑运算符
- 与 &&
- 或 ||
- 非 !
- 与&&、或||具有短路效果,如果根据左边已经可以判断得到最终结果,那么右边代码将不再执行,从而节省一定性能
System.out.println(3 < 4 && 10 > 5 ) //true
//短路效果 int a = 10; System.out.println(3 > 4 && ++a < 100); //false && ...-->false(**...并不执行!!!**) System.out.println(a);// 10
- 注意事项
逻辑运算符智能用于boolean值
与、或需要左右一个boolean值,但是取反只要有唯一的一个boolean值即可
与、或两种运算符,如果有多个条件,可以连续写。
两个条件:条件A && 条件B
多个条件:条件A && 条件B &&条件C
TIPS:
对于 1<x<3 的情况,应该拆成两部分,然后使用与运算符连接起来
int x = 2; 1<x && x<3
三元运算符
- 一元运算符:只需要一个数据就可以进行操作的运算符。例如:取反!、自增++、自减————
- 二元运算符:需要两个数据就可以进行操作的运算符。例如:加法+、赋值=
- 三元运算符:需要三个数据就可以进行操作的运算符。
格式:数据类型 变量名称 = 条件判断 ? 表达式A : 表达式B
流程:首先判断条件是否成立: - 如果成立为true,那么将表达式A赋值给左侧变量
- 如果表达式为false,那么将表达式B的值给左侧变量
二者选其一
int a = 10; int b = 20; int max = a > b ? a : b; //最大值变量 System.out.println("最大值:" + max);//20 System.out.println(a > b ? a : b);//正确写法 int result = 3 > 4 ? 2.5 :10//错误写法