Java核心基础

    xiaoxiao2023-10-14  137

    数据类型

    基本数据类型(简单数据类型 - 语言内置的类型)

    布尔型 :boolean true flase 纯粹的java中 数值不能给boolean赋值 boolean is /has/can 字符型:char 16 位 0个符号位 16位 全部都是数值位 char c1 = 'a' // 直接指定字面值 char c2 = 96 //ASCII char c3 = '\u4e2d' //i18n char c4 = '\t' //转移赐福 在ANSI编码当中 : 中文占据2个字节 英文占据1个字节 在Unicode编码当中: 空文件会有两个字节 整数类: byte short int(默认) long 整数类型: byte short int long 符号位(1)+ 数值位(n-1) 8 16 32 64 -128~127 int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1) long类型定义结束后可以+ L 比如打印一年的毫秒 System.out.println(365L*24*60*60*1000) //在任意一个数字后面+ L即可 否则会出现超出int的取值范围 整数类型赋值方式: int num1 = 25; // 十进制赋值 int num2 = 025; // 8进制赋值 int num3 = 0x25; // 16进制赋值 Int num4 = 0b1011; //2进制赋值 sinceJDK7.0 比如 byte n1 = 76; 76 = 64 + 8 + 4 = 0b000000001001100 所以byte n1 存储为 01001100 12345678 1 符号位 (0正数 1负数) 浮点类型:float double(默认) float 32 (1 + 8 + 23) F/f 符号位 + 幂指位 + 数值位 double 64 (1 + 11 + 52) D/d 符号位 + 幂指位 + 数值位 67.25 : 符号位: 0 整数部分:67 = 1000011 小数部分: 0.25 = 0.01 0.25 * 2 = 0.5 0 0.5 * 2 = 1 1 0.0 * 2 = 0 0 1000011.01 => 科学计数法 1.00001101 * 2(6) 符号位 + 幂指位(8) + 数值位(23个后面补充0) 0 6 00001101 幂指位(8) 默认值 01111111 = 127(8个2进制数的一半) 相当于0 6 : 01111111 + 110 = 10000101 0 10000101 00001101000000000000000

    ===============================

    System.out.println(2.0-1.1);

    引用类型(自定义类型 - 自己写的类型 Object)

    运算符

    + - * /

    +

    [+ :1 + 1 在什么情况下不能与2] 当字符串String和数值类型进行+链接的时候 不是代表算数运算 而是追加链接

    System.out.println('1' + 1 + "1" ); // char + int + String

    String属于引用类型 是一个类

    char + int + String ‘1’ + 1 + “1”

    char + int + String ‘1’ + 1 + “1” ’1‘ 首先转换成int类型 49 49+1 = 50 再追加一个String = 501

    * /

    数值进行乘法运算的时候可能出现数据越界,发生溢出

    int类型超过21亿的时候,就需要添加L商品价格7折优惠 int price = 1257; price = price * 0.7; //*.07 会牵扯到oirce强制类型转换成float //java当中整数除以整数一定为整数 优化方案: price = price *7/10;

    % 1 0 -1

    最终结果的符号位取决于参与运算的第一个数值 第一个数是正的 结果为 + 负 为 -

    5 % 2===========1 5 % -2==============1 -5 % 2=============-1 -5 % -2==============-1

    定义一个方法 要求传入一个int整数 返回一个Boolean值 判断奇数偶数

    public static boolean check(int num){ return ((num & 1) == 0); }

    += -= *= /= %=

    能够自动保持运算符左侧数据类型不发生任何变化

    int mum = 1; num = mun + 0.5 ; num += 0.5; num 先强制类型转换成float num保持int类型不变

    java当中整数 / 整数一定是整数

    > < >= <= = == !=

    public static void main(String[] args){ boolean isOk = false; if(!isOK){ System.out.println("not ok"); } }

    & | && ||

    [&逻辑非短路运算符] [&&逻辑短语运算符]

    当通过前面的条件能够得出最终结论的时候,短路运算符号会舍弃之后没有必要的无用功

    if(a<10 && a > 0 ){ System.out.println(a); } &&:短路 如果a !< 10就不会进行第二个判断

    运用:

    public static void main(String[] args){ int num = 1; if(++num > 5 && ++num < 10){ System.out.pirntln("随意");} Syetem.out.println(num) } 两种运算符就会有不同的效果

    ++ –

    [a :运算 b:取值 x++ => ba ++ x => ab]

    & | ^ ~ 二进制按位运算符

    18 & 15 00010010 & 00001111 00000010 = 2

    当一个正数%2的n次方数的时候 将完全等价于&(这个数字的2(n)-1)

    当实现权限控制权限的时候

    Unix: 1 :执行权限 2:写入 4:读取 chmod 777 验证777 7 & 4

    java当中的修饰符static 相当于汉语中的修饰符 public : 1 static : 8

    HashSet HashMap

    must be a power of two ===⇒ 必须是个2的n次方

    ^ 按位异或运算符

    相同是 0 不同是 1

    如何不借助第三块空间交换两个值

    int a = 3; int b = 5; a = a ^ b; b = a ^ b; a = a ^ b;

    取反就是1为0,0为1,5的二进制位是0000 0101,取反后为1111 1010,值为-6

    >> << >>> 位移运算符

    3 << 2   首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零   移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是   0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12。 相当于乘以2(2)  例如11 >> 2,则是将数字11右移2位 计算过程: 11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是 0000 0000 0000 0000 0000 0000 0000 0010。转换为十进制是2。 相当于除以2(2) *2 *4 *8 *16 *32 <<1 <<2 <<3 <<4 <<5 /2 /4 /8 /16 /32 >>1 >>2 >>3 >>4 >>5

    源码 补码 反码

    流程控制

    分支:

    if else 注意利用排他特性简化流程控制 switch case

    for

    for(char c = 'a' ; c <= 'z' ; c ++){ System.out.println((char)c) }
    最新回复(0)