Java基础知识整理三

运算符
算数运算符
赋值运算符
比较运算符
逻辑运算符
类型相关运算符
%如果求余运算符的两个操作数中的有1个或者两个是浮点数,则允许第二个操作数是0或0.0,只是求余运算的结果是非数:NaN,0 或0.0对0以外的任何数求余都将得到0或0.0。

自加自减只能用于操作变量,不能用于操作常量。
+可以作为加法运算符,又可以作为连接运算符
赋值运算符:
将表达式赋值给变量
位运算符
&:按位与
|:按位或
~:按位非
^按位异或
<<:左位移运算符

:右位移运算符

:无符号右移运算符
左移运算符是将运算数的二进制码整体左移指定位数,左移后边空出来的以0来补充
Java的右移运算符有两个:>>和>>>对于>>来说:把第一个操作数的二进制补码右移指定尾数后,左边空出来的位以原来的符号位进行填充。如果第一个原来的操作数是整数,则左补0;如果第一个操作数负数,则左补1。>>>是无符号右移运算符,他把第一个操作数的二进制码右移指定位数后,左边空出来的总是以0来填充。
右移运算后得到的结果的正负与第一个操作数的正负相同。
无符号右移运算符后的结果总是得到一个正数。
对于低于int类型(如byte)的操作数总是先自动转换为int类型后再位移。
对于int类型的整数位移,a>>b,当b>32,系统会对32求余,得到的结果才是真正的位移数。
对于long型的整数位移时a>>b,当b>64时,总先用b对64求余,得到的结果才是真正的位移位。

赋值运算符:
+=: -=: *=: /=: %=: &=: |=: ^=: <<=: >>=: >>>=:
比较运算符:

:
=:
<:
<=:
==:如果操作数都是引用类型,只有当引用变量引用相同的类的实例时才可以比较,而且必须这两个引用指向同一个对象才会返回true
!=:如果两个操作数都是引用类型,只有当两个引用类型的变量引用相同类的实例时才能进行比较,只要指向不是同一个对象就返回true.
逻辑运算符:
&&:前后两个操作数都是true才返回flase
&:不短路与,与&&相同,但不短路
||:只要有一个为true,就返回true
|:不短路或,与||相同,但不会短路
!:如果操作数为false则返回true
^:异或,当两个操作数不同时返回true
三目运算符:
(?:)格式() (条件)? A:B

运算符的结合性和优先级
从高到低:
分隔符->单目运算符->强制类型转换符->乘法/除法/求余->加法减法->移位运算符->关系运算符->等价运算符->按位与->按位异或->按位或->条件与->条件或->三目运算符->赋值
流程控制和数组
分支结构(if和switch)和循环结构(while ,for,do…while,foreach)。还提供了break和continue来控制程序的循环结构。
顺序结构:
分支结构:
一个代码块通常被当成一个整体来执行(除非遇到return,break,continue等关键字),因此这个代码块被称为条件执行体。
空语句(;)
If…else基本规则:总是优先把包含范围小的条件放在前面处理。
Switch后面跟的只能是整形(long除外),不能是Boolean型,case标签后紧跟一个代码块case标签作为这个代码块的标识。
Switch语句中控制表达式的类型只能是byte,short,char,int不能是字符串,(与C#不同)
循环结构:初始化语句
循环条件
循环体
迭代语句
循环后加分号会造成死循环
While先判断条件
Do…while先执行循环体,再判断条件
对于for循环而言,循环条件总比循环体要多执行一次
嵌套循环:
控制循环结构:return可以结束整个方法
Break语句不仅可以结束所在的循环,还可以直接结束外层循环,只要加一个标签即可
在这里插入图片描述
标签必须在break语句所在的循环的外层之前定义才有意义。
Continue只是中止本次循环,开始下一次循环。Continue也可以跟一个标签,用于直接结束标签所表示循环的当此循环,开始下一次循环。
数组类型:
Java要求数组具有相同的类型,只能存储一种数据类型,一旦数组的初始化完成,数组在内存中所占的空间将被固定下来,数组长度保持不变。
数组是引用数据类型
c#我不支持int a[]这种方式Java可以,但可读性不高
数组元素必定有初始值,有两种形式:一种是由系统自动分配,一种由程序员指定。
初始化有两种:静态初始化:由系统决定长度
动态初始化:程序员指定长度,由系统为数组元素分配初始值。
子类是一种特殊父类的实例。
系统分配初始值:
1.数组元素的类型是基本类型的整数类型(byte,short,int和long)数组元素的值是0;
2.数组元素的类型是基本类型的浮点类型(float double)数组元素的值是0。0;
3.数组元素的类型是基本类型的字符类型(char)数组元素的值是’\u0000’;
4.数组元素的类型是基本类型的布尔类型(boolean)数组元素的值是false;
5.数组元素的类型是引用类型(类,接口,数组)数组元素的值是null;
当使用foreach循环来迭代输出数据元素或者集合时,通常不要对循环变量赋值,容易引起错误。
使用foreach改变变量时只能赋值给一个临时变量,原先的变量没有改变。
数组元素和数组变量是分开存放的,引用变量是访问真实变量的基本方式。
如果我们希望在程序中访问数组,则只能通过这个数组的变量来访问它
实际的数组元素被存在堆中;数组的引用变量被存在栈中。
当一个方法执行时,每个方法都会建立自己的内存栈,而定义的变量就会逐个放入栈里,方法结束,栈中所占的内存也就销毁。堆内存的数据不会随着方法的结束而销毁。只有当一个对象没有任何引用变量引用它时,系统垃圾回收机制才收回。
当我们看一个数组时,一定要把数组堪称两部分,一个是数组的引用,也就是在代码中定义引用变量;还有一个是实际数组本身,这部分是运行在系统内存里的,通常无法直接访问它,只能通过数组引用变量来访问。
基本类型数组的初始化:
引用类型数组的初始化:引用类型数组的数组元素是引用,每个元素的存储还是引用,它指向另一块内存,这块内存里存了有效数据。
多维数组:
类似于交错数组
在这里插入图片描述
可以使用静态初始化一个二维数组,string[][] str1=new string[][]{new string [3],new string[] {“hello”}};
java语言里没有多维数组,(抽象角度)
操作数组的工具类:int binarysearch(type[] a,type key),使用二分查找key元素的值在a数组出现的索引,如果A数组不包含key元素值,则返回负数,调用该方法要求数组已经按照升序的方式排列。
Int binarysearch(type[] a,int fromindex,int toindex,type key)他只搜索从fromindex到toindex索引的元素,也是数组按照升序的方法排列。
Type[] copyof(type[] original ,int new length)这个方法将会把original数组复制成一个新数组,其中length是新数组的长度。
Type[] copyofrange(type[] original,int from,int to) 只复制从from到同to的数组的值
Boolean equals(type[] a,type[] a2)如果a和a2的长度相等且a和a2的数组元素也一一相同,则返回true
Void fill(type[] a ,type val)会把a数组的所有元素赋值为val,.
Void fill(type[] a,int fromindex,int toindex type val)仅仅将fromindex到toindex元素赋值为val
Void sort(type [] a)对数组元素进行排序
Void sort (type[] a,int fromindex ,int toindex)把元素从fromindex到 toindex进行排序
String tostring(type[] a)将一个数组转换成一个字符串
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43467548/article/details/94383006