二、基本语法

关键字,标识符,变量,基本数据类型,基本数据类型转换,运算符,程序流程控制,数组

---------------------------------------------------------------------------------

  • 关键字

    定义?什么要求?

        用做专门用途的字符串,不能被用来命名

    特点

*        所有字母都为小写

        class interface int true null if abstract new pakage 等...

    保留关键字,以后可能用作关键字使用,避免自己命名使用

        byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const

  

*    String类型不是关键字,是一个引用类

  • 标识符

    Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符

    自己可以起名字的地方都叫标识符

    

    标识符规则:

        _或 $ (只有两个符号) 由26个英文字母大小写,0-9 组成。

        数字不可以开头。

        不可以使用关键字和保留字,但能包含关键字和保留字。

        Java中严格区分大小写,长度无限制。

        标识符不能包含空格。

    

*    可以是关键字大写来作为标识符,不建议这样写

    

  •     命名规范:

        包名:多单词组成时所有字母都小写:xxxyyyzzz

        类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz

        变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz

        常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ

        

---------------------------------------------------------------------------------

  • 变量

    变量的作用域:一对{ }之间有效

    该区域有自己的名称(变量名)和类型(数据类型)

    Java中每个变量必须先声明,后使用

基本数据类型:

    数值型:

        整型 byte short int long

                     1     2    4   8       字节   1字节=8bit -128~127

        浮点型 float double

                        4        8   字节   

        5.12       512.0f        .512   (必须有小数点)

        科学计数法形式也可以 5.12e2      512E2     100E-2

        int为默认整型  double为默认浮点型

        声明long须在数据后加L或l float在后加f或F

        

    字符型:char

        只能表示一个字符'a','9','中','\t' 一个转义字符,中文字符都可以

        "中国" "ab"表示 字符串  "//" 表示 \

        直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a 表示 \n。

        char类型是可以进行运算的。因为它都对应有Unicode码。

        ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。

    这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

        ASCII码不能表示所有字符。

        Unicode:一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,使用 Unicode 没有乱码的问题。

        Unicode 的缺点:Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储

        UTF-8 是在互联网上使用最广的一种 Unicode 的实现方式。

        UTF-8 是一种变长的编码方式。它可以使用 1-6 个字节表示一个符号,根据不同的符号而变化字节长度

    

    布尔型:boolean

    boolean类型数据只允许取值true和false,无null。

    不可以0或非 0 的整数替代false和true,这点和C语言不同。

    变量之间的运算(不考虑boolean)

        自动类型转换 (运算或赋值时)

            容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:

        char->int

        byte->int

        short->int->long->float->double

            byte a1=1;         byte a1=1;

            short a2=128;       byte a2=2;

            short a3;             byte a4;

            a3=a1+a2;              a4=a1+a2;

      如果a3声明为short,a4声明为byte会报错,自动换成了int运

    *    注意:

    *        有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算

    *        byte,short,char互相之间不会相互转换,他们三者(即使两者类型相同)在计算时首先转换为int类型。

    *        当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型

        

        强制类型转换

            强制运算符(int)short

            但可能造成精度降低或溢出,格外要注意。

    *    溢出后是按保存在计算机的二进制损失高位

        

        通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。

        只要基本数据类型与String做运算都回转成字符串显示,

        

        boolean类型不可以转换为其它的数据类型

    

    进制

        对于整数,有四种表示方式:

            二进制:0,1 ,满2进1.以0b或0B开头。

            十进制:0-9 ,满10进1.

            八进制:0-7 ,满8进1. 以数字0开头表示。

            十六进制:0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。

                如:0x21AF +1= 0X21B0

    原码、反码、补码

        所有数字在计算机底层都以二进制形式存在。

        计算机以补码的形式保存所有的整数。

    正数的原码、反码、补码都相同

    负数:

        原码:直接将一个数值换成二进制数。最高位是符号位1表示负数

        反码:是对原码按位取反,只是最高位(符号位)确定为1。    

        补码:负数的补码是其反码加1。

        Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位;当是long类型时,二进制默认占64位,第64位是符号位

    确定负数(例如指定11110001是byte类型,可以确定是负数)

        怎么由补码得到原码---补码-1得到反码,取反得到原码

    

    -100的补码减-1可以得到-101的补码

        

    

    引用数据类型:

        类 class   包含String字符串类型

        接口 interface

        数组 []

        

---------------------------------------------------------------------------------    

    运算符

        算术运算符

        赋值运算符

        比较运算符(关系运算符)

        逻辑运算符

        位运算符

        三元运算符

    算术运算符

        +-* / % ++ -- 字符串相加+

        除:如果是有double类型运算,都转为double,可以得到正确的计算结果

        (double)12/5     2.4

        (double)(12/5)   2.0

        取余,取模:结果的符号取决于被模数,前边的那个

        

        前++ --  后++ --  前:是先自增1再做运算  后:是先做运算,再自增1

        int i =10

        int j=i++  i=11 j=10

        int j=++i  

    

    赋值运算符

        = += -+ *=... 不会改变变量的数据类型

        short s=3;

        s+=1与s=s+1有什么区别?

        前面不用进行类型转换得到的s仍然是short,后面会报错运算后是int类型需要进行强转

        int s=3;

        s*=0.1;  输出结果为0 *运算为0.3 ,为int型为0  

        

        =赋值符号,支持连续赋值 区分好==和=的区别特别是if()判断语句里

        

    比较运算符(关系运算符)    

        == != < <= instanceof检查是否是类的对象

        比较后的结果都是boolean类型

    逻辑运算符

        逻辑与& 或| ! 逻辑异或^   

        短路&& ||  

        &同真为真  

        短路是当左边条件不满足时,右端不会运行 即使右端运算符优先级高于&&或||

        

    位运算符

        是直接对二进制进行运算

        <<左移  >>右移  >>>无符号右移 &与运算 |或运算  ^异或运算 ~取反

        

        左移二进制码向左移,左边多的截取掉,低位补0。 (正数如果没超过位数,没有符号位即高位默认是0不变成1)相当于移几位,在十进制基础上*几个2

        右移                右边截取掉,高位符号位是什么就补什么

        无符号右移 高位都补0

        

        与或运算,两个二进制码有由0,1组成  想象成0是false,1是true,来进行对位的取值得到二进制码

        异或,只有两个是不一样码的时候取1

        

    互换两个变量的值

        方法1:定义一个中间变量temp

        2:两个作和  m,n较大时,可能出现精度损失

        3:取异或  例m=m^n; n=m^n; m=m^n  因为(m^n)^n=m (m^n)^m=n

        

    三元运算符

        (条件表达式)?表达式1:表达式2   条件成立true结果为1反之

        表达式可以都是字符串类型

        两个表达式为同种类型,必须会返回一个结果,可以嵌套

        String str=(i>j)? "i大":(i==j)?"相等":"j大"

        先计算条件,然后只运行满足条件的表达式

        

        

        运算顺序由运算符优先级和结合性

            结合性:确定一个运算符的操作数(表达式)是什么 赋值,三元,单目是右边向左边运算,指右边向左边结合

                例如:(i>j)? "i大":(i==j)?"相等":"j大"

                由结合性 上面不能是(i>j)? "i大":(i==j)先左   ?"相等":"j大" 后右 结合

                    而是(i>j)? "i大":[(i==j)?"相等":"j大"] 按右向左这样的顺序(结合性)来选择操作数

                    再比如 b=c+d 是c+d赋值给b 而不是b赋值给c再+double

                结合性帮助我们选择操作数来添加( )运算顺序,操作数再根据优先级计算

            优先级是指相邻的两个运算符的运算顺序

            优先的高的按照结合性选择操作数,组成一个表达式然后先计算

            

            


程序流程控制

    顺序结构

    分支结构

        if…else switch

        

    if…else

        程序判断由上向下执行,有包含关系范围小的写在范围大的前边

        if语句的{}省略,只能是一行代码 一个;结尾

        

    switch(){            *  括号里边的值是变量或者值 处理数据score/60 case判断更简洁  数据类型可以是char byte short int 枚举 String(jdk1.7后可以用)

        case 常量1:        *case这里是常量,不能是取值范围;  多个case处理块语句一致的话,前边可以不写  什么时候不一样可以再写语句或一样再省略

            语句1:               语句可以有多条执行

            break;            *有的话跳出switch语句,没有break如果已经进入一个case还会继续往下执行,不管case符不符合值,直到有break或执行完语句

            case 常量2:

            语句2:

            break;

        default:            *default位置不固定,可以在任意位置,可以没有,始终是先匹配case,case没有再走default

            语句;

            break;

            ...

    }

    

    循环结构

        while, do while, for, foreach

        

        循环语句的四个组成部分

            初始化部分

            循环条件部分

            循环体部分

            迭代部分

        

            while:                      do while:

                初始化语句;            初始化语句块;

                while(循环条件){        do{

                循环体;                循环体

                迭代部分;                }迭代部分

                }                        while(循环条件);

            

        *    do while至少执行一次循环体,再判断是否满足循环条件

        

            for(int i=0;i<3;i++){

                System.out.println("请输入第"+(i+1)+"个数字:"); 1,2,3

            }

            

        *   注意变量的范围,在for循环里定义的,for循环执行完会被释放掉

        

        *        怎么在for循环里定义变量名自增1如num1 num2 num3

                只能是定义一个数组,循环得到的值存入数组中

            

            或者

            Map<String,Integer> numMap=new HashMap<String,Integer>();

            for(int i=0;i<50;i++){

                System.out.println("::::num_"+i);

                numMap.put("num_"+i,new Integer(i));

                System.out.println(numMap.get("num_"+i));

            }

            将循环的变量名和值存入Map集合,再取出来

        

        举例: 一般情况不这样做,一般利用数组,节约内存

            Scanner sc=new Scanner(System.in);

            Map<String,Integer> numMap=new HashMap<String,Integer>();

            for(int i=0;i<3;i++){

                System.out.println("输入");

                numMap.put("num_"+(i+1),new Integer(sc.next()));

                

            }

            for(int i=0;i<3;i++){

                System.out.println(numMap.get("num_"+(i+1)));

            }

            

            

            冒泡排序,数组排序!!!多练,想

            取个十百位上的数,利用/ 或求余

        *    最简单无限循环格式while(true){}, for(;;) ;用在想要一直循环程序,或特定条件跳出循环,

        使用if判断后 break;就会跳出当前循环。 注意是跳出循环

            

        *break:

            跳出当前循环,或再Switch-case中跳出switch

***            嵌套循环时,如果在内层就是跳出内层循环,进行外层循环的下一次判断,在外层就不执行外层循环了跳出整个循环语句

        

        continue:

***            使用在循环中,表示结束当次循环,结束当前判断的循环条件这一次循环,直接进行下一次判断,continue后边的语句不会被执行。

        

        label:label标签 , label写在想要标记for循环的前面 label:for( ; ;...){}

            然后在想要break或continue的地方写 break/continue lable; 就会跳出label指定的当前/当次for循环。

        

        return:

            一个是结束方法的执行 :一旦调用return,方法直接结束执行

            一个是返回方法的指定类型的指

        

        嵌套循环

        

        *    long end=System.currentTimeMills()输出系统当前时间毫秒为单位,规定了一个时间开始1970年

        System.out.println(end-start)  就可以得出程序运行的时间

        

------------------------------------------------------------------------------------    

    习题练习:

        闰年:能被4整除不能被100整除或被400整除 2月29 天

        质数又称素数:指一个大于1的自然数,除1和本身外不能被其他自然数整除,否则称合数

            有个检测的界限为根号i,因为一个数i=m*n  m越大,n越小,当m=n时为中间值,所以判断根号i之前的数能不能被整除就可以

        @Test

            public void test3(){

    //            boolean flag=true;

                long start=System.currentTimeMillis();

                System.out.println(start);

            l:    for(int i=2;i<=1000;i++){

                    for(int j=2;j<Math.sqrt(i);j++){

                        if(i%j==0){

    //                        flag=false;

    //                        break;

                            continue l;

                        }

                    }

    //                if(flag==true)

                    System.out.println(i);

    //                flag=true;

                }

            }

                

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值