栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java七上八下(很多东西,更新在八九十下)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java七上八下(很多东西,更新在八九十下)

目录

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的发展史

1996Java 1.0发布, 但是缺陷性和局限性很大, 并不能用于开发
1997Java 1.1发布, 引入了JDBC、内部类、反射
1998J2SE 1.2发布, Java正式改名为J2SE
Sun公司推出了Java三大平台版本
1. J2SE: Java标准版(Standard Edition)
2. J2EE: 服务器端开发得企业版(Enterprise Edition)
3. J2ME: 手机嵌入式设备微型版(Micro Edition)
1999HotSpot虚拟机发布
2000J2SE 1.3发布
2002J2SE 1.4发布, Java成为服务器端开发的首选平台
2004J2SE 1.5发布, 这是一个里程碑版本
Sun公司直接对外宣布JavaSE5.0
2005Java SE 6发布
J2EE改名为 Java EE
J2SE改名为 Java SE
J2ME改名为 Java ME
2006Sun公司宣布JDK开源
并且建立了 OpenJDK 组织对这些源码进行独立管理
2009Oracle 以 74 亿美元收购 Sun 公司
取得了 Java 的商标版权
2011JavaSE 7发布
2014JavaSE 8发布
2017JavaSE 9发布
Oracle 决定将JavaEE移交给开源组织,最后 Eclipse 基金会接手
JavaEE更名为Jakarta EE(雅加达)
2018从这一年开始, 每6个月就会发布一个 Java 版本
并区分了最新版和LTS版, 生产环境最好使用LTS版本
JavaSE 10 发布
JavaSE 11 LTS发布
2019JavaSE 12 发布
JavaSE 13 发布
2020JavaSE 14 发布
JavaSE 15 发布
2021JavaSE 16 发布
JavaSE 17 LTS 发布
2022Java 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。

&&:与 (左边为false 就不运行右边)

  &:不短路与 (左边为false 继续运行右边)

| |:或 (左边为true 就不运行右边)

 |:不短路或 (左边为true 继续运行右边)

 !:非 (左边为true 继续运行右边)

 ^:异或

(单/双/三)目运算符

单目:运算符只对一个操作数进行运算(~5按位非、i++自增、!a逻辑取反)

双目:运算符对两个操作数进行运算(3 + 4、5 - 2、6 * 7、8 / 2、10 % 3、a > b……)

三目:运算符对三个操作数进行运算(?:)

问题

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的结果是什么

画出基本数据类型的兼容关系图

&可以作为逻辑运算符使用, 也可以作为位运算符使用, 区别是什么

&:不短路与 (左边为false 继续运行右边)(逻辑运算符)

&:按位与。当两位同时为1时才返回1(位运算符)

|可以作为逻辑运算符使用, 也可以作为位运算符使用, 区别是什么

|:或 (左边为true 就不运行右边)(逻辑运算符)

|:按位或。只要有一位为1即可返回1 (位运算符)

什么是原码、反码、补码

1、原码

原码就是符号位加上真值的绝对值,第一位表示符号,其余位表示值。对于4位的二进制,其取值范围就是[1000,0111],即[-8,7]。

+5的原码:0101

-5的原码:1101

2、反码

正数的反码是其本身。

负数的反码是在其原码的基础上,符号位不变,其余位取反。

+5的反码:0101

-5的反码:1010

可见如果一个反码表示的是负数,是无法直观地看出来它的数值,通常要将其先转换成原码再计算。

3、补码

正数的补码还是其本身。

负数的补码是在其原码的基础上,符号位保持不变,其余位取反,最后+1。即反码加1。

+5的补码:0101

-5的补码:1011

图解3&5的运算过程和结果

&:按位与 相同时返1

3

00000011

5

00000101

1

00000001

图解3|5的运算过程和结果

 |:按位或。只要有一位为1即可返回1。

3

00000011

5

00000101

7

00000111

图解~5的运算过程和结果

 ~:按位非。单目运算符,将操作数的每个位(包括符号位)全部取反。

 5的原码: 0000 0101 (正数的原码、反码、补码都一样)

       反码: 0000 0101

       补码: 0000 0101

~5 :5的补码取反  = 1111 1010 补码 (包括符号位)

                               = 1111 1001 反码 (补码-1)

                               = 1000 0110 原码 = -6

图解3^5的运算过程和结果

^:按位异或。当两位相同时返回0,不同时返回1。

3

00000011

5

00000101

6

00000110

图解8<<2的运算过程和结果

高位舍弃,低位以0填充

800001000
3200100000

图解8>>2的运算过程和结果

低位舍弃,高位以0填充

800001000
200000010

图解~5和~-5的运算过程和结果

-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...........

三目: 运算符对三个操作数进行运算 ?:

说说第二行代码中有几个运算符和运算顺序

int a = 10

char b = a++ > 10 ? 'A': 'B'

打印a

打印b

有4个运算符 :=  ++  >  ?:

运算顺序: 1)(>)a跟10比较    2) (?:)没有大于10 取 B     3) (++)a++,a=a+1

4)(=)b=B,把B赋值为b

打印a :11

打印b :B

运算符的优先级
运算符说明java运算符
分隔符、[] () {} , ;
单目运算符++   --   ~  !
强制类型转换运算符(type)
乘法/除法/求余*  /  %
加法/减法+  -
移位运算符<<  >>  >>>
关系运算符<=  < >=  > instanceof
等价运算符==  !=
按位与&
按位异或^
按位或|
条件与&&
条件或||
三目运算符?   :
赋值=  +=  -=   *=   /=  &=  |=  ^=  %=  <<=  ……

​​​​​​​ ​​​​​​​上课讲题

22.>> 和 >>> 的区别是什么

>>有符号右移,正数高位补0,负数高位补1

>>>无符号右移,无论正数或负数,高位都是补0

如何最快的计算8*4

如何最快的计算8/4

23.运算符的优先级,以及如何改变优先级 运算符的优先级
运算符说明java运算符
1.分隔符、[] () {} , ;
2.单目运算符++   --   ~  !
3.强制类型转换运算符(type)
4.乘法/除法/求余*  /  %
5.加法/减法+  -
6.移位运算符<<  >>  >>>
7.关系运算符<=  < >=  > instanceof
8.等价运算符==  !=
9.按位与&
10.按位异或^
11.按位或|
12.条件与&&
13.条件或||
14.三目运算符?   :
15.赋值=  +=  -=   *=   /=  &=  |=  ^=  %=  <<=  ……

 先算 b*c 得到20 

再算20/5 得到4

最后算a - 4得到-2

改变优先级只需要在指定的地方加上()

 先算a - b 得到0

再算0 * c 得到0

最后再算0/5 得到0

24.什么是单目(一元), 双目(二元), 三目(三元)运算符

单目: 运算符只对一个操作数进行运算 ~5 按位非 i++ 自增 !a 逻辑取反

双目: 运算符对两个操作数进行运算 3 + 4 5-2 6*7 8/2 10%3 a > b...........

三目: 运算符对三个操作数进行运算 ?:

25.说说第二行代码中有几个运算符和运算顺序 int a = 10 char b = a++ > 10 ? 'A': 'B' 打印a 打印b

有4个运算符 :=  ++  >  ?:

运算顺序: 1)(>)     a跟10比较      2) (?:)没有大于10 取 B          3) (++)a++,a=a+1

4)(=)     b=B,把B赋值为b

打印a :11

打印b :B

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/984531.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号