day02 Java之语言基础组成

来源:互联网 发布:c语言递归求和 编辑:程序博客网 时间:2024/05/22 16:45

1.关键字

- 规范:必须小写(类名首字母大写)。- 有特别意义的标识符,诸如case,abstarct等等无须强记。

2. 标识符

-程序中自定义的有意义的名称。-规范:26个英文字母大小写,数字0~9,符号 _ $组成;      数字不可以开头;不可以使用关键字。-注意:_ 连接某些名称$子名称(Demo_1$Test);      凡是名称都是标识符。          

3.注释

-单行注释://-多行注释:/*......*/-文档注释:/**......*/     -多行,文档区别:文档可以被javadoc.exe提取,生成一个说明书,把这些文档注释和源代码放在一个网页文件中,它记录了说明性文字和程序代码。-注意:多行注释不允许多行注释;           注释不占字节码。           前期敲代码必须要有注释(诸如思路步骤说明等)。-作用:注解说明;           调试程序。

4.常量和变量

 -常量:不能改变的数值。 -分类:整数(byte,short,int,Long),小数(float,double),布尔型(boolean),字符(char),字符串(String),null。 -整数表现形式:二进制 0,1                           八进制 0~7,用0开头表示                          十进制 0~9                          十六进制 0~9,A~F,用0x开头表示-进制换算  -计数方式:8 bit(二进制位)=1 byte(最小数据单位)。  -声明:八进制数,二进制中3个二进制位为一个八进制位;              十六进制,二进制中4个二进制位为一个十六进制位。  -例子:二进制-->八进制:1011=1*2^3+1*2^2+1*2^1+1*2^0                       010-101-110 = 0256                        2   5   6             二进制-->十六进制:-1010-1111 = 0xAF                               10   15             十进制-->二进制:除2运算,6/2=3余0,                                   3/2=1余1,从下往上                                   1/2=0余1,6的二进制数为110.  -负数的进制:最高位是1;该负数的绝对值的二进制取反+1;     -举例:-6      6的二进制0000-0110(int类型8位)                       取反1111-1001                      +1  1111-1010(逢2进1)-变量(未知数x)  -定义:存放在某区域中的数据在同一类型范围内不断变化(可以重复使用)。  -注意:变量有效范围{};初始化值。  -格式:数据类型 变量名 = 初始化值。  -基本数据类型:整数(byte,short,int,Long),小数(float,double),布尔型(boolean),字符(char)。  -引用类型:类(class),接口(interface),数组(array)  -ps:整数默认,int;小数默认:double。  -大小位:o=8 bit;  byte~o;short,char~oo;int,float~oooo;long,double~oooooooo.  -类型转换     -自动转换:低位-->高位,无风险。byte,short,char自动转成int类型。     -强制转换:高位-->低位,精度可能损失,有风险。
   b = (byte)(b+4);//默认int类型,强转。   System.out.println(b);    
-int与byte区别
   int x1 = Integer.MAX_VALUE;   int x2 = 2;   x = x1 + x2;   System.out.println(x);//默认int类型,结果超出32位,只保留32位,高位被舍弃,最高位变为1,x=-2^32+1
   byte b =3;//默认强转(int-->byte,判断3是否在byte之内满足强转)   b = 3 + 4;//b=7   byte b1 = 3;   byte b2 = 4;   b = b1 + b2;//分析过程/*b1,b2是变量,如果b1=127,b的最高位超出报错。*/

5.运算符

-算术运算符:+,-,*,/,%,++,--,+连接符  -/:取整(6200/1000=6)  -%:取余,模运算(5%2=1;若x<y则x%=x;涉及负数只参考被模数,5%-2=1,-5%2=-1)  -a++/a--:只要知道这个的原理,另外一个--a/++a正常运算正常赋值就可以了  -举例说明:  `int a=1;   int b =a++;//a在前面,所以把a的值赋给b,b=1;然后a进行运算即a=a+1=2;  -容易混淆的:  `int i =1;             //int temp = i;   i = i++;              //i = i+1;   System.out.println(i);//i=temp相当于临时变量i=1`   /*分析:首先i=1刚开始是放到a区域的,然后把第二行的i=先暂时放到b区域,接着进行运算i++知道i=2这时把a区域的1给盖掉了,此时b区域的i=1来凑热闹把a区域的2给盖掉了,最终i=1*/-赋值运算符:= += —= *= /= %=-面试题
short s = 3;//= 是赋值运算符s += 3;// += 也是赋值运算符,一次运算(+=自动转换过程)/*s = s + 3; 两次运算,不作自动转换,取2^16 -1时报错*/s =  (short)(s+3)//可行
-比较运算符:== != > < >= <= instanceof     -结果必须是boolean类型,true或false。-逻辑运算符:& | ^ ! && ||(短路)    -用于连接两个boolean类型的表达式。    -&: 一个false,结果false;全true,结果true(唯一)。    -|:一个true,结果true;全false,结果false(唯一)。    -^:一个true,结果true;两边相同,结果false。(小区别)    **-面试题**:    &与|:无论左边运算结果是啥,右边都要参与运算。    &&:左边为false,右边跳过。    ||:左边为true,右边跳过。-位运算符:<< >> >>> & | ^ ~(二进制计算)    -& | ^:思想与逻辑运算符相同,举例:    这里是int类型32位,为方便只写相应后三位。    6&3-->110   6|3-->110   6^3-->110        & 011       | 011       ^ 011        -----       -----       -----      2<--010     7<--111     5<--101                                ^ 011                                -----                                  110-->6    **注意**  一个数^同一个数两次结果还是这个数。    -~(取反):正数原码、反码、补码都一样;负数原码是该数绝对值对应的二进制数且最高位+1;反码是除最高位为1外,其余取反;补码就是反码+1。    **注意**    取反和反码不一样,取反的过程是:原码-->反码-->补码-->取反    (实际运用极少,仅作了解)    -<<(左移):3<<x <=> 3*2^x(空位0补,不论正负)     3<<2  00|000000000000000000000000000011           000000000000000000000000000011|00-->12    ->>(右移):6>>y <=> 6/2^y(取整)(空位根据最高位是啥补啥)     6>>1  0000000000000000000000000000011|0           0|0000000000000000000000000000011-->3    ->>>(无符号右移):空位0补,不论正负。    **面试题**    1.最高效的2*8;(2<<3)    2.对两个整数变量进行交换    面试要求                                             
    int a = 5;                           ** int temp;    int b = 3;                              temp = a;    a = a ^ b;//a=3^5                       a = b;    b = a ^ b;//b=(3^5)^3=5                 b = temp;**    a = a ^ b;//a=(3^5)^5=3    System.out.println("a="+a+",b="+b);
-三元运算符:(条件表达式)?表达式1:表达式2;            true---->执行表达式1            false---------->执行表达式2举例:获取三个整数中较大的一个数
int a,b,c,temp,max;temp = a>b?a:b;max = temp>c?temp:c;System.out.println(max);

6.程序流程控制

-顺序结构-判断结构               -if语句        1.if(布尔表达式)            {}        2.if(布尔表达式){            }else{}        ps:三元运算符为其简写格式(当其运算后有一具体的结果可以用该简写格式)        3.if(布尔表达式 1){              }else if(布尔表达式 2){             }else if(布尔表达式 3){             }else { }           **注意**        一条语句可省略大括号,但不建议省略。        if语句一定只执行其中满足条件的一条语句(而不是多条)。        局部代码块:定义局部变量的生命周期(回到变量:作用域,初始值,大括号)-选择结构    -switch语句(byte、short、int 或者 char)    (功能性差,书写麻烦,不常用)     switch(expression){            case value :               //语句               break; //可选           case value :               //语句               break; //可选          //你可以有任意数量的case语句           default : //可选           //语句        }//先读有效结果,最后才是default    **注意**    if:对具体的值判断;        对区间判断;        对运算结果是boolean类型的表达式判断;    switch:对具体的值判断;            值的个数通常是固定的;            对于几个固定的值判断,建议switch,它会把具体的答案     都加载进内存,效率较高。 -循环结构    -while语句(先判断后执行)        while( 布尔表达式 ) {          //循环内容        }    -do……while语句(先执行后判断,至少执行一次)        do {           //代码语句        }while(布尔表达式);    **累加算法思想**
/*练习:获取1~10的和值(累加算法)        1+0          1+2          2+3           2+3+4            2+3+4+5                ...  思路:每次参与加法数值不确定;       每次出现和值不确定;                 和值递增;       加法多次重复运算,且都是和值+下一个数。步骤:定义一个变量1,用于记录参与加法的数值;     定义一个变量2,用于记录和值;     对变量1进行自增 ;     加法运算时重复的。   */      int a = 1;//变量1        int sum = 0;//变量2        for (a = 1; a < 11; a++) {            sum = sum + a;        }        System.out.println(sum);
    **计数器思想**
/*需求:1~100中6的倍数出现的次数(计数器思想)  思路:由于从1开始增加,不断循环至100;       1~100中出现某数等于6的倍数时,记录该数,并计数一次。  步骤:定义一个变量,用于自增;       定义一个变量,用于计数;       设置条件能否被6整除(取模),可用if语句       多次循环可用循环结构;            */        int a = 0;        int count = 0;        for (int i = 1; i <= 100; i++) {            if (i%6==0) {                count++;            }        }        System.out.println(count);
    -for语句        for(初始化; 布尔表达式; 更新) {               1      2     4                //代码语句                     3         }     *无限循环最简单的形式*
    while(true){}    for(;;){}
    *强调内容*    一个条件一次判断-->if语句    一个条件多次判断-->循环结构:循环次数未知-->while和do...while;                               循环次数已知-->for    *while,do...while和for的说明*    同:可以互换。    异:变量的作用域不同。    -foreach语句(数组)        for(声明语句 : 表达式)        {           //代码句子        }  **记一下break和continue** break:break 主要用在循环语句或者 switch 语句中,用来跳出**整个**语句块。break 跳出最里层的循环,并且继续执行该循环下面的语句。continue:continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。在 for 循环中,continue 语句使程序立即跳转到更新语句。在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。