java运算符、流程控制语句

≯℡__Kan透↙ 提交于 2019-12-05 10:39:40

    常见的进制
        十进制 1010
        二进制 满二进一  0B10101010 (JDK1.6是可以这样的)
        八进制 满8进一,数字在0_7之间  077  078(error)
        十六进制 满16进一,数字在0-9 A B C D E F 0x开头,x不区分大小写,0x0010 0XAABB

        计算机中,所有的内容在内存中都是二进制表示的

        'A'-->它的ASII 65    1000001 

    进制的转换
        ==十进制转成二进制
            6-->110
            21-->10101

        ==二进制转十进制
            10101-->1*2^0+0*2^1+1*2^2+0*2^3+1*2^4=21

        ==二进制转八进制
            10101010001010111---->010 101 010 001 010 111==0252127

        ==二进制转十六进制
            10101010001010111  --->0001 0101 0100 0101 0111==0x15457

    计算机中,一个二进制位是一个比特位(bit),  8个比特位是一个字节

    1024个字节,就是1k
    1024k是1M
    1024M是1G
    1024G是1T
    1024T是1p

    你好   4个字节
    101010101010101001
    4/1024==2/512   1/256

    负数在内存中表现的形式:是正数的按位取反+1

    3   -3
    byte a=3;  //1个字节
    0000 0011
    1111 1100
+            1
==================
    1111 1101        -3    

可以看出,正数的符号是0,负数的符号是1

   1 把 34 ,32,9,13,26 转成2进制, 8进制,16进制
        32 16 8 4 2 1  0b100010   042   0x22
   2 把 010010 , 10100101 转成  10进制,8进制,16进制
        010010  18 022 0x12

   3 把0x1F, 0712, 076 转成 10进制,二进制
        0001 1111   31

   4 写出 short a=-8 在内存中的表现形式 (提示:short是2个字节的长度)    
          8
          00000000 00001000
          11111111 11110111

        +                  1
        ======================
          11111111 11111000    -8

2 标识符

规定函数的名称,变量的名称,类的名称,包的名称等符号规则

由字母(a-zA-Z),数字,下划线_ 或$ 组成,数字不可以放在第一位
不能与关键字相同,(public class static void....)'
严格区分大小写,汉字也可以

name, 9username, Name,user_name ,$name , _name, user name , 
publicName, public ,name999,#name, L9, 中国  

3 变量

java中变量的类型 有两大类 (基本数据类型 引用数据类型)

基本数据类型 8 种

    整型
        byte  1个字节  有符号整数-128到127 
            byte a=127;  //ok
            byte a=-129;  //error

        short 2个字节 有符号整数 32767到-32768
            short a=125; //ok
            short a=32769;  //error

        int  4个字节  有符号整数  2147483647 到 -2147483648 之间

        long 8个字节 有符号整数  9223372036854775807 到 -9223372036854775808 之间
            long a=9;  //ok java中整数的默认类型int类型,给long是没有任何问题
            long a=9.0;  //error,9.0是浮点型
            long a=9L;  //ok long型,可以在后面加一个L,大小写不区分

    浮点型

        float  4个字节  有符号浮点数 (又称为单精度)  8位有效数字,会发现最后一位会进行4舍5入原则
            float a=3.14;  //error  3.14默认是double类型,
            float a=3.14f;  //ok;
            float a=40;  //ok

        double 8个字节  有符号浮点数(又称为双精度)  16为有效数字
            double a=1.5; //ok
            double a=1.5d;  //ok
            double a=1;  //ok

    字符型
        char 2个字节 ,可以装下一个汉子吗?  一个汉子是一个字符  
                      char的数字范围是多少之间?0-65535
            char a='A';
            char x='中';
            char x='中国';  //error
            char x='ab';  //error
            char x="中";  //error
            char x=90;  //ok  能书写数字
            char x=65536; //error
            char x=''; //不可以
            char x=' '; //ok
            char x='u0000';  //ok  代表一个空值

            //例一
            char可以直接当数字进行计算
            char a='A';
            int b=5;
            System.out.println(a+b);  //70

            //例二
            两个char相加
            char a='A';
            char b='B';
            System.out.println(a+b);  //131

    布尔型

         boolean  一个字节
                只有两个取值范围  true 和 false

    说明:
        整数的默认类型是int
        90  -->int 90

        小数的默认类型是double
        3.14 --> double 3.14

        例子
        float a=3.14; //error
        float a=3.14f;
        或
        double a=3.14;

        long num=99999999999999;//  error 原因:因为整数默认类型是int类型,但是99999999999999;超过了int,所以编译器在编译期报错
        long num=99999999999999L;  //ok

        byte a=127;
        //原因,因为byte127到-128,然后编译器在编译期的时候,是认识常量的,又因为byte能装下,所以没问题

引用数据类型
   类 对象 接口 数组.....

4 运算符 (算数运算符 赋值运算符 逻辑运算符 关系运算符 位运算符 条件运算符)


    ===算数运算符 + - * / % ++ --
    15000/10000*10000  -->10000

    1) / 使用
    两个整数相除,结果保留整数位

    double a=15000/10000--> 1.0  //15000和10000默认是整数int,相除得1,但是赋值给double,变成1.0
    double a=15000f/10000f;  -->1.5

    2) % 
    5%3=2
    3%5=3

    3) ++ -- 在原来的基础上加一或者减一
       int a=10;
       a++;  //a=a+1;  在a的基础上进行加一
       System.out.println(a);  //11

       也可以这样写  ++a,也是让a自加

        ++ 在前面和在后面有什么区别?
        //++在后面的例子
        int a=10;
        int b=a++;  //++在后面,要先赋值,此时b为10,在a++;此时a为11
        System.out.println(a);  //11
        System.out.println(b);  //10

        //++在前面的例子
        int a=10;
        int b=++a;  //++在前面,要先自加,此时a为11,在赋值;此时b为11
        System.out.println(a);  //11
        System.out.println(b);  //11

        --和++一个意思,只是做了减去一

    4) 字符串相加
        String str="1+2"+"3+4";  //此时的+是字符串连接符,并不是算数中的+

        如果两个不同类型的数进行计算,会把两个类型变成相同类型的,把小的变成大的

        String str="1+2="+1+2;
        System.out.println(str);  //1+2=12
        原因:"1+2"是字符串,而1是整数,类型不同,需要把小的int变成大的String,所以它们中间的+,就是字符串连接符,所以即是这个结果

        String str2=1+2+"1+2=";
        System.out.println(str2);  //31+2=

        String str="1+2="+(1+2);
        System.out.println(str); //1+2=3 

    几个常用的转义字符

    转义字符
    """-->"
    n   换行
    r   回车  //在window中,就是把光标移动到下一行
    t   制表符,相当于tab

    //通常在window系统中 换行符 rn  linux是n

=====赋值运算符

    //例一
    byte a=10;
    int b=a;  //ok  小类型往大类型放,没问题

    //例二
    byte a=10+5;  //ok 

    //例三
    byte a=10;
    a=a+5;  //error ,第一点:a是变量,编译器不认识变量,认为a+5很可以超过byte,所以java不让
                     第二点:a是byte,5是int,所以a+5最后是int类型,赋值给byte,不行

    //例四
    short a=10;
    a=a+5;  //不行,和上面原因一样

    //例五
    int a=10;
    a=a+5;  //行

    实验发现:上例子对byte和short都会报错,只有int没有,因为byte和short类型结果容易越界,所以
            java中规定对含有它们的变量进行计算的时候,不能再用byte和short去接受

    //例六 类型转换
    byte a=90;
    int b=a;  //ok

    int a=10;
    byte b=a;  //不行,如果非得行,就要强制类型转换

    int a=10;
    byte b=(byte)a;   //强制类型转换,当byte型可以装下的时候

    强调:强转的时候,要注意,不要超过低类型的范围

    如果超过低类型范围
    int a=128;
    byte b=(byte)a;
    System.out.println(b);  //-128

    问:有没有那么一种可能,原数值+1<原数值,存在,原数值是此类型最大值

    //例七  关于+=的操作

    byte a=90;
    a+=10;  //a=a+10  -=  *=  /=   %=   a+=10操作是比a=a+10快,并且有强制转换的含义a=(byte)(a+10)
    System.out.println(a);

======关系运算符
    <  >  <=  >= != == instanceof

    关系运算符的结果都是boolean类型的

======逻辑运算符

    &   与  两边都成立的时候,才为真,有一个为假,结果就为假
            a>b & b>c
    |   或  两边只要有一个成立的,结果就为真
            1>2 | 2>1
    ^   异或
            两边相同,结果为假,两边不同,结果位真
                true^false   true
                true^true   false
                false^false  false
    !   非   
    &&  短路与

    ||  短路或

        &和&&有什么区别?  !!!!
        前者左边不成立,右边还是会继续判断,
        后者左边不成立,右边就不会再进行判断了

        1>2 || 2>1 && 3>2  true

    &&优先级||

======位运算符

    & 按位与
          00000001
          00000010
          ========
          00000000
    | 按位或
           00000001
           00000010
           ========
           00000011
    ~ 按位取反运算符
          ~5=-6

          00000101
          11111010    -6

          负数=正数取反+1  
          正数取反=负数-1  正数取反=11111001
          正数=取反(正数取反)  正数=00000110  6
    ^ 异或
         相同为0,不同为1
          00000001
          00000010
          ========
          00000011
          附:一个数值和另一个数值,进行两次异或操作,将得到原来的值
            int a=90;
            a^=58;  //a=a^58;
            System.out.println(a); 
            System.out.println(a^58); 

    <<  //算数左移,逻辑左移
        算数左移和逻辑左移一样都是右边补0
        例子  数字6
        0000 0110   6
                        左移一次
        0000 1100   12
        发现:左移一次相当于成2
        (面试题: 如何快速算出2*8,让 2<<3)

        ps:这种成倍关系只有当左移被舍弃的高位不含有1的时候

    >> //算数右移,逻辑右移
        逻辑右移:只要将二进制整体右移,左边补0即可
        例如:00001100 逻辑右移 00000110
        相当除2
        ps:30>>12=0

        算数右移:符号位要一起移动,并且在左边补上符号位,如果符号位是1,就补1,是0就补0
        如果:11100算数右移一次,11110,(符号位进行补全)

    =====条件运算符 (三元表达式也叫做三目运算符)
    格式:
    条件表达式?表达式一:表达式二;

    执行流程:先判断条件表达式是true还是false,如果为true,那么结果为表达式一,否则为表达式二

    //例子 获取两个数据最大值
    int a=10;
    int b=12;
    int max=a>b?a:b;

    //例子 如果工作天数>30天,给5000元,否则是1000
    int day=29;
    int 钱数=day>30?5000:1000;  //int 钱数=5000;

    //例子 如果工作天数>30天,"继续努力",否则是"开除了"
    int day=29;
    String str=day>30?"继续努力":"开除了";  

    //例子
    int day=29;
    String str=day>30?System.out.println("继续努力"):System.out.println("开除了");  //编译报错

5 流程控制语句的几种结构

1) 顺序结构  略

2) 选择结构

3) 循环结构

==选择结构
    if
    if...else
    多重if
    嵌套if

    //例子 if
    int age=12;
    if(age>20){
        System.out.println("年龄大于20");
    }
    System.out.println(" 大专栏  java运算符、流程控制语句年龄小于20");

    或者
    int age=19;
    if(age>20)
        System.out.println("年龄大于20");  //离if最近的语句是if中的语句,不建议
    System.out.println("年龄小于20");

    //例子 if...else
    int age=19;
    if(age>20){
        System.out.println("年龄大于20");
    }
    System.out.println("我什么时候执行?");  //if和else中间不能有任何语句
    else{
        System.out.println("年龄小于20");
    }

    //多重if
        public static void main(String[] args){
            int month=10;
            if(month==1){
                System.out.println("一月");
            }else if(month==2){
                System.out.println("二月");
            }else{
                System.out.println("其他月份");
            }

            if(month==3){
                System.out.println("三月");
            }

        }

//嵌套if
public static void main(String[] args){
    String today="周末";
    String weather="晴朗";
    if(today.equals("周末")){  //String类型进行比较用equals("")
        if(weather.equals("晴朗")){
            System.out.println("去户外活动");
        }else{
            System.out.println("去室内活动");
        }
    }else{
        System.out.println("上班");
    }
}

======switch 选择语句
格式

   switch(表达式){  //byte  short int char Enum(枚举类型) String(jdk1.7之后实现的)
       case 值1:
            执行语句;
            break;
       case 值2:
            执行语句;
            break;
       case 值3:
            执行语句;
            break;
       default:
            执行语句;
            break;  //最后一个break可以省略
   }

   //例子
   int a=2;
    switch(a){
        case 1:
            System.out.println("a");
            break;
        case 2:
            System.out.println("b");
            //break;   如果这里不加break,则下面的语句还会还行,直到遇到break,才结束switch
        case 3:
            System.out.println("c");
            break;
        default:
            System.out.println("其他");
            //break;
    }

    //例子
    public static void main(String[] args){
        int a=2;
        int b=3;
        char ch='+';
        switch(ch){
            case '+':
                System.out.println(a+"+"+b+"="+(a+b));
                break;
            case '-':
                System.out.println("a-b="+(a-b));
                break;
            case '*':
                System.out.println("a*b="+(a*b));
                break;
            case '/':
                System.out.println("a/b="+(a/b));
                break;
            default:
                System.out.println("其他");
                //break;
        }

    //例子 
    //需求 根据用户指定的月份,打印出所属的季节
        int a=2;
        switch(a){
            case 1:
            case 2:
            case 12:
                System.out.println("冬季");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println("春季");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏季");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋季");
                break;
            default:
                System.out.println("输入有误");
        }

    //switch语句速度比if快
    // if(a==2){

       }else if(a==1){

       }else if(a==3){

       }

      switch(a){
          case 1:
            ....
          case 2:
            ....
      }

      //例子 
      从键盘输入一个月份,判断他是第几季度

      import java.util.Scanner;
        class Hello{
            public static void main(String[] args){
                Scanner scan=new Scanner(System.in);
                int month=scan.nextInt();
                if(month>=1 && month<=3){
                    System.out.println("第一季度");
                }else if(month>=4 && month<=6){
                    System.out.println("第二季度");
                }else if(month>=7 && month<=9){
                    System.out.println("第三季度");
                }else if(month>=10 && month<=12){
                    System.out.println("第四季度");
                }else{
                    System.out.println("月份有误");
                }
                scan.close();
                System.out.println("程序结束");
            }
        }

====循环结构  
        下周见

//练习
        1.把今天的例子都写一遍,然后保存起来

        2.输入一个成绩
            0-20 分之间:这孩子完蛋了
            21-40 之间:这孩子太操心了
            41-60 之间:赶紧救救吧
            61-80 之间:祖国的希望
            81-100 之间:开什么玩笑,一定是抄的

        public static void main(String[] args) {
            /*
             * 输入一个成绩 0-20 分之间:这孩子完蛋了 21-40 之间:这孩子太操心了 41-60 之间:赶紧救救吧 61-80 之间:祖国的希望
             * 81-100 之间:开什么玩笑,一定是抄的
             */
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入一个分数");
            int score = scan.nextInt();
            if (score >= 0 && score <= 20) {
                System.out.println("这孩子完蛋了");
            } else if (score >= 21 && score <= 40) {
                System.out.println("这孩子太操心了");
            }else if(score >= 41 && score <= 60){
                System.out.println("赶紧救救吧");
            }else if(score >= 61 && score <= 80){
                System.out.println("祖国的希望");
            }else if(score >= 81 && score <= 100){
                System.out.println("开什么玩笑,一定是抄的");
            }else{
                System.out.println("数字有误!");
            }
            scan.close();
        }

        3.输入两个整数,一个符号
        然后进行加减乘除操作
        public static void main(String[] args) {
            /*
             * 3.输入两个整数,一个符号 然后进行加减乘除操作
             */
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入第一个整数");
            int num1 = scan.nextInt();
            System.out.println("请输入第二个整数");
            int num2 = scan.nextInt();
            System.out.println("请输入一个符号");
            String str = scan.next(); //  "+"
            char ch=str.charAt(0); //'+'
            switch (ch) { // char '+' '-'
                case '+':
                    System.out.println(num1+"+"+num2+"="+(num1+num2));
                    break;
                case '-':
                    System.out.println(num1+"-"+num2+"="+(num1-num2));
                    break;
                case '*':
                    System.out.println(num1+"*"+num2+"="+(num1*num2));
                    break;
                case '/':
                    System.out.println(num1+"/"+num2+"="+(num1/num2));
                    break;
                default:
                    System.out.println("您输入的符号有误");
                    break;
            }
            scan.close();

        }

        4.输入一个年份和一个月份,得到当前月份一共多少天
        Scanner scan = new Scanner(System.in);
            System.out.println("请输入月份");
            int month = scan.nextInt();
            System.out.println("请输入年份");
            int year = scan.nextInt();
            switch (month) { // char '+' '-'
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    System.out.println(year+"年的"+month+"月有31天");
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    System.out.println(year+"年的"+month+"月有30天");
                    break;
                case 2:
                    //能被4整除并且不能被100整除 或者 能被400整除的数
                    if((year%4==0 && year%100!=0) || year%400==0){
                        System.out.println(year+"年的"+month+"月有29天");
                    }else{
                        System.out.println(year+"年的"+month+"月有28天");
                    }
                    break;
                default:
                    System.out.println("输入的月份有误");
                    break;
            }
            scan.close();


12345678910111213141516171819202122
1. 定义一个类名字叫person,类中有主方法,方法中有几个类型变量	   第一个是byte类型变量,变量名(9age,age)任选一个作为名称,表示年龄,给9岁	   第二个是short类型,变量名(fa age,$fage)任选一个作为变量名称,给30;	   第三个是int类型,变量名a 给50;	   第四个是long类型,名称b 给100;	   第五个是float类型,名称给f,给4.0	   第六个是double类型,名称d 给6.87	   第七个是char类型,名称c 给40;	   第八个是char类型,名称c1 给'中'	   第九个是char类型,名称c2 给'国'	   	   分别输出第一个加第二个值	   int af=age+$fage;	   输出第六个加第五个值	   输出第四个加第三个加第七个值	   输出第八个加上第九个	   	   看到结果  age+fa_age=???	   System.out.println("age+fa_age="+af);	   	   byte age=9;	   short $fage=30;


附:
next()和nextLine()区别?
nextLine()遇到回车,即为结束,
next()遇到无效字符,即为结束

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!