基础

java的8种基本数据类型:

数值(最高位 符号位)
整型
byte 1 [-128,127] -27,(27)-1
short 2 -32768,32767 -215,(215)-1
int 4 -231,(231)-1
long 8 -263,(263)-1
浮点
float 4(1符号8指数23小数位) -2^128 3.4E^38 小数点后6-7位
double 8(1符号11指数52小数位) -2^1024 1.7E^108 小数点后15-16位

java程序里整数的字面值(直接值)默认是int类型,如果超出int表示范围的字面值得加上l/L, 在字面值后面加上l/L就表示该数据是long类型的

java程序里浮点数的字面值(直接值)默认是double类型,只有在该值末尾加上f/F表示是float类型的数据

字符 char 2 0-65535
第一种:给一个[0,65535]区间的值
第二种: 用单引号 ’ '一个字符 可以是中文字符
第三种:Unicode编码 \u 十六进制的数 ‘\uxxxx’ x{0-9,a-f}

布尔 boolean 1 true false

类型转换:
隐式类型转换(默认):短字节的数据可以隐式转换成长字节的数据
byte->short->int->long->float->double
char–>int
byte short char在进行计算时会先转换成int类型计算 所以得到的结果也是int类型
强制类型转换:
长字节数据转换成短字节数据需要用强制类型转换
1.数据可能溢出
2.精度可能缺失

变量:
1.变量的声明(定义) 变量必须先声明后使用
2.变量的初始化 变量必须初始化之后才能取值
3.变量的操作 取值 赋值
4.变量名的规则

一、运算符 操作符

  1. 算术运算符

        • / %
          数据溢出问题
          / 除法 整数得到的结果是int 商的整数部分
          % 取余 商是整数,剩下的余数
          浮点类型进行算术运算得到的结果可能不精确
  2. 赋值运算符

    混合赋值运算符 += -= *= /= %=
    变量 X= 操作数;

字符串: 由字符组成的一个串
在java中用"" 引起的内容就称之为字符串
字符串支持 + 运算,把字符串和其它数据拼接在一起
但是不支持 += 运算
字符串和任意数据相加的结果都是字符串

  1. 关系运算符 结果是boolean类型 结果只有true或者false

    = < <= == !=
    x>y 如果x的值大于y,结果为true,否则为false
    x>=y 如果x的值大于或者等于y,结果为true,否则为false
    x<y
    x<=y
    xy 判断是两个等于号,因为一个=是赋值运算符
    x!=y !(x
    y)

  2. 逻辑运算符 逻辑运算符操作数是布尔类型
    多个关系表达式之间 一定要用 逻辑运算符 连接
    多个关系表达式不能直接连用 x<num<y ERROR
    把多个布尔类型转接在一起得到一个结果
    && || !

    a&&b a b 结果
    true true true
    true false false
    false true false
    false false false
    &&逻辑与,只有连接两个布尔类型数据的值都为true时结果才为true

    a||b a b res
    true true true
    true false true
    false true true
    false false false
    ||逻辑或,只有当连接两个布尔类型数据的值为false时结果才为false

    !逻辑取反
    !a a res
    true false
    false true

    逻辑运算符的短路特性:
    expr1 && expr2
    用&&连接表达式,如果&&前面的表达式expr1的结果为false时,这个时候无论expr2的值为true还是false,都影响不了最终结果,所以这个程序为了效率,直接不再计算表达式expr2

    expr1 || expr2
    用||连接表达式,如果||前面的表达式expr1的结果为true时,这个时候无论expr2的值为true还是false,都影响不了最终结果,所以这个程序为了效率,直接不再计算表达式expr2
    
    以上特性称之为逻辑运算符的短路特性
    
  3. 自增自减运算符
    ++ –
    前后++
    前后–
    ++num: 前++,先自增1,然后根据自增1之后的结果再进行运算
    num++: 先拿num的值进行运算,运算完之后,num的值自增1
    num++
    ++ --不要连用,对于一个变量在一个表达式中最好只出现一次++或者–

    y = ++x; /相当于/ x = x+1; y = x;
    y = x++; /相当于/ y = x; x = x+1;

特别注意:计算机中存储数据是存储数据的补码形式

  1. 位运算符
    & | ^ ~ << >> >>>
    & 按位与 二进制位
    a & b (a和b代表二进制位的一位上的值)
    1 & 1 = 1
    1 & 0 = 0
    0 & 1 = 0
    0 & 0 = 0
    推论:-1 & num = num

    | 按位或 二进制位
    a | b
    1 | 1 = 1
    1 | 0 = 1
    0 | 1 = 1
    0 | 0 = 0
    推论:-1 | num = -1
    0 | num = num

    ^ 按位异或 异1
    a ^ b
    1 ^ 1 = 0
    1 ^ 0 = 1
    0 ^ 1 = 1
    0 ^ 0 = 0
    推论:0 ^ num = num
    -1 ^ num = ~num
    ~ 按位取反
    ~a
    0 1
    1 0

    << 按位左移 num << n ===> num << n%32; 移位大于32时会对32求余
    左边移出的部分舍弃,右边补0
    如果不考虑溢出的问题,其实就是原来的基础之上 乘以 2^n
    向左移一位,相当于乘以2

    按位右移 (带符号右移)
    右边移出的部分舍弃,左边补符号位 为什么补符号位是因为想保证负数右移之后依然是负数
    向右移n位 相当于 除以 2^n
    向右移1位 相当于 除以 2

    无符号右移
    右边移出的部分舍弃,左边补0
    -1>>n 结果都是-1

    010(八进制的数) 10(十进制的数)
    二进制: 01 java不能直接表示二进制
    十进制: 0-9
    八进制: 0-7 java中以0打头的数值是八进制的数
    十六进制:0-9a-f java中以0x打头数值是十六进制的数

    二、八、十六进制转换成十进制
    十进制 转换成 二进制
    二进制 与八进制 十六进制 之间的相互转换
    0 101 010 101 --> 八进制 从右往左 每三位一单元 0525
    01 0101 0101 --> 十六进制 从右往左 每四位一单元 0x155
    01011011101 01335 0x2dd
    0111111011101 07735 0xfdd
    01732465 --> 001111011010100110101
    0xfda59e --> 111111011010010110011110

    如果用八进制表示一个int类型的数据 0[0-3]7777777777
    如果用十六进制表示一个int类型的数据 0x0 - 0xffffffff

    十进制的整数换算成二进制:
    (1)除以2求余数 直到商为0 余数从下往上依次即二进制
    (2)用2^n凑数 如果大于该数,则该为1,否则为0
    317 = 0100111101
    317-256 = 61 - 32 = 29-16=13-8=5-4=1
    二进制数据转换成十进制的数:二进制的位*2^n 从右往左第n位,n从0开始
    01011010101 =
    2^9 + 27+26 + 2^4 + 2^2 + 2^0
    = 512 + 128 + 64 + 16 + 4 +1
    = 725

计算机中存储数据所用的进制是二进制:
一个数据最高位代表符号位: 0代表正数 1代表负数
一个int有32个二进制位
1. 原码 直接把整数换算成二进制 如果是负数,最高位填1
2. 反码 负数的反码 符号位不变,其它位按位取反
3. 补码 负数的补码等于其反码+1

5+5 = 10
0101
0101
1010 = 10
原码计算有问题:
5+(-5) = 0
0...0101
1...0101
1...1010  = -10

反码算加法没问题:
0...0101
11111010
11111111  10000000  = -0 = 0

反码计算正数减负数有问题:
5-(-5)
0...0101
11111010
00001011  11

补码解决了正数减负数的问题:
0...0101
11111011
00001010  10  
	从而计算机中存储数据都是以补码的形式

0-5 = -5
0000000000
0000000101
1111111011    最高位是1表示是一个负数
1111111010 -> 1000000000101   -5

7.三目运算符
expr?val1:val2
如果expr为true,则表达式结果为val1,否则为val2
val1和val2可以是表达式,但不能是语句

8.其它运算符
() 用来提高优先级
建议常使用()
, int x=1,y=2;
[] 数组访问运算符

JAVA语句:
语句块:用{}括起来的语句 语句块
一般来说当遇到{花括号时,下面的语句会向右缩进4个空格
遇到}花括号时,语句向左回4个空格

好的程序可以说是一种艺术
  1. 顺序执行语句
    从上往下依次顺序执行

  2. 分支选择语句
    遇到不同的情况执行不同的代码
    (1)if分支选择语句
    例子:键盘输入一个整数 判断输入的这个整数是不是大于0
    如果大于0输出 “正数” 两个字
    情况一:当条件为true时执行语句块的内容 当为false时直接跳过语句块
    //条件只能控制语句块本身执不执行 并不能左右语句块后面的语句
    if(condition){
    //code
    }
    例子:判断一个整数是偶数还是奇数 直接输出 “偶数” 或者 “奇数”
    当一个整数确定之后,这个数只会是偶数或者奇数,而且只会是其中一种
    情况二:只会选择其中之一的语句块执行 而且一定会选择其中之一执行
    if(condition){
    //当condition为true时执行此代码块的语句
    }else{//转折关系 否则
    //当condition为false时则执行此代码块的语句
    }
    例子:输入一个月份,输出该月份有几天
    1,3,5,7,8,10,12 这些月份有31天
    4,6,9,11 这些月份有30
    2 可能28天,可能29天
    剩下其它情况 月份不存在
    情况三:判断其中一些情况,从上往下判断,如果满足其中之一则执行该语句块,后面的不再进行判断 如果所有条件都为false时那么一个也不执行
    if(con1){
    //当con1条件为true时执行
    }else if(con2){
    //当con1条件为false且con2为true时执行
    }else if(con3){
    //当con1和con2都为false且con3为true时执行
    }else if(conn){
    //当con1…con(n-1)都为false且conn为true时执行
    }
    情况四:一定会选择其中之一分支执行
    if(con1){

     	}else if(cod2){
     	
     	}else if(cod3){
     	
     	}else if(codn){
     	
     	}else{
     		//当以上条件都不满足的时候执行该分支
     	}
     
     如果有多个if..else if  当前面有条件满足之后,后面的条件不管true还是false都不会执行
    

    (2)switch分支选择语句
    开关语句 表达式的结果 和 case语句的值 相等时 就相当于打开开头,进入执行,依次往下执行,如果要结束switch语句,必须用break关键字 或者 一直执行到语句块结束
    switch(表达式){
    case 常量表达式1:
    code
    break;
    case 常量表达式2:
    code
    break;

    case 常量表达式n:
    code
    break;
    [default://可以省略 相当于if语句中的else
    code
    ]
    //default放在位置不重要,都是要等所有的case都判断过了之后没有符合的情况才会执行default语句 一般来说放最后
    }

    if(expr cond) 针对if()里的内容 只要结果是true/false即可
    switch(表达式) 针对switch()里的表达式它的结果只能是整数类型(byte short int long) 或者 char
    但是从JDK1.7版本开始,已经支持字符串
    case后面的表达式的结果一定是精确的

    判断一个浮点类型变量是否等于0
    float f = xx;
    if(f < 0.000001 && f > -0.000001){
    //就表示f的结果为0
    }

    分支选择语句嵌套

  3. 条件循环语句
    只要满足一定的条件不断重复执行某些代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值