数据类型
java是一种强类型语言,java中的数据类型分为引用数据类型和基本数据类型。其中基本数据类型有8种 int short byte long double float char boolean,而引用数据类型就是Object类及其子类对象。其区别就是,基本数据类型在栈中存储,引用数据类型在堆中存储,栈中只是指向堆中对象的地址。
运算符
java中的逻辑运算符:&& & || ^ | ! (逻辑运算符一般用于连接boolean类型的表达式)
&& 与 & 的区别:
&:两边都是true则为true,有点类似于且的意思,并且两边都得运算,还能进行位运算
&&:两边都为true为true,但是如果左边为false,则不运算
| 与||的区别
首先:两者都为或运算,不同的是,||是当左边为true,则不运算右边
^运算:两边不一样,结果为true;
java中的算术运算符:
+ - * / % ++ -- +(字符串相加)
java中的赋值运算符:= += -= /= *= %=
java中的比较运算符:== != < > <= => instanceof(检查是否是类的实例对象)
java中的位运算符:<< >> >>> ^ & | ~
<< : 乘以2的移动的位数次幂(空位补0,被移除的高位丢弃,补0,最高位是1,补1)
>> : 除以2的移动的位数次幂
>>>:被移除最高位无论 0或1 都用0补
~ :对应取反-1
&:只有1&1结果是1,否则是0
|:只有0或0结果是0 否则是1
java中的三元运算符:条件表达式?表达式1:表达式2 如果为true执行表达式1 否则执行表达式2
字符串
String在java中比较中重要,首先它是引用变量,并且是一个不可被继承的类,再者它的内部实现其实是一个char类型的数组。String类里为我们提供了大量的方法,可以使我们更方便的对其使用,而String在内存中的存储也有点特殊,它不仅可以在堆中创建对象,还会有个字符串池,这个里面会保存着我们用过的字符串,当我们给字符串直接使用 = 赋值时,就会先去这个池子里找,如果没找到才会去堆内存中重新开辟,并将其复制一份到字符串池。这样就减少了对内存的使用,因为当堆内存中的对象不使用时,垃圾回收机制会随机的将其清除掉,但是在此期间,它还是会占用不少的资源。
为了提高对字符串的使用,又衍生出两个StringBuffer 和StringBuilder类,这两个类的区别在于,StringBuffer的方法大多都是同步的,所以安全性高,效率低,但是StringBuilder正相反,因为没有实现同步方法,所以效率高效,但是安全性稍差。
控制语句
java中的逻辑控制语句有:
if(表达式),if(表达式1)else(表达式2),if(表达式1)else if(表达式2)else
;
循环语句有,while(),do{}while(),两者的区别是后者始终会先执行一次,再判断。
循环语句还有for(;表达式;),for each(),这两者的区别不大,效果都是一样的。只不过for each在处理数组或者集合是不在为下标所烦恼,因为可以挨个进行遍历。
多重选择:switch(char或者int或者byte或者枚举)case:表达式1break(跳出switch);default:break默认case
至于逻辑控制的一些关键字,有 break,continue,return等(类似goto在java中也有实现,但是不怎么使用)
break和continue有一种特殊用法,就是在多重循环时,可指定跳出或重新开始循环的地方
label:for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
if(j==15){
break label;
continue label;
}
}
}
for (int j = 0; j < 20; j++) {
if(j==15){
break label;
continue label;
}
}
}
在要跳出的地方使用一个标记,然后再使用break或者continue会有直接break出整个大循环,或者从大循环重新开始。
数组
数组是一种数据结构,用来存储同一类型值的集合,定义时使用Type[] arr 或者Type arr [] 数组的长度一旦定义就不可改变,除非创建一个新的长度的数组,并将之前数组的值copy到新的数组里,Arrays数组的工具类中为我们提供了这个方法,当然不止这个方法,还有一些别的方法,例如反转数组,数组排序等。获取数组中的元素需要通过下标的形式去获取,数组的下标从0开始到数组的长度-1结束。当然数组还有多维数组,用于存储复杂的数据。