Java学习笔记——第三章 基础语法

第三章 语法基础

3.1 类型、变量与运算符

3.1.1 类型

Java可区分为基本类型(Primitive Type)类类型(Class Type) 两大类型系统,其中,类类型也称为参考类型(Reference Type)
基本类型主要有:
. 整数:可分为short整数(占2字节,-32768 -- 32767)、int整数(占4字节,-2147483648 -- 2147483647)和long整数(占8字节,-9223372036854775808 -- 9223372036854775807);
. 字节:byte,占一字节,需要逐字节处理数据时使用,表示-128~127的整数。
. 浮点数:主要用来存储小数数值,分为float浮点数(占4字节,-126127)和double(占8字节,-10221023);
. 字符:char主要用来存储字符符号,例如'A','孙'等,JDK 8中Java字符采用Unicode 6.2.0编码,JVM中采用UTF-16 big EndIan,每个字符占2字节,汉字与英文字符都是采用双字节存储。char可表示的Unicode范围0 -- ffff;
. 布尔:boolean代表true和false;
常用的格式控制符号:
System.out.println("%d",args) 其中,
    %%表示%;
    %d表示以十进制整数格式输出;
    %f表示以十进制浮点数格式输出;
    %o表示以八进制整数格式输出;
    %x表示以十六进制整数格式输出;
    %s表示以字符串格式输出;
    %c表示以字符符号输出;
    %b表示输出Boolean值,结果为true或false;
    %h使用Integer.toHexString(arg.hash.Code())得到输出结果,如果args为null,则输出null;
    %n表示输出换行符号。
注:可以在输出浮点型时指定精度和预留的字符宽度。例:
System.out.println("%6.2f",19.234) 预留了6个字符宽度,不足的部分要由空格符补上,输出结果为 19.23。(保留两位小数,19.23只占5个字符,在前面补一个空格)。

3.1.2 变量

1、基本规则

. 变量不可以以数字开头,不可以使用特殊字符,不可以Java的关键词(Keyword)同名,不可以和Java保留字(Reversed word)同名,例如*、&、int、float、goto等都不可以;
. 通常以小写字母开始,并且在每个单字开始时第一个字母使用大写,即驼峰式命名法,例ageOfStudent;
. 方法内部声明的变量称为局部变量,会为变量配置内存空间,但不会给默认值(原来可能有无法预期的值),同时,不可以声明的局部变量未初始化前不可以被引用;
. 在声明的变量前加上final限定,则此变量的值不可被修改!

2、字面常量
int num1 = 12;//十进制表示
int num2 = 0xc;//十六进制表示,以0x开头
int num3 = 014;//八进制表示,以0开头

浮点数除了可以用小数方式直接表示外,还可以使用科学记号表示。例如:

double num4 = 0.0012;
double num5 = 1.2e-3;

表示字符必须使用“ ' ”符号括住字符(注意命名习惯!)。例如:

char s1 = 's';
char lastName = '孙';

转义字符:
char symbol = '\'';此条命令表示“ ' ”,此处必须使用忽略符号“ \ ”。
常用忽略符号如下:

\\  ————反斜杠\    
\'  ————单引号      
\"  ————双引号       
\b  ————倒退一个字符   
\f  ————换页    
\n  ————换行     
\r  ————光标移至行首  
3、数字常量表示法

撰写整数或浮点数常量时可以使用下划线更清楚表示某些数字。例如:

int number1 = 1234_5678;
double number2 = 3.141_592_653;

二进制方式表示某个数可以使用0b开头。例如:

int mask = 0b101010101010;//用二进制表示十进制整数2370
int mask1 = 0b1010_1010_1010;

3.1.3 运算符

1、算数运算

+,-,*,/,%

2、比较、条件运算

比较运算符:>,>=,<,<=,==,!=,true,false(后两个为Boolean类型比较)

System.out.printf("10 != 5 结果 %b%n",10 != 5);//true 
System.out.printf("10 >= 5 结果 %b%n",10 >= 5);//true
System.out.printf("10 == 5 结果 %b%n",10 == 5);//false

注:对于类类型声明的参考名称来说,两个参考名称使用==比较时,是比较两个名称是否参考至同一对象!

条件运算符:条件式?成立返回值:失败返回值

int score = 99;
System.out.printf("该学生是否及格? %c%n", score >= 60 ? '是':'否'); 
3、逻辑运算

&&AND(且),||OR(或),NOT(非)
对于&&,只要左操作数为false,直接返回false,不会去操作右操作数;
对于||,只要左操作数为true,直接返回true,不用再去运算右操作数;

4、位运算

&(AND与),|(OR或),^(XOR异或),~(补码,按位取反),<<左移(左边移除去的位被丢弃右边补0),>>右移(右边一处去的位被丢弃,左边补上原来的位,即左边原来是0就补0,左边原来是1就补1),>>>(右移后最左边一定是补0)。
注:
1、位运算是逐位进行运算,其中补码运算是将所有位0变为1,1变为0。例如,00000001经补码运算就会变为11111110;但以下程序片段将显示-1,因为byte占一字节,number1储存的0在内存中是位00000000,经补码运算为11111111,用整数表示即为-1:

byte number1 = 0;
System.out.println(~number1);

2、左移相当于将原数值乘以2,右移相当于将原数值除以2,即:

System.out.println("%d",number << 1);//4
System.out.println("%d",number << 2);//8
System.out.println("%d",number << 3);//16
5、递增、递减运算

分为i++、++i、i--、--i等类型,其中将++或--运算符写在变量前,表示现将变量值加或减1,然后再返回变量值;将++或--运算符写在变量后,表示先返回变量值,再对变量加或减1。例如:

int i = 0;
int j = 1;
System.out.println(i++);//0,先打印i的值再将i的值加1
System.out.println(i);//此时将上一条指令i加1之后的值输出,即为1
System.out.println(--j);//0,先将j的值减一再打印j的值
6、指定运算

(引自:http://book.51cto.com/art/200807/83056.htm)

3.1.4类型转换

精度转换(注:写下一个浮点数,编译器自动默认为double类型)
方式一:在浮点数后面加上f:float f1 = 3.14f;
方式二:对数值进行强制转换:f2 = (float) 3.14;
通过以上两种方式可以通过编译。
程序中写下整数时默认使用不超过int类型的长度2147483647,倘若对int型(最大数值为2147483647)变量赋值为2147483648,会造成溢出。使用long c = 21_4748_3648L; 可以通过编译。
自动提升类型 表达式中包含不同类型,运算是以长度最长类型为主。

short e = 1, g = 2;   
short h = (short) (g + e);

运算整数时如果不大于int,则自动提升全部在int类型进行计算,int结果无法直接放入short,所以需要强转。
int最大2147483647 + 1会得到-2147483648,即会溢出。

3.2流程控制

3.2.1 if...else条件式

格式:

if(条件式){  
&nbsp;&nbsp;&nbsp;&nbsp;描述句;   
}else{  
&nbsp;&nbsp;&nbsp;&nbsp;描述句;  
}

3.2.2 switch语句

switch(变量或表达式) {    
    case 整数、字符、字符串或Enum:    
        描述句;  
        break;  
    case 整数、字符、字符串或Enum:    
        描述句;  
        break;  
    ....  
    default:  
        描述句;  
}

3.2.3 for循环

for(初始试; 执行结果必须是boolean的重复式; 重复式) {
    描述句;    
}

注:for循环圆括号中第二个复合描述区块若没有撰写,默认为true,for(;;){}表示无穷循环。

3.2.4 while循环

格式:

while(条件式){
    描述句;
}

其中,上述while循环被称为前测试循环,因为会在循环执行前就进行条件判断。相对于前测试循环,后测试循环是指先执行一些动作,再判断要不要重复,即do...while。语法格式为:

do {
    描述句;
}while(条件式);

注:while循环和do...while循环的一个格式区别在于后测试循环是以“ ;”结尾!

3.2.5 break、continue

break可以离开当前的switch、for、while、do...while的区块,并执行区块后下一个描述语句,其中在switch中主要用来中断下一个case比较,在for、while、do...while 中主要用来中断当前循环。
continue略过之后的描述语句,并回到循环去开头进行下一次循环,而不是离开循环!!
注:break和continue还可以配合标签使用!例如:本来break只会离开for循环,设定标签与区块,则可以离开整个区块。

back : {     
    for(int y = 1; y <= 10; y++) {         
        if(y == 9) {             
            System.out.println("break");            
            break back;         
        }     
    }      
    System.out.println("test"); 
    }

注解:上述程序执行结果只会显示break。back是个标签,当break back时,返回至back标签处,之后整个back区块不执行而跳过,所以System.out.println("test");不会执行。
但是,continue的标签只能设定在for之前:

 back1 : 
    for(int x = 0; x < 10; x++) {
        back2 : 
        for(int z = 0; z < 10; z++) {
            if (z == 9) {
                continue back2;
            }
        }
    System.out.println("test");
    } 

注解:continue back1时,System.out.println("test");语句不会被执行;
continue back2时,打印10次test。

posted on 2018-03-22 11:21  20169305孙德洋  阅读(250)  评论(3编辑  收藏  举报