IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JavaSE学习总结(一) -> 正文阅读

[Java知识库]JavaSE学习总结(一)

一、Java入门知识

(一)Java语言概述

  • 1995年有SUN公司詹姆斯高斯林(James Gosling)等人正式发布第一个版本。
  • Java语言平台版本
  1. J2SE(Java 2 Platform Standard Edition)标准版

    是为开发普通桌面和商务应用程序提供的解决方案

    该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发

  2. J2SE(Java 2 Platform Standard Edition)小型版

    是为开发电子消费产品和嵌入式设备提供的解决方案。

    是为开发企业环境下的应用程序提供的一套解决方案

  3. J2SE(Java 2 Platform Standard Edition)企业版

? 该技术体系中包含的奇数如Servlet、Jsp等,主要针对于Wed应用程序开发

jdk1.5以后,我们将其更名为:JAVASE,JAAME,JAVAEE

  • Java语言特点
  1. 简单性:Java剔除了C++的操作符过载、多继承特征、预处理程序和指针等
  2. 面向对象:在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。 数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的包装。类是按一定体系和层次安排的,是的子类可以从父类继承行为。
  3. 分布性:Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。
  4. 编译和解释性:Java先编译程序生成字节码再在Java虚拟机中解释执行。
  5. 稳健性:Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java不支持指针,它消除重写存储和讹误数据的可能性。异常处理是Java中使得程序更稳健的另一个特征。
  6. 安全性
  7. 跨平台性:可移植性,一次编写,到处运行(不同操作系统)。
  8. 高性能
  9. 多线程
  10. 动态性
  • 请解释Java语言的跨平台特性

    ? Java的跨平台特性也被称为可移植性、平台无关性,或者一次编写处处运行。他的意思就是如果用Java语言编写一个应用,那么就可以在不同平台上运行,而不需要为不同平台单独运行开发。之所以能实现跨平台的特性。主要得益于Java虚拟机(JVM),JVM解释器在运行Java应用时根据当前平台进行解释,解释称符合当前平台规范的机器码,所以可以实现同样的应用在不同平台上运行。

    ? JAVA语言是跨平台的,而JVM不是跨平台的。

(二)JDK/JRE/JVM的区别

  • JDK(Java Development Kit)
    • JDK是Java开发工具包,是Sun公司针对Java开发员的产品。
    • JDK中包含JRE(所以安装了JDK,就不用再单独安装JRE了),在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是JVM,lib中则是JVM工作所需要的类库,而JVM+lib=JRE。
    • JDK是整个JAVA的核心,包括了Java运行环境JRE、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)
  • JRE(Java Runtime Environment)
    • 是运行基于Java语言编写的程序所不可缺少的运行环境。也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。
    • 包括Java虚拟机(Java Runtime Environment)和Java程序所需的核心类库等,这些是运行Java程序的必要组件。
    • 与大家熟知JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对与使用程序的用户。
  • JVM(Java Virtual Machine)
    • 就是我们常说的Java虚拟机,它是整个Java实现跨平台的最核心的部分,所有的Java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。
    • 也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
    • 只有JVM还不能完成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而JRE包含lib类库。
    • JVM屏蔽了与具体操作系统平台相关的信息,是的Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

在这里插入图片描述

(三)JDK安装路径下的目录解释

在这里插入图片描述

  1. bin目录:该目录用于存放一些可执行程序。如javac.exe(java编译器)、java.exe(java运行工具),jar.exe(打包工具)和javadoc.exe(文档生成工具)等。
  2. include目录:由于JDK是通过C和C++实现的,因此在启动时需要引入一些C语言的头文件,该目录就是用于存放这些头文件的。
  3. jre目录:“jre”是Java Runtime Environment的缩写,意为Java程序运行时环境。此目录是Java运行时环境的根目录,它包括Java虚拟机,运行时的类包,Java应用启动器以及一个bin目录,但不包含开发环境中的开发工具。
  4. lib目录:lib时library的缩写,意为Java类库或库文件,时开发工具使用的归档包文件。
  5. src.zip文件:src.zip为src文件夹的压缩文件,src中放置的时JDK核心类的源代码,通过该文件可以查看Java基础类的源代码。

(四)第一个Java程序

  1. 准备工作
    win7:打开我的电脑->查看->文件夹选项->查看->去掉“隐藏已知文件类型的扩展名”前的对勾。
    在这里插入图片描述

    win10:打开我的电脑->查看->把文件扩展名勾上

    在这里插入图片描述

  2. 新建一个文本文档将后缀名改为.java 例如 Hello.java
    在这里插入图片描述

  3. 编写Java代码

class Hello{
	public static void main(String[] args){
		System.out.println("HelloWorld!");
	}
}
  1. 在源文件路径打开命令行窗口,使用javac命令编译HelloWorld源文件,生成字节码文件(后缀名为.class)
    格式: javac 文件名.java (注意:这里是带有后缀名的)
  2. 使用java命令对class字节码文件进行解释运行
    格式: java 字节码文件名 (注意:这里是没有后缀名的)
    在这里插入图片描述

(五)注释概述

1.什么是注释
用于解释说明程序的文字。(注释斌并不会被执行,是给我们写代码的人看的,书写注释是一个非常好的习惯,平时写代码一定注意注意规范。)

2.注释的作用
??通过注释提高Java源程序代码的可读性;使得Java程序条理清晰,易于区分代码行与注释行。另外通常在程序开头加入作者,时间,版本,要实现的功能等内容注释,方便后来的维护以及程序员的交流。

3.注释的分类

  • 单行注释 格式:
//这是单行注释
  • 多行注释 格式:
	 /* 
	 注释的文字 
	 */
  • 文档注释 格式:
 /** 
 *注释的文字 
 *注释的文字
 */ 

二、Java语言基础

(一)关键字

  1. 什么是关键字
    就是被java语言赋予特殊含义的单词。

  2. 关键字的特点
    组成关键字的字母都是小写

  3. 常见关键字
    class,public,static,void …
    在这里插入图片描述

  4. 关键字的注意事项
    (1): goto和const是java语言的保留字
    (2): 类似于editplus这样的高级文本编辑器对关键字都是有颜色变化的

  5. 关键字与保留字的区别
    关键字, 一定是保留字。
    保留字一般是等同于关键字的。
    从字面含义上理解,保留字是语言中已经定义过的字,使用者不能再将这些字作为变量名或过程名使用。而关键字则指在语言中有特定含义,成为语法中一部分的那些字。在一些语言中,一些保留字可能并没有应用于当前的语法中,这就成了保留字与关键字的区别。

(二)标识符

  1. 什么是标识符
    就是给类,接口,方法,变量,常量等起名字时使用的字符序列

  2. 标识符的组成规则
    (1): 英文的大小写字母
    (2): 数字字符
    (3): $和_

  3. 标识符注意事项

    • 所有标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始**,**不能以数字开头

    • 首字符之后可以是字母(A-Z或者a-z),美元符($)、下划线(_)或数字得任何字符组合

    • 不能使用关键字作为变量名

    • 标识符是大小写敏感的

      String Man="hzm";
      String man="hzm";
      
    • 合法标识符举例:age、$salary、_value、__1_vale

    • 非法标识符举例:123abc、-salary、#abc

  4. 标识符中常见的命名规范
    (1)包(就是文件夹,它的存在是为了解决我们同一个目录下不能同时存在两个相同名称文件的问题。)
    字母都是小写 。例如itcast
    (2)类或者接口
    一个单词: 首字母大写,其余字母小写。例如Student , Teacher , Spring , Struts , Hibernate
    多个单词: 每一个单词的首字母都是大写,其余字母小写。例如StudentName , UserLoginController
    (3)方法或者变量
    一个单词: 字母全是小写。例如name , age
    多个单词: 从第二个单词开始,首字母大写,其余字母小写。例如getName , getAge
    (4)常量
    一个单词: 字母全是大写。例如NAME , AGE
    多个单词: 字母全是大写,每一个单词之间使用 _ 隔开。例如STUDENT_MAX_AGE

(三)常量

  1. 什么是常量
    就是在程序的执行过程中其值不发生改变的量。所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序中运行过程中不允许被改变。
  2. Java中常量的分类
    (1):字面值常量
    (2):自定义常量
  3. 字面值常量的分类
    (1): 字符串常量 用双引号括起来的内容 “HelloWorld” ,“Hello”
    (2): 整数常量 所有整数 12,23
    (3): 小数常量 所有小数 12.34,56.78
    (4): 字符常量 用单引号括起来的内容 ‘a’,‘A’,‘0’ (注意事项:单引号中只能是单个字母,单个数字,单个符号)
    (5): 布尔常量 较为特有,只有true和false
    (6): 空常量 null
  4. Java针对整数常量提供了4种表现形式
    (1):二进制
    (2):八进制
    (3):十进制
    (4):十六进制
  5. 常量名一般使用大写字符。

(四)变量

1.变量的概述和格式

  1. 什么是变量
    在程序执行的过程中,在某个范围内其值可以发生改变的量
    变量其实是内存中的一小块区域

    通俗来说就是可以变化的量!

    Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。

  2. 为什么要定义变量
    用来不断的存放同一类型的常量,并可以重复使用

  3. 变量的定义格式
    数据类型 变量名 = 变量值 ;
    例如 int i=1;

  4. 注意事项

    每个变量都有类型,类型可以是基本类型,也可是引用类型。

    变量名必须是合法的标识符。

    变量声明是一条完整的语句,因此每个声明都必须以分号结束。

  5. 变量作用域

    1. 类型变量

    2. 实例变量

    3. 局部变量

在这里插入图片描述

  1. 变量的命名规范

    1. 所有变量、方法、类名:见名知意
    2. 类成员变量:首字母小写和驼峰原则:monthSalary,除了第一个单词以外,后面的单词首字母大写 lastname lastName
    3. 局部变量:首字母小写和驼峰原则
    4. 常量:大写字母和下划线:MAX_VALUE
    5. 类名:首字母大写字母和 驼峰原则:Man,GoodMan
    6. 方法名:首字母小写和驼峰原则:run(),runRun()

2.数据类型的概述和分类

1.为什么有数据类型
我们都知道,变量其实就是内存中的一小块区域。我们定义一个变量,其实就是开辟了一个内存空间。
如果没有数据类型,那么我们需要开辟多大的内存空间合适呢?
为了解决这种问题,java就给我们提供了不同的数据类型,那么针对不同的数据类型,在内存中分配了不同大小的内存空间。
2.Java中数据类型的分类
(1): 基本数据类型
(2): 引用数据类型: 数组 , 类 , 接口

3.基本数据类型的详细讲解

(1)数值型:

整数型字节数范围
byte1(8bit)-128~127
short2(16bit)-215 ~ 215 - 1
int4(32bit)-231 ~ 231 - 1
long8(64bit)-263 ~ 263 - 1
浮点型字节数范围
float4(32bit)-3.403*1038 ~ 3.403*1038
double8(64bit)-1.798*10308 ~ 1.798*10308
(2)字符型
字符型字节数范围
char2(16bit)0 ~ 216 - 1 = 65535

(3)布尔型

布尔型字节数范围
boolean1

4.整数默认是int类型的 , 浮点数默认是 double类型的
5.注意事项:

  • 定义long类型的数据,值的后面需要加一个后缀L(大小写都可)
  • 定义float类型的数据,值的后面必须要加一个后缀F(大小写都可)
  • 变量在使用之前必须赋值
  • 给变量赋值不能超过该数据类型的范围
  • 相同的作用域内不能定义两个同名变量

3.数据类型转换

1. 自动类型提升
概念:byte short char任意一种类型在参与数学运算时(如加法运算),会自动提升为 int 类型,如果还有long float double类型参与运算则会相应地提升为long float double类型,布尔类型不参与数学运算,byte short char之间参与数学运算时不发生相互转换,而是转换成int再计算。

class A{
	public void static main(String[] args){
	byte a=10;
	byte b=20;
	byte r=a+b;//报错:不兼容的类型:从int转换到byte可能会有损失
	System.out.println(r);
	}
}

??由于a和b参与运算自动转换成了int类型,因此上面的计算结果(a+b)也是int类型,不能直接赋给byte类型。

2. 隐式转换(自动类型转换)

  • 自动类型转换的实现需要同时满足两个条件:①两种数据类型彼此兼容,②目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)。
    例如 byte 类型向 short 类型转换时,由于 short 类型的取值范围较大,会自动将 byte 转换为 short 类型。但short类型数据和char类型数据之间相互转换只能靠强制类型转换,因为它们虽然内存占用相同但是表数范围不同(short是-215 ~ 215 - 1,char是0~65535)。
int a=10;
int b=100;
long c=a+b;//自动类型转换
  • 在运算过程中,由于不同的数据类型会转换成同一种数据类型,所以整型、浮点型以及字符型都可以参与混合运算。自动转换的规则是从低级类型数据转换成高级类型数据。转换规则如下:
    数值型数据的转换:byte→short→int→long→float→double。
    字符型转换为整型:char→int。
    boolean类型不能转换为其他的数据类型。
    以上数据类型的转换遵循从左到右的转换顺序,最终转换成表达式中表示范围最大的变量的数据类型。

3. 强制转换

  • 当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换。
  • 强制转换的格式
    目标数据类型 变量名=(目标数据类型)(被转换的数据);
    例如int a=(int)3.14;
  • 强制转换的注意事项
    尽量不要使用强制类型转化,因为可能存在损失精度的问题。
  • 面试题

1.byte a = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
答:有问题,会报错:int类型转换为byte类型可能会有损失。可以强制转换:

class A{
	public static void main(String[] args){ 
	byte b=(byte)130;
	System.out.println(b);
	}
}

结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5pNeWRjl-1634994622466)(C:\Users\hzm\Desktop\MarkDown学习\笔记\SE1关键字标识符常量变量运算符.assets\20200115181328232.png)]

2.byte b = (byte)128;

class A{
	public static void main(String[] args){ 
	byte b=(byte)128;
	System.out.println(b);
	}
}

结果:
在这里插入图片描述

为什么将128强转为byte型后结果是-128呢?
因为int类型的128是32位的,即00000000 00000000 00000000 10000000,强转为byte类型后为10000000,它是补码,表示-128,此处不需要推回去原码。详情见Java中,为什么byte类型的取值范围为-128~127?

3.byte c = 3+4;

class A{
	public static void main(String[] args){ 
	byte c = 3+4;
	System.out.println(c);
	}
}

结果:
在这里插入图片描述
为什么此处不会报错?
答:常量优化机制:多个常量相加时会先算出结果看在不在这个数据类型的范围内,若在不报错,否则报错。

4.Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。而当使用UTF-8编码方式时一个汉字占三个字节,char就存不下了。

(五)字符和字符串参与运算

1.字符参与运算

案例

class A{
	public void static main(String[] args){
    System.out.println('a'+1);
	}
}

结果
在这里插入图片描述
字符参与数学运算,对照ASCII码表值
ASCII码表常用的值:
‘0’-‘9’----48-57
‘A’-‘Z’----65-90
‘a’-‘z’----97-122
‘空格’----32

2.字符串参与运算

"+"不仅可以当数学运算符使用,还可以当作连接符:
当"+“号运算符两端只要任意一端是一个字符串,那么”+"就起连接符的作用。

案例

class A{
	public static void main(String[] args){
    System.out.println("Hello" + 'a' + 1);//HElloa1(Hello先和a形成新的字符串,再和1连接)
	System.out.println('a' + 1 + "Hello");//98Hello('a'先和1相加,再和hello连接)
	System.out.println("Hello"+100);//Hello100
	System.out.println("Hello"+100+33);//Hello10033(Hello先和100形成字符串Hello100,此时+左边仍是字符串,再和33形成字符串)
	System.out.println("Hello"+"10033");//Hello10033
	System.out.println(100+"Hello");//100Hello
	System.out.println(100+"Hello"+100+33);//100Hello10033
	System.out.println(100+11+"Hello"+100+33);//111Hello10033(100+11时+号两边没有字符串,所以做数学运算)
	System.out.println("5+5="+5+5); //5+5=55
	System.out.println(5+5+"=5+5");//10=5+5 
	}
}

(六)运算符

  • 什么是运算符
    对常量和变量进行操作的符号称为运算符
  • 运算符的分类
    • 算术运算符
    • 赋值运算符
    • 比较运算符
    • 逻辑运算符
    • 位运算符
    • 三目运算符

1.算术运算符

+ , - , * , / , % , ++ , -- 

案例演示

class A{
	public static void main(String[] args){
    int a=10;
	int b=3;
	int num=1;
	System.out.println(a+b);
	System.out.println(a-b);
	System.out.println(a*b);
	System.out.println(a/b);//整数相除,取的是商
	System.out.println(a*1.0/b);//将a转换为double型,除b,结果为double型,保留了小数
	System.out.println(a%b);//取余数
	//单独使用自增、自减运算符时,运算符在前在后结果一样
	num++;
	++num;
	num--;
	--num;
	//参与运算使用时,++在前,先自增,再使用;++在后,先使用,再自增
	int r=num++;
	System.out.println(r);
	System.out.println(num);
	
	num=1;
	int sum=3+(num++)-1+(num--)+1+(++num)+2+(++num)+10;
	System.out.println(sum);
	System.out.println(num);
	}
}

结果
在这里插入图片描述
注意事项:

  • 整数相除只能得到整数。如果想得到小数,请使用浮点数
  • /获取的是除法操作的商,%获取的是除法操作的余数
  • %运算结果的符号,取决于参与运算时左边的符号

2.赋值运算符

=+=,-=,*=,/=,%=

案例演示

class A{
	public static void main(String[] args) {
		//赋值运算符 = += -= *= /= %=
		
		int a=10;//把右边这个整数常量10 赋值给左边这个int类型的变量a
		
		int b=10;
		b=b+10; //等价于 b+=10; 累加;其他几个赋值运算符同理
		
		byte num=10;
		//num=num+10;会报错:不兼容的类型,byte自动类型提升为int了
		num+=5;//不会报错 会判断累加完的结果,在不在这个数据类型的范围内,如果不在会自动强制类型转换

		System.out.println(num);//15
	}
}

注意事项:

  • 基本的赋值运算符:=
    把=右边的数据赋值给左边。
  • 扩展的赋值运算符:+=,-=,*=,/=,%=
    += 把左边和右边做加法,然后赋值给左边。
  • 赋值运算符要求左边的数据必须是一个变量

3.比较运算符

<,>,>=,<=,==,!=,instanceof

案例演示

class A{
	public static void main(String[] args) {
		//比较运算符<,>,>=,<=,==,!=,instanceof
		//比较运算符的运算结果是布尔类型  区分 =和 == 号
		int a=10;
		int b=20;
		boolean flag1=a==b;
		boolean flag2=a>b;
		boolean flag3=a<=b;
	    boolean flag4=a!=b;
		System.out.println(flag1); 
		System.out.println(flag2); 
		System.out.println(flag3); 
		System.out.println(flag4); 
	}
}

结果
在这里插入图片描述

4.逻辑运算符

&(并且) , |(或者) , !() , ^(异或) , &&(短路与) , ||(短路或)

1.注意事项:
逻辑运算符一般用于连接boolean类型的表达式或者值。
在Java中我们要表示一个数大于3并且小于6 ,不可以写成3<x<6,应该写成 x>3 & x<6 。

2.案例演示

class A{
	public static void main(String[] args) {
		// 逻辑运算符的运算结果也是boolean类型
		int a=10 ;
		int b=20;
		//& 并且 运算两端只要任意一端是false,其最终结果都是false,只有两端都为true最终结果才是true
		boolean flag1=a>10&b<10;//false
		boolean flag2=a==10&&b>10;//true    
		boolean flag3=true&&false;//false
		// | 或者 运算两端只要任意一端为true,其最终结果都是true,只有两端都是false最终结果才是false
		boolean flag4=a==20|b>10;//true
		boolean flag5=false|false;//false
		boolean flag6=a>10|b<100;//true
		//! 取反 true变false false变true
		System.out.println(!(a==b));
		// ^(异或) 相同为false 不同为true
		System.out.println(false ^ false);
		System.out.println(true ^ true);
		System.out.println(a>b^a<b);

		System.out.println("---------------------------------------------------------");

        //  &(并且) , |(或者) 和 &&(短路与) , ||(短路或) 的区别
	    //他们在运算结果上没有区别,区别在运算效率上
		boolean flag7=a<10&(b++)>10;  //&两端都需要运算  &&只要左端为false 右端不需要运算,只有左端为true 右端才要运算
		System.out.println(flag7);
		System.out.println(b);
		
		b=20;
		boolean flag8=a<10&&(b++)>10;  
		System.out.println(flag8);
		System.out.println(b);//b结果为20不变,因为短路右端未参与运算
		

		boolean flag9=a==10|(b++)>10;  // | 两端都需要运算,|| 只要左端为true 右端就不需要运算,只有左端为false 右端才要运算
		System.out.println(flag9);
		System.out.println(b);

		b=20;
		boolean flag10=a==10||(b++)>10;  // | 两端都需要运算,|| 只要左端为true 右端就不需要运算,只有左端为false 右端才要运算
		System.out.println(flag10);
		System.out.println(b);//b结果为20不变,因为短路右端未参与运算      
	}
}

结果
在这里插入图片描述

3.&与&&、|与||的区别

  • 最终结果一样,区别在于效率上。
  • &和|两边都会执行。
  • &&具有短路效果。左边是false,右边不执行。
  • ||具有短路效果。左边是true,右边不执行。

4.结论:

  • &逻辑与:有false则false。
  • |逻辑或:有true则true。
  • ^逻辑异或:相同为false,不同为true。
  • !逻辑非:非false则true,非true则false。
    特点:偶数个不改变本身。
  • 开发中常用&&,||,!

5.位运算符

&()|(),^(异或) , ~(按位取反) , <<(左移) ,>>(右移) ,>>>(无符号右移)

注意事项:位运算符是直接对二进制补码进行运算。

1.规律:

  • &:有0则0
  • |:有1则1
  • ^:相同则0,不同则1
  • ~:按位取反 0变1 1变0
  • <<:左移 空位补0,被移除的高位丢弃。
  • >>:右移 被移位的二进制如果最高位是0,右移后,空缺位补0;如果最高位是1,高位补1。
  • >>>:无符号右移 被移位二进制最高位无论是0或者是1,空缺位都用0补。

2.案例演示

class A{
	public static void main(String[] args) {
		System.out.println(3&4); //0
/*       
         00000011  补码
&		 00000100  补码
-------------------------------------------- 
		 00000000  补码
*/
		System.out.println(3|4); //7
		System.out.println(3^4); //7
		System.out.println(~3); //-4

		// << : 把<<左边的数据乘以2的移动次幂   例如 10<<3    结果 10*2^3=80
		// >> : 把>>左边的数据除以2的移动次幂   例如 40>>3    结果 40/2^3=5
		System.out.println(3>>2); //3/2^2=0 
		System.out.println(3<<2); //3*2^2=12

		//^ 特点 一个数被另外一个数位异或两次该数不变
		System.out.println(3^4^4);//3
		System.out.println(3^4^3); //4
	}
}

结果
在这里插入图片描述

3.面试题

请实现两个整数变量的交换。

int a=10;
int b=20;
  • 方式一:(找一个中间变量)
int t;
t=a;
a=b;
b=t;
  • 方式二:(利用位异或运算符^的特点:一个数据被另一个数据位异或两次,该数本身不变)
a=a^b;
b=a^b; 
a=a^b; 
  • 方式三:
a=a+b;
b=a-b;
a=a-b;
  • 方式四:(一句话)
b=(a+b)-(a=b);

6.三目运算符

1.三元(三目)运算符的格式
(关系表达式) ? 表达式1 : 表达式2;
int a=(10>20)?30:50; a=50

2.三元运算符的执行流程
计算关系表达式的值,如果为true, 运算后的结果是表达式1;
如果为false,运算后的结果是表达式2;

3.案例演示
获取两个数中的最大值

class A{
	public static void main(String[] args){
		int a=10;
		int b=20;
		int max=a>b?a:b;
		System.out.println("最大值是:"+max);
	}
}

结果
在这里插入图片描述

class A{
	public static void main(String[] args) {
		int a=10;
		int b=20;
		int c=30;
		int max=a>b?a:b;
		int max2=max>c?max:c;
		System.out.println("最大值是"+max2);
	}
}

结果
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-24 14:48:21  更:2021-10-24 14:50:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:26:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码