目录
java的发展史
java 的三大平台
jdk、jre、jvm
jdk
jre
jvm
java语言跨平台的原理
java程序执行的过程
javac和java的区别
java文件和class文件的区别
java的基本数据类型
BIT,B,KB,MB,GB,TB,PB换算
java 中的关键字
java中的转义字
编辑
java的自动类型转换
变量的命名规则
驼峰命名法编辑
连字符命名
java的直接量
直接量的类型
编辑
java的运算符
运算符的类型
算术运算符
i++和++i的区别
赋值运算符
=和==的区别 :
java位运算符
&:按位与。当两位同时为1时才返回1
编辑
|:按位或。只要有一位为1即可返回1。
~:按位非。单目运算符,将操作数的每个位(包括符号位)全部取反。
^:按位异或。当两位相同时返回0,不同时返回1。
<<:左移运算符。
编辑
>>:右移运算符。
>>>:无符号右移运算符。
编辑
扩展后的赋值运算符
比较运算符
>:大于
编辑
>=:大于等于
编辑
<:小于
编辑
<=:小于等于
编辑
!=:不等于编辑
逻辑预算符
&&:与 (左边为false 就不运行右边)编辑
&:不短路与 (左边为false 继续运行右边)编辑
| |:或 (左边为true 就不运行右边)
|:不短路或 (左边为true 继续运行右边)
!:非 (左边为true 继续运行右边)编辑
^:异或编辑
(单/双/三)目运算符
问题
float a = 3.5; int b = a; 打印b的结果是什么
int a = 5; float b = a; 打印b的结果是什么
char a = 'A'; int b = a; 打印b的结果是什么
int a = 68; char b = a; 打印b的结果是什么
画出基本数据类型的兼容关系图
&可以作为逻辑运算符使用, 也可以作为位运算符使用, 区别是什么
|可以作为逻辑运算符使用, 也可以作为位运算符使用, 区别是什么
什么是原码、反码、补码
1、原码
2、反码
3、补码
图解3&5的运算过程和结果
图解3|5的运算过程和结果
图解~5的运算过程和结果
图解3^5的运算过程和结果
图解8<<2的运算过程和结果
图解8>>2的运算过程和结果
图解~5和~-5的运算过程和结果
什么是单目(一元), 双目(二元), 三目(三元)运算符
说说第二行代码中有几个运算符和运算顺序
int a = 10
char b = a++ > 10 ? 'A': 'B'
打印a
打印b
运算符的优先级
上课讲题
22.>> 和 >>> 的区别是什么
如何最快的计算8*4
如何最快的计算8/4
23.运算符的优先级,以及如何改变优先级
运算符的优先级
24.什么是单目(一元), 双目(二元), 三目(三元)运算符
25.说说第二行代码中有几个运算符和运算顺序
int a = 10
char b = a++ > 10 ? 'A': 'B'
打印a
打印b
java的发展史
| 1996 | Java 1.0发布, 但是缺陷性和局限性很大, 并不能用于开发 |
| 1997 | Java 1.1发布, 引入了JDBC、内部类、反射 |
| 1998 | J2SE 1.2发布, Java正式改名为J2SE Sun公司推出了Java三大平台版本 1. J2SE: Java标准版(Standard Edition) 2. J2EE: 服务器端开发得企业版(Enterprise Edition) 3. J2ME: 手机嵌入式设备微型版(Micro Edition) |
| 1999 | HotSpot虚拟机发布 |
| 2000 | J2SE 1.3发布 |
| 2002 | J2SE 1.4发布, Java成为服务器端开发的首选平台 |
| 2004 | J2SE 1.5发布, 这是一个里程碑版本 Sun公司直接对外宣布JavaSE5.0 |
| 2005 | Java SE 6发布 J2EE改名为 Java EE J2SE改名为 Java SE J2ME改名为 Java ME |
| 2006 | Sun公司宣布JDK开源 并且建立了 OpenJDK 组织对这些源码进行独立管理 |
| 2009 | Oracle 以 74 亿美元收购 Sun 公司 取得了 Java 的商标版权 |
| 2011 | JavaSE 7发布 |
| 2014 | JavaSE 8发布 |
| 2017 | JavaSE 9发布 Oracle 决定将JavaEE移交给开源组织,最后 Eclipse 基金会接手 JavaEE更名为Jakarta EE(雅加达) |
| 2018 | 从这一年开始, 每6个月就会发布一个 Java 版本 并区分了最新版和LTS版, 生产环境最好使用LTS版本 JavaSE 10 发布 JavaSE 11 LTS发布 |
| 2019 | JavaSE 12 发布 JavaSE 13 发布 |
| 2020 | JavaSE 14 发布 JavaSE 15 发布 |
| 2021 | JavaSE 16 发布 JavaSE 17 LTS 发布 |
| 2022 | Java SE 18 发布 |
java 的三大平台
1. J2SE: Java标准版(Standard Edition)
2. J2EE: 服务器端开发得企业版(Enterprise Edition)
3. J2ME: 手机嵌入式设备微型版(Micro Edition)
J2SE、J2EE、J2ME中的"2"是英文单词"to"的意思
jdk、jre、jvm
jdk
JDK是Java开发工具包,是Sun公司针对Java程序员的产品。
JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。
JDK是整个JAVA的核心,包括了Java运行环境JRE(Java Runtime Envirnment)、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)
jre
JRE是运行基于Java语言编写的程序所不可缺少的运行环境。也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。
JRE中包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运行Java程序的必要组件。
与大家熟知的JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。
jvm
java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。
也就是说.class文件并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
只有JVM还不能成.class文件的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。
java语言跨平台的原理
1、首先将java文件编译成字节码(.class)文件;
2、使用Java虚拟机(JVM--Java Virtual Machine)运行运行字节码文件。
上面的步骤中,第一步中,在所有的平台上生成的字节码文件都是相同的。
上面的步骤中,第二步中,在不同的平台上运行字节码文件的Java虚拟机是不同的。
Java的开发团队针对不同的平台开发出了对应版本的java虚拟机,这使得同一个java代码文件可以再不同的平台上运行。
所以,java能实现跨平台运行是因为有各种平台对应版本的java虚拟机的支持。
java程序执行的过程
以记事本写的Java文件为例:首先新建一个记事本文件,打开后编写Java程序,然后关闭文件,将文件的后缀名改为java,然后在当前目录地址栏输入cmd打开命令行窗口,运行javac Test.java命令,将java文件编译成字节码文件,会在当前目录下生成一个.class文件,之后在命令行中输入java Test命令,运行文件,其中Test为文件中书写的class类名。
javac和java的区别
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。
javac工具读由java语言编写的类和接口的定义,并将它们编译成字节代码的class文件。javac 可以隐式编译一些没有在命令行中提及的源文件。用 -verbose 选项可跟踪自动编译。
javac负责的是编译,将.java文件编译成.class文件,当执行javac的时候,会启动java的编译器程序,对指定的扩展名为.java的文件进行编译,生成了jvm可识别的字节码文件,即.class文件(java的运行程序)
java负责的是运行,当执行java时,会启动jvm加载运行时所需要的类库,并执行.class文件
java文件和class文件的区别
- .java文件是一个文本文件,就是我们用java语言写成的代码。
- .class文件是一种二进制文件,由.java文件通过javac这个命令(jdk本身提供的工具)编译生成的一个文件,可以由jvm(java虚拟机)装载(类装载),然后对java解释执行,就是运行时的程序。
java的基本数据类型
内存硬盘
最小单位:比特 一个bit 只能存储一个0或者是一个1
每8个比特是一个存储空间称为byte(字节)
BIT,B,KB,MB,GB,TB,PB换算
1 比特(BIT)=0.125 字节(B)
1Bit (1个比特位);
1Byte (1个字节) = 1B = 8Bit ;
1KB = 1,024B = 8,192Bit;
1MB = 1,024KB = 1,048,576B = 8,388,608Bit;
1GB = 1,024MB = 1,048,57KB = 107,373,568B = 858,988,544Bit;
1TB = 1,024GB = 1,048,57MB = 107,373,568KB = 109,950,533,632B = 879,604,269,056Bit;
1PB = 1,024TB = 1,048,57GB = 107,373,568MB = 109,950,533,632KB = 112,589,346,439,168 B = 900,714,771,513,344Bit;
java 中的关键字
java的关键字都是小写 ,TRUE、FALSE、NULL都不是关键字
java的关键字
java中的转义字
java的转义字
java的自动类型转换
自动类型转换图
表数范围小的数值可以自动向表数范围大的进行自己类型转换
但是 表数范围大的数值不可以自动向表数范围小的进行自己类型转换
表数范围大的数值不可以向表数范围小的进行自己类型转换(需要做强制转换)
变量的命名规则
命名需要遵循驼峰规则
包名: 全部小写
类名:单词首字母大写
方法名:首字母小写,字符开头大写
常量:全部大写【常加下划线】
参数:(和方法命名一样)【尽量使用一个单词,意思明确】
驼峰命名法
连字符命名
连字符(hyphen),是用于一个合成词的两部分之间的或一个单词的字节之间的一种标点符号,尤其是一行或一段结束时用。连字符只指“中划线”,不包括上划线和下划线。
java的直接量
直接量的类型
int类型的直接量:在程序中直接给出的整型数值,可分为二进制、十进制、八进制和十六进制4种,其中二进制需要以0B或0b开头,八进制需要以О开头,十六进制需要以0x或0X开头。例如123、012(对应十进制的10)、0x12(对应十进制的18)等。
long类型的直接量:在整型数值后添加1或L后就变成了long类型的直接量。例如3L、0x12L
(对应十进制的18L)。
float类型的直接量:在一个浮点数后添加f或F就变成了float类型的直接量,这个浮点数可以是标准小数形式,也可以是科学计数法形式。例如5.34F、3.14E5f。
double类型的直接量:直接给出一个标准小数形式或者科学计数法形式的浮点数就是double类型的直接量。例如5.34、3.14E5。
boolean类型的直接量:这个类型的直接量只有true和 false。
char类型的直接量: char类型的直接量有三种形式,分别是用单引号括起来的字符、转义字符和 Unicode值表示的字符。例如'a'、'n'和'u0061'。
String类型的直接量:一个用双引号括起来的字符序列就是String类型的直接量。null类型的直接量:这个类型的直接量只有一个值,即null。
String类型的直接量不能赋给其他类型的变量, null类型的直接量可以直接赋给任何引用类型的变量,包括String类型。boolean类型的直接量只能赋给boolean类型的变量,不能赋给其他任何类型的变量。
java的运算符
运算符的类型
运算符的类型
算术运算符
(1)+ 加法运算符
i++和++i的区别
i++ 与 ++i 的主要区别有两个:
1、 i++ 返回原来的值,++i 返回加1后的值。
i++
++i
2、 i++ 不能作为左值,而++i 可以。
(2) - 减法运算符
(3) * 乘法运算符
(4) / 除法运算符
(5)% 求余运算符
赋值运算符
=和==的区别 :
= 是赋值 , 把右边的值赋予左边(左边不能是常量)
==是比较,左边==右边 相同 返回1,不相同返回0
java位运算符
&:按位与。当两位同时为1时才返回1。
|:按位或。只要有一位为1即可返回1。
~:按位非。单目运算符,将操作数的每个位(包括符号位)全部取反。
^:按位异或。当两位相同时返回0,不同时返回1。
<<:左移运算符。
>>:右移运算符。
>>>:无符号右移运算符。
&:按位与。当两位同时为1时才返回1
|:按位或。只要有一位为1即可返回1。
~:按位非。单目运算符,将操作数的每个位(包括符号位)全部取反。
5的原码: 0000 0101 (正数的原码、反码、补码都一样)
反码: 0000 0101
补码: 0000 0101
-5的原码: 1000 0101
反码: 1111 1010(反码=原码取反 ,不包括符号位)
补码: 1111 1011 (补码=反码+1)
计算机存储的是补码
~5 :5的补码取反 = 1111 1010 补码 (包括符号位)
= 1111 1001 反码 (补码-1)
= 1000 0110 原码 = -6
~-5 :5的补码取反 = 0000 0100 补码 (包括符号位)
= 0000 0100 反码
= 0000 0100 原码 = 4
^:按位异或。当两位相同时返回0,不同时返回1。
<<:左移运算符。
高位舍弃,低位以0填充
>>:右移运算符。
低位舍弃,高位以0填充
>>>:无符号右移运算符。
有符号右移,正数高位补0,负数高位补1
无符号右移,无论正数或负数,高位都是补0
扩展后的赋值运算符
+=:对于x+=y, 即对应于x=x + y。
-=:对于x -=y, 即对应于x=x - y。
*=:对于x *= y, 即对应于x=x * y。
/=:对于x /=y, 即对应于x =x / y。
%=:对于x %= y, 即对应于x=x % y。
&=:对于x &= y, 即对应于x=x & y。
|=:对于x |=y, 即对应于x=x | y。
^=:对于x ^=y, 即对应于x=x ^ y。
<<=:对于x<<=y, 即对应于x=x < >>=:对于x >>=y, 即对应于x=x >> y。 >>>=:对于x >>>=y,即对应于x=x >>> y。 >:大于,只支持左右两边操作数是数值英型。如果前面变量的值大于后面变量的值,则返回 true >=:大于等于,只支持左右两边操作数是数值类型。如果前面变量的值大于等于后面变量的值,则返回 true。 <:小于,只支持左右两边操作数是数值类型。如果前面变量的值小于后面变量的值,则返回true <=:小于等于,只支持左右两边操作数是数值类型。如果前面变量的值小于等于后面变量的值,则返回true。 ==:等于,如果进行比较的两个操作数都是数值类型,即使它们的数据类型不相同,只要它们的值相等,也都将返回true。例如97 == 'a'返回true,5.0 == 5也返回true。如果两个操作数都是引用类型,那么只有当两个引用变量的类型具有父子关系时才可以比较,而且这两个引用必须指向同一个对象才会返回true.Java也支持两个boolean类型的值进行比较,例如, true == false将返回 false。 !=:不等于,如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值不相等,也都将返回true。如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回true。 &&:与,前后两个操作数必须都是true才返回true,否则返回false。 &:不短路与,作用与&&相同,但不会短路。 |:或,只要两个操作数中有一个是 true,就可以返回true,否则返回false。 |:不短路或,作用与||相同,但不会短路。 !:非,只需要一个操作数,如果操作数为true,则返回false;如果操作数为 false,则返回true。 ^:异或,当两个操作数不同时才返回true,如果两个操作数相同则返回-false。 单目:运算符只对一个操作数进行运算(~5按位非、i++自增、!a逻辑取反) 双目:运算符对两个操作数进行运算(3 + 4、5 - 2、6 * 7、8 / 2、10 % 3、a > b……) 三目:运算符对三个操作数进行运算(?:) &:不短路与 (左边为false 继续运行右边)(逻辑运算符) &:按位与。当两位同时为1时才返回1(位运算符) |:或 (左边为true 就不运行右边)(逻辑运算符) |:按位或。只要有一位为1即可返回1 (位运算符) 原码就是符号位加上真值的绝对值,第一位表示符号,其余位表示值。对于4位的二进制,其取值范围就是[1000,0111],即[-8,7]。 +5的原码:0101 -5的原码:1101 正数的反码是其本身。 负数的反码是在其原码的基础上,符号位不变,其余位取反。 +5的反码:0101 -5的反码:1010 可见如果一个反码表示的是负数,是无法直观地看出来它的数值,通常要将其先转换成原码再计算。 正数的补码还是其本身。 负数的补码是在其原码的基础上,符号位保持不变,其余位取反,最后+1。即反码加1。 +5的补码:0101 -5的补码:1011 &:按位与 相同时返1 3 5 1 |:按位或。只要有一位为1即可返回1。 3 5 7 ~:按位非。单目运算符,将操作数的每个位(包括符号位)全部取反。 5的原码: 0000 0101 (正数的原码、反码、补码都一样) 反码: 0000 0101 补码: 0000 0101 ~5 :5的补码取反 = 1111 1010 补码 (包括符号位) = 1111 1001 反码 (补码-1) = 1000 0110 原码 = -6 ^:按位异或。当两位相同时返回0,不同时返回1。 3 5 6 高位舍弃,低位以0填充 低位舍弃,高位以0填充 -5的原码: 1000 0101 反码: 1111 1010(反码=原码取反 ,不包括符号位) 补码: 1111 1011 (补码=反码+1) ~-5 :5的补码取反 = 0000 0100 补码 (包括符号位) = 0000 0100 反码 = 0000 0100 原码 = 4 单目: 运算符只对一个操作数进行运算 ~5 按位非 i++ 自增 !a 逻辑取反 双目: 运算符对两个操作数进行运算 3 + 4 5-2 6*7 8/2 10%3 a > b........... 三目: 运算符对三个操作数进行运算 ?: 有4个运算符 := ++ > ?: 运算顺序: 1)(>)a跟10比较 2) (?:)没有大于10 取 B 3) (++)a++,a=a+1 4)(=)b=B,把B赋值为b 打印a :11 打印b :B >>有符号右移,正数高位补0,负数高位补1 >>>无符号右移,无论正数或负数,高位都是补0 先算 b*c 得到20 再算20/5 得到4 最后算a - 4得到-2 改变优先级只需要在指定的地方加上() 先算a - b 得到0 再算0 * c 得到0 最后再算0/5 得到0 单目: 运算符只对一个操作数进行运算 ~5 按位非 i++ 自增 !a 逻辑取反 双目: 运算符对两个操作数进行运算 3 + 4 5-2 6*7 8/2 10%3 a > b........... 三目: 运算符对三个操作数进行运算 ?: 有4个运算符 := ++ > ?: 运算顺序: 1)(>) a跟10比较 2) (?:)没有大于10 取 B 3) (++)a++,a=a+1 4)(=) b=B,把B赋值为b 打印a :11 打印b :B 比较运算符
>:大于
>=:大于等于
<:小于
<=:小于等于
!=:不等于
逻辑预算符
&&:与 (左边为false 就不运行右边)
&:不短路与 (左边为false 继续运行右边)
| |:或 (左边为true 就不运行右边)
|:不短路或 (左边为true 继续运行右边)
!:非 (左边为true 继续运行右边)
^:异或
(单/双/三)目运算符
问题
float a = 3.5; int b = a; 打印b的结果是什么
int a = 5; float b = a; 打印b的结果是什么
char a = 'A'; int b = a; 打印b的结果是什么
int a = 68; char b = a; 打印b的结果是什么
画出基本数据类型的兼容关系图
&可以作为逻辑运算符使用, 也可以作为位运算符使用, 区别是什么
|可以作为逻辑运算符使用, 也可以作为位运算符使用, 区别是什么
什么是原码、反码、补码
1、原码
2、反码
3、补码
图解3&5的运算过程和结果
0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 图解3|5的运算过程和结果
0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 1 图解~5的运算过程和结果
图解3^5的运算过程和结果
0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 0 图解8<<2的运算过程和结果
8 0 0 0 0 1 0 0 0 32 0 0 1 0 0 0 0 0 图解8>>2的运算过程和结果
8 0 0 0 0 1 0 0 0 2 0 0 0 0 0 0 1 0 图解~5和~-5的运算过程和结果
什么是单目(一元), 双目(二元), 三目(三元)运算符
说说第二行代码中有几个运算符和运算顺序
int a = 10
char b = a++ > 10 ? 'A': 'B'
打印a
打印b
运算符的优先级
运算符说明 java运算符 分隔符 、[] () {} , ; 单目运算符 ++ -- ~ ! 强制类型转换运算符 (type) 乘法/除法/求余 * / % 加法/减法 + - 移位运算符 << >> >>> 关系运算符 <= < >= > instanceof 等价运算符 == != 按位与 & 按位异或 ^ 按位或 | 条件与 && 条件或 || 三目运算符 ? : 赋值 = += -= *= /= &= |= ^= %= <<= …… 上课讲题
22.>> 和 >>> 的区别是什么
如何最快的计算8*4
如何最快的计算8/4
23.运算符的优先级,以及如何改变优先级
运算符的优先级
运算符说明 java运算符 1.分隔符 、[] () {} , ; 2.单目运算符 ++ -- ~ ! 3.强制类型转换运算符 (type) 4.乘法/除法/求余 * / % 5.加法/减法 + - 6.移位运算符 << >> >>> 7.关系运算符 <= < >= > instanceof 8.等价运算符 == != 9.按位与 & 10.按位异或 ^ 11.按位或 | 12.条件与 && 13.条件或 || 14.三目运算符 ? : 15.赋值 = += -= *= /= &= |= ^= %= <<= …… 24.什么是单目(一元), 双目(二元), 三目(三元)运算符
25.说说第二行代码中有几个运算符和运算顺序
int a = 10
char b = a++ > 10 ? 'A': 'B'
打印a
打印b



