1. Java语言的发展史
java是哪家公司哪一年推出的?
sun公司在1995推出的编程语言
java之父是谁?
詹姆斯.高斯林
java的主要发展历程?
1995由sun公司推出。
2004推出JDK1.5,这是里程碑式的版本。
2009年sun公司被oracle(甲骨文公司)收购。
目前最新版本JDK12。
java的三大技术架构
JavaSE:java标准版,主要用于桌面应用软件的开发。比如计算器,QQ软件等。
JavaEE:java企业版,基于JavaSE的企业级应用的开发。比如淘宝,京东,ERP系统等。(大型互联网)
JavaME:java微型版,应用于移动设备和电子类产品的嵌入式开发。比如手机游戏,手机软件等。(安卓,IOS,HTML,微信小程序)
2. Java语言跨平台原理
java语言的特点
java语言具有简单易学、面向对象、健壮性、安全性、与平台无关性等特点。
什么是平台?
平台即操作系统,目前主流的有微软Windows系统,苹果Mac系统,Linux系统
什么是java跨平台?
通过java语言编写的应用程序可以在不同的操作系统上直接运行。具有一次编译,到处运行的特点。
java如何实现跨平台?
通过JVM虚拟机实现的跨平台。在不同的操作系统上安装对应的JVM虚拟机。
java跨平台的原理
java程序并非是直接运行的, javac编译器将java源程序(.java文件)编译成与平台无关的字节码文件(.class文件),然后通过java运行工具启动java虚拟机,由java虚拟机(JVM)对字节码文件解释执行。所以在不同的操作系统下, 只需安装不同的java虚拟机即可实现java程序的跨平台
3. JVM、JRE、JDK
JVM、JRK、JDK三者之间的关系
JVM:Java虚拟机,保证java程序跨平台。
//JVM保证java程序的跨平台性
JRE:Java运行环境,包含JVM和核心类库。如果只是想运行java程序,只要安装JRE即可。
//JRE=JVM+核心类库
核心类库包括:java.util包中的Random/Scanner/Arrays等
JDK:Java开发工具包,包含JRE和开发工具。如果程序员想要开发java程序,需要安装JDK环境
//JDK=JRE+开发工具
开发工具包括:编译工具javac.exe ,运行工具java.exe 等
JVM、JRE、JDK关系图解
4. 常用的DOS命令
进入DOS命令行窗口
快捷键win + R打开运行窗口,输入cmd,按回车进入。
常用DOS命令
操作 | 说明 |
---|---|
盘符名称 | 盘符切换。E:回车,表示切换到E盘 |
dir | 查看当前路径下的内容 |
cd 目录 | 进入单级目录。cd develop,表示进入develop文件夹 |
cd … | 回退到上一级目录 |
cd 目录1\目录2… | 进入多级目录。cd develop\java,表示进入develop下的java文件夹 |
cd \ | 回退到盘符根目录 |
cls | 清屏 |
exit | 退出命令提示符窗口 |
5. Path环境变量的配置
什么是环境变量
环境变量:指在操作系统中用来指定操作系统运行环境的一些参数
为什么要配置环境变量
开发java程序, 需要使用JDK提供的开发工具(比如javac.exe、java.exe等命令),而这些工具在JDK的安装目录的bin目录下,如果不配置环境变量,那么这些命令只可以在该目录下执行。 我们不可能把所有的java文件都放到JDK的bin目录下, 所以配置环境变量的作用就是可以使bin目录下的java相关命令可以在任意目录下使用。
常见配置的环境变量
环境变量名 | 作用 |
---|---|
JAVA_HOME | 指 JDK 安装的根目录,如:C:\develop\Java\jdk-11 |
PATH | 指 java 开发工具的位置,如:C:\develop\Java\jdk-11\bin |
CLASSPATH | 指 JVM 在运行时到哪一个目录去加载字节码文件 |
6. 注释
注释的作用?
对代码进行解释说明,便于开发人员理解和维护代码。
注释不会被程序编译和运行。
注释的分类?
单行注释 // 注释内容,单行注释可以嵌套。
多行注释 /* 注释内容 /,多行注释不能嵌套使用。
文档注释 /* 注释内容 */,文档注释不能嵌套使用。
7. 关键字
什么是关键字?
在java语言中有特殊意义的英文单词。
java关键字的特点?
单词全部小写。
在高级开发工具中,关键字会有特殊的颜色标记。
java中的关键字/保留字
goto和const是java中的预留关键字(goto和const也叫保留字)。
8. 常量
什么是常量?
在程序运行过程中,其值不可以发生改变的量。
常量的分类
字符串常量:使用双引号 "" 括起来的0到多个字符。"java" ,"程序员" , "" , " ","A" // 大于等于0个字符
字符常量:使用单引号 '' 括起来的单个字符。 'a' , '0' ,'我' //1个字符
整数常量:正负整数 10 -20
小数常量:带小数点的数字 -3.14 5.12
布尔常量:表示真或假,只有true或false两个值
空常量:值为null,不能使用输出语句直接输出。//System.out.println(null),会编译报错
定义的final变量
9. 数据类型
java是强类型的语言,每一个数据都有对应的数据类型。
位:计算机计算的基本单位,计算机底层是二进制 0 1
字节:计算机存储的基本单位,1字节=8位。
java数据类型分类?
基本数据类型:4型8种
整数:byte short int long (整数默认是:int类型)
小数:float double (小数默认是:double类型)
字符:char
布尔:boolean
引用数据类型:字符串,数组,类,接口 ,null
基本数据类型分类
1.定义 long 类型加L
int number = 100L;
2.定义 float 类型加F
int f = 10.0F;
10. 变量
什么是变量?
变量指程序运行过程中,其值在一定范围内会发生变化的量。
变量的定义格式
数据类型 变量名 = 初始化值
int a = 12;
变量的分类
成员变量:(也叫全局变量,字段)
直接定义在类中,方法外,默认有初始值
1.类成员变量:使用static修饰符修饰的成员变量
2.实例成员变量:没有使用static修饰符修饰的成员变量
局部变量:变量除了成员变量之外,其他就是局部变量
分为:方法形参,方法内变量,代码块变量
没有初始化值,必须先初始化才能使用
变量使用的注意事项
1、变量可以定义时初始化,也可以先定义,使用前进行初始化。
//定义的时候初始化
double d = 3.14;
//先定义,后初始化
double d;
d = 3.14;
2、没有初始化的变量不能直接使用。
int a ;
System.out.println(a); //编译报错,
3、相同范围内,变量名不能重复。
//第一种:方法的形参上变量名不能相同
public static void sum(int a,int a){ //编译报错
}
//第二种:一对 {} 内变量名不能相同
public static void sum(){
int a = 10; //编译报错
int a = 20; //编译报错
}
4、整数默认是int类型,定义long类型时需要加L 或者l,建议加L。
long num = 10L;
5、小数默认是double类型,定义float类型的时候需要在数字后面加F或者f,建议加F。
float f = 3.14F;
6、一行代码上可以定义多个变量。(不推荐)
int a=10,b=20;
int a,b =20;
a=10;
变量的生命周期
存在位置 | 生命周期开始 | 生命周期结束 | 在内存中的位置 | |
---|---|---|---|---|
类成员变量 | 使用static修饰的成员变量 | 当所在字节码被加载进JVM | 当JVM停止 | 方法区 |
实例成员变量 | 没有使用static修饰的成员变量 | 当创建所在类的对象的时候 | 当该对象被垃圾回收器回收 | 堆 |
局部变量 | 方法形参,代码块中,方法内 | 当代码执行到初始化变量的时候 | 所在的方法/代码块结束 | 栈 |
11. 标识符
标识符的作用
给 包,类,方法,变量起名的符号。
标识符的组成规则
大小写英文字母、数字、下划线_、美元符$、中文(不推荐)
注意事项:
1、不能是数字开头
2、不能是关键字
3、区分大小写
标识符的命名规范
小驼峰式命名:变量名、方法名
第一个单词首字母小写,从第二个单词开始每个单词的首字母大写。
userName,maxValue等
大驼峰式命名:类名
每个单词的首字母都大写。
String, ArrayList等
建议:标识符的起名尽量做到见名知意。
12. 类型转换
隐式类型转换(自动类型转换)
从范围小的类型到范围大类型的转换,系统会自动进行类型提升,称为自动类型转换。
1.boolean不参与类型转换
2.byte不能自动类型转换为char
3.char不能自动类型转换为short
4.short不能自动类型转换为char
强制类型转换
从范围大的类型到范围小的类型的转换,需要进行强制类型转换。
格式:
目标数据类型 变量名 = (目标数据类型)变量值(常量值);
弊端:会造成数据精度丢失。尽量少用强制转换。
1.boolean不参与类型转换
2.char可以强制类型转换为byte
3.short可以强制类型转换为char
4.char可以强制类型转换为short
13. 运算符和表达式
运算符:对常量或者变量进行操作的符号。
表达式:通过运算符连接起来的式子
例如:
+ 是运算符,10 + 20 是表达式
- 是运算符,a - b 是表达式
常用的运算符
算术运算符、赋值运算符、自增自减运算符、关系运算符、逻辑运算符、三元运算符
13.1 算术运算符
符号 | 作用 | 说明 |
---|---|---|
+ | 加 | 对数字进行加法运算,对字符串进行拼接 |
- | 减 | 进行减法操作 |
* | 乘 | 进行乘法操作 |
/ | 除 | 整数相除的结果只能是整数,想要得到小数,必须有浮点数参与运算。 a / b ,获得 a 和 b 的商 |
% | 取余 | a%b 获得 a 和 b 相除的余数 |
13.1.1 表达式类型提升
byte、short、char变量之间进行运算时,类型自动提升为int。
变量参与运算时,最终结果以最高类型为准。
/*
表达式类型提升:
1. byte、short、char变量之间进行运算时,类型自动提升为int。
2. 变量参与运算时,最终结果以最高类型为准。
*/
public class OperatorDemo02 {
public static void main(String[] args) {
// 1、byte、short、char变量之间进行运算时,类型自动提升为int。
byte b = 10;
//编译报错,b+5,变量b会自动提升为int类型,运算结果为int,赋值给byte需要强转。
// byte b2 = b + 5;
int b2 = b+5;
System.out.println(b2);
// 2. 变量参与运算时,最终结果以最高类型为准。
int num1 = 10;
long num2 = 20L;
long num3 = num1 + num2; //int + long --->long
System.out.println(num3);
}
}
13.1.2 字符的 + 运算
字符参与运算的规则:
将字符换算成编码表里对应的数值进行运算。
等价于:把char类型数据换成对应的十进制数来参与运算
编码表:
计算机底层使用二进制运算,所以文字和符号必须转换成二进制数才能被计算机识别,编码表就是将文字等符号编成对应的数的表格,因为二进制记录起来比较麻烦,所以使用十进制数进行文字编码。
世界上第一张编码表ASCII(美国标准信息交换码)。常用编码表都兼容ASCII码表。
常用的编码:
ASCII编码:美国标准信息交换码,世界上第一张编码表。
GB2312编码:简体中文编码,对常用汉字进行了编码,兼容ASCII。
GBK:加强版的中文编码表,对更多汉字进行了编码,兼容ASCII
UTF-8编码:万国码表,常作为浏览器上的网页编码,可以统一显示各国文字,兼容ASCII。
常见字符对应的十进制数:
‘ a’ ~ ‘z’ : 97 ~ 122
‘A’ ~ ‘Z’ : 65 ~ 90
‘0’ ~ ‘9’ : 48 ~ 57
基本汉字:19968 ~ 40869
char类型表示的范围:0~65535
ASCII编码表
/*
字符参与运算的规则:
将字符换算成编码表里对应的数值进行运算。
*/
public class CharDemo2{
public static void main(String[] args){
//a~z 97~122
//A~Z 65-90
//0~9 48~57
//基本汉字:19968 ~ 40869
char c = 'a';
int b = c + 10;
System.out.println(b); //c是char类型,参与运算先转为十进制,在参与运算 //107
char c2 = 97;
System.out.println(c2); //c2是char,打印c2就是打印他的char类型数据 //a
//char类型范围 0~65535
// char c3 = 65536; //报错,超过了char的范围
int c3 = '中';
int c4 = '国';
System.out.println(c3); //20013
System.out.println(c4); //22269
char c5 = 20013;
char c6 = 22269;
System.out.println(c5); //中
System.out.println(c6); //国
char c7 = '9'; //9
char c8 = 57; //9
char c9 = 9; //打印的结果不是数字9,而是9对应的编码表的符号73
}
}
13.1.3 字符串的+运算
与字符串进行 “+” 运算,是进行字符串拼接操作,运算结果还是字符串。
字符串只能进行 + 运算
//字符串的加法运算
public class StringAddDemo{
public static void main(String[] args){
int age = 25;
System.out.println("我的年龄是:"+age+"岁"); //输出结果:我的年龄是:25岁
}
}
13.2 赋值运算符
赋值运算符作用
将表达式或者常量值赋给变量。
赋值运算符分类
符号 | 作用 | 说明 |
---|---|---|
= | 赋值 | a=10,将10赋值给变量a |
+= | 加后赋值 | a+=b,将a+b的值给a |
-= | 减后赋值 | a-=b,将a-b的值给a |
*= | 乘后赋值 | a*=b,将a×b的值给a |
/= | 除后赋值 | a/=b,将a÷b的商给a |
%= | 取余后赋值 | a%=b,将a÷b的余数给a |
注意:扩展的赋值运算符隐含了强制类型转换。
/*
赋值运算符:
扩展赋值运算符隐含了强制类型转换
*/
public class FuZhiDemo {
public static void main(String[] args) {
//1. 基本赋值运算符 =
int a = 10;
System.out.println(a);
//2. 扩展赋值运算符
int b = 20;
// b+=5;
// b-=5;
// b*=5;
// b/=5;
b%=5; //b = b%5;
System.out.println(b);//0
// 3. 扩展赋值运算符隐含了强制类型转换
byte num = 10;
num+=5; // 相当于:num = (byte)(num+5);
// num = num + 5; //报错
System.out.println(num);
}
}
13.3 自增自减运算符
1、++ 、 – 可以放在变量的前面,也可以放在变量的后面。
单独进行运算时放在前面或者后面,效果一样。
2、参与其他运算的时候:
a++ :先将a的值参与其他运算,运算结束后再自身加1。
++a :先将a自身加1,再将自增后的值参与其他运算。
自减与自增规则相同。
3、最常见用法:单独使用。