(1)基本数据类型
数值型
整数
byte 字节 8bit -128~127
short 短整型 16bit -32768~32767
int 整形 32bit -2147483648~2147483647
long 长整型 64bit
小数(浮点数)
字符型
char 16bit 无符号位
布尔型
boolean 8bit true/false
(2)引用数据类型
类,数组,接口
二进制(0b开头)八进制(以0开头),十进制,十六进制(以0x开头)
进制转换:十–>八(直接除,将余数按倒序排列)
八–>十(位数乘对应的八的次方最后相加)
高精度到低精度需要强制类型转换,即(转换类型)数值
但是高精度转换为低精度有可能会损失精度(高位截取),即只保留低位数据,截掉高位数据
例 0000 0001 1010
--> 1010
丢失高位数据
低精度到高精度是自动类型转换,不需要强转
byte -->short --int -->long -->float -->double
char–>
char没有负数,short有负数,两者范围大小相同但是区间不同,所以两者之间无法自动转换
则char也无法转换为byte
运算结果一定等于高精度数据类型。例:int*double=double
注:当byte,short,char,int四种类型中,任意一种或多种进行混合运算时,结果均为int类型
因为int是整形,所以5/2=2,并不是2.5,只保留结果整数部分
java中整数默认为int类型,小数默认为double类型
使用方法,放到想转义的字符之前,例\¥,¥就被转义了
在整个生命周期中不能修改,且不能复用
System.out.print(6)
常量:被final修饰过的变量
final int a=6;
在整个生命周期中不能修改,但可以复用
变量:可以复用,可以修改
int a=6;
System.out.print(a);
a=7;
System.out.print(a);
java中没有全局变量,因为java已经模块化封装了,已经屏蔽了全局的概念,但是可以将变量设置成public,
这样在其他类中也可以通过 类名.变量名 的方式来访问public变量
java中也没有函数,只有方法,因为java已经模块化封装了,方法只属于某个类或某个对象,
外部需要通过 类名.方法名 的方式来进行二次调用
数据类型 变量名=值;
数据类型 变量名;即只划分内存空间不赋值
局部变量:在方法中创建的变量是局部变量
成员变量:在类中(方法外)创建的变量
静态变量:在类中(方法外)用static修饰的变量
public class Var{
//成员变量
int a=11;
//静态变量
static int b=22;
public static void main(String[] args){
//局部变量
int c=33;
}
}
局部变量:在方法中,直接写变量名调用即可,方法外无法使用其他方法中的局部变量
静态变量:类名.静态变量名 进行调用,同类中,类名可以省略
成员变量:对象.成员变量名
静态变量和成员变量是有默认值的,
整数:0 ,小数:0.0 ,字符:\u0000 ,布尔:false ,引用类型:null
局部变量没有默认值,不赋值不能使用
若局部变量和静态变量重名,则默认调用局部变量
如果想调用静态变量,则需要加上类名前缀(类名.静态变量名)
作用域即作用范围,例如在一个大括号内,作用范围就是这个大括号内的所有地方
算术运算符(+,-,*,/,%,++,–)
++:只要出现++则该数或变量本身必定加一
int a=10
a++ + ++ a=
10(本身加一)+(11加一)12=22
注:a++与a=a+1并不相同
a++会自动进行强制类型转换,而a=a+1需要手动进行强制类型转换
返回的结果都是布尔型true/false
位运算,得到的是boolean类型的值
&:位与,两边都是真,结果才是真
| :位或,一边为真,则结果为真
!:位非,去反,真变假,假变真
^ : 位异或,相同为假,不同为真
&&:短路与,两边都为真,则结果为真 ,如果第一个条件为假,则不在判断第二个条件,直接返回false
| | :短路或,如果第一个条件为真,则不在判断第二个条件,直接返回true
&与运算也可以两边都是数字,则进行与运算,结果不会大于两个数中的最小数
把数字转换为二进制,进行每位比较,若都为1,则取1,否则取0
1010
&1111
1010
^ : 也可以两边都是数字.则进行异或运算
把数字转换为二进制,进行每位比较,相同为0,不同为1
1010
^1111
0101
0和任何数进行异或运算, 结果都是他自己 , 例0^x=x
相同的数字进行异或运算两次,结果都是0, 例x^x = 0
<< : 左移运算,左移一次,等于该数乘2 , 只补0,即除符号位,删除最左边一位,在最右边补0
1000 0010(原码)
反码:1111 1101
移位:1111 1000
补码:1111 0111
反码:1000 1000(移位后的原码)
“>>” :右移运算,右移一次,等于该数除2 , 正数补0,负数补1,除符号位,删除最右边以为,在最左边补0 (负数补1)
">>"过程与左移相似,只有补0 和补1 的区别
“>>>” : 右移运算,同上, 但是 只补0 不补1,而且不考虑符号位
第一位表示符号(正是0,负是1),其余位表示数值
+1= 原:[ 0000 0001 ]
-1= 原:[ 1000 0001 ]
反码:正数和原码相同,负数在源码的基础上各位取反但符号不变
+1= 原: [ 0000 0001 ] = 反:[ 0000 0001 ]
-1 = 原:[ 1000 0001 ] = 反:[ 1111 1110 ]
补码:正数和源码相同,负数在源码基础上符号位不变,其余各位取反加一