Java语言的基础组成

一,关键字

定义:被java语言赋予了特殊含义的单词

特点:关键字中所有字母都为小写


二,标识符

· 在程序中所自定义的一些名称

· 由26个英文字母大小写,数字0-9 符号 _$ 组成

· 定义合法标识符规则

1. 数字不可以开头。

2. 不可以使用关键字

· 注意:在Java中严格区分大小写。并且在起名字时,为了提高阅读性,要尽量有意义。

· Java中的名称规范:

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

2. 类名和接口名:多单词组成时,所有单词的首字母都大写

3. 变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词每个单词首字母大写

例:newStr

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


三,注释

· 用于注解说明解释程序的文字就是注释

· 好处:提高了代码的阅读性

· Java中的注释格式:

1. 单行注释

格式://注释文字

2. 多行注释

格式:/* 注释文字 */

3. 文档注释

格式:/** 注释文字 */

· 单行和多行注释,被注释的文字是不会被java的虚拟机JVM解释执行的

· 文档注释,是java特有的注释,其中注释内容可以被JDK提供的工具Javadoc所解析,生成一套以网页形式体现的该程序的说明文档

· 注释是一个程序员必须要具有的良好编程习惯

· 初学者编写程序可以养成习惯:先写注释再写代码,可以将自己的思路以注释的形式体现出来,毕竟代码就是思想的一种体现形式


四,常量与变量

· 常量

· 常量表示不能改变的数值,java中常量的分类:

1. 整数常量,所有整数

2. 小数常量,所有小数

3. 布尔型常量,true & false

4. 字符常量,将一个数字字母或者符号用单引号 '  '  标识

5. 字符串常量,将一个或者多个字符用双引号 " " 标识

6. null常量,只有一个数值:null


· 对于整数:java有4种表现形式

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

2. 八进制: 0-7 满8进1 用0开头

3. 十六进制: 0-9,A-F 满16进1 用0x开头

4. 二进制:0和1

a. 每个byte(字节)由8位二进制组成,所以一个字节的最大数就是二进制11111111(8个1),最大值255

b. 3位二进制代表一位八进制

c. 4位二进制代表一位十六进制


· 进制的基本转换

1. 十进制 二进制 互转

a. 十进制转成二进制 除以2取余数

例:6的二进制,6/2=3,没有余数,记0;3/2=1,余1;1不能再除以2了,再从小往上取,所以6的二进制数就是110。

b. 二进制转成十进制 乘以2的幂数

例:二进制的110转成十进制,右边开始数,也就是第一位是0,第二位和第三位数是1。算法:0*2的0次方+1*2的1次方+1*2的2次方。结果为0+2+4=6

所以:以此推出的二进制转换十进制的一个规律:第1位乘的数是1,第2位乘的数是2,第3位是4,第4位是8........而当二进制位是0的时候则不用进行计算。这是一个心算的方法。在八进制、十六进制的转换中尤为好用。

2. 十进制 十六进制 互转

先把十进制转换成二进制。再将二进制的每4当作1个单位来进行运算。

例:90的二进制是1011010,4位分开看就是0101-1010,0101就是十进制的5,1010就是十进制里面的10。但是十六进制没有10,所以转换成十六进制就是A。记90=0x5A

3. 十进制 八进制 互转

同理十六进制的互转,可以将十进制转换成二进制后,没3位二进制看作1位八进制。

4. 负数的二进制表现形式

对应的整数二进制取反+1。

例:整数6,int类型在内存中占4个字节。所以真正的表现形式是 00000000-00000000-00000000-00000110,取反+1就是-6的表现形式:11111111-11111111-11111111-11111111-11111010

所以:负数的二进制最高位都是1

· 变量

· 变量的概念:

1. 内存中一个存储区域:

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

3. 该区域的数据可以在同一类型范围内不断变化

· 为什么要定义变量

用来不断的存放同一类型的常量,并可以重复使用

· 使用变量注意:

1. 变量的作用范围(一对{}中有效)

2. 初始化值

· 定义变量的格式:

数据类型 变量名 = 初始化值。

注意:格式是固定的。

· 理解:变量就如同数字中的未知数

· 数据类型

Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间

byte,1个字节,取值范围:-128~127

short,2个字节,取值范围:-2的15次方~2的15次方-1

int,4个字节,取值范围:-2的31次方~2的31次方-1,默认类型

long,8个字节,取值范围:-2的63次方 ~ 2的63次方-1;一般会用l标识

float,4个字节,单精度浮点类型,一般用f标识一下

double,8个字节,双精度浮点数

char,2个字节,用单引号标识


什么时候定义变量?

当数据不确定的时候,需要对数据进行存储时,就定义一个变量来完成存储的动作。

· 类型转换

· 自动类型转换:自动类型的提升

例:byte b = 3; int x = 4; x = x + b;//b会自动提升为int类型进行运算

· 强制类型转换:

例:byte b = 3; b = b + 4;//报错,整数4默认为int类型,b+4会自动提升为int类型。int类型的不能自动转换成byte类型

b = (byte)b + 4;//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b

· 类型转换的原理:

比如当byte类型遇到int类型,byte类型内存只占8bit,int类型占32bit,int的精度是大于byte类型的。所以byte可以自动转换成int类型,不会损失精度

而反之,int类型转换成byte类型时,由于高精度转换成低精度时可能会损失精度,所以java不会把你进行转换,如有需要,需自己做强转

· 什么用类型转换?

例1:运算的结果是小数,想保留整数部分的时候可以把小数强转成int类型

例2:System.out.println('a'+1); 输出结果是98,因为字符a在ASCII码表中,代表的数字是97。98在ASCII码表中代表的是b,当我们想让输出结果为'b'时,就需要做强制类型转换。System.out.println((char)(‘a'+1));


五,运算符

· 算数运算符的注意问题:

如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被摸数是负数就另当别论。

对于除号“/”,它的整数和小数除是有区别的:整数之间做除法时只保留整数部分而舍弃小数部分。例如:int x = 3510;x=x/1000*1000; x的结果是? 因为x的是int类型的,所以除以1000之后只保留整数部分,也就是3,再乘以1000.所以输出应该是x=3000

“+”除字符串相加功能外,还能把非字符串转换成字符串,例如:System.out.println(“5+5=”+5+5);//打印结果是? 字符串部分会是直接打印到控制台,后面的5+5会先计算结果后打印在控制台。所以打印结果是5+5=10;

· 自增和自减的注意问题

当++在前的时候,先算++。再算别的值;当++在后时,先算别的值,再算++

例:int a = 3,b; b = a++; System.out.println("a="+a+",b="+b); 的输出结果,就应该是a=4,b=3;因为b=a++这个函数中,++在后,所以先把a赋值给了b,a再进行自增运算。

· 赋值运算符

· 符号

= 、+= 、 -= 、 *= 、 /= 、%=

例:

int a,b,c; a=b=c=3;

int a=3;a+=5;等同运算a=a+5

· 思考:

short s = 3;

s = s + 2;
s += 2;
有什么区别?

s = s+2;会编译失败,因为s会被提升为int类型,运算后的结果还是int类型,无法被赋值给short类型

s += 2;//编译通过,因为+=运算符在给s赋值时,自动完成了强转操作。

· 比较运算符

比较运算符的结果都是boolean类型,也就是要么是true,要么是false

注意:比较运算符的 "==" 不能被误写成 "="


· 逻辑运算符

逻辑运算用于连接boolean类型的表达方式。在java中不可以写成3<x<6,应该写成x>3 & x<6

· ‘&’ 和 '&&'的区别:

a. 单&时,左边无论真假,右边都会进行运算

b. 双&时,如果左边为真,右边参与运算;如果左边为假,那么右边不参与运算

· ‘|’和'||'的区别同理,双或时,左边为真,右边不参与运算

· 异或(^) 与 或的不同之处是:当左右都为true时,结果为false


· 位运算符

位运算是直接对二进制运算。

<< :其实就是除以2的移动的位数次幂

>> : 其实就是乘以2的移动的位数次幂。最高位补什么由原来数据的最高位值而定。如果最高位为0,右移后用0补位。如果最高位为1,右移后用1补位。

>>> :无论最高位是什么,右移后都用0补位。

& :就是二进制的每位数进行与运算,例:6&3,就是二进制的110和二进制的011进行与运算,结算结果为010,就是2

| :与&运算同理。

^ :和&运算同理。一个数异或同一个数二次,结果还是那个数。

~ :反码,就是数字的二进制的0变成1,1变成0。

六,程序流程控制

· 判断结构

if语句:三种格式:
a. if(条件表达式) {
执行语句;
}

b. if(条件表达式) {

执行语句;

} else {

执行语句;

}

else匹配if有就近原则,当程序中出现多个if else时,else匹配距离最近的if

c. if(条件表达式) {

执行语句;

} else if(条件表达式) {

执行语句;

}  

........

else {

执行语句;

}

if语句的特点:

a. 每一种格式都是单条语句

b. 第二种格式与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以写在其他表达式中

c. 条件表达式无论写成什么样子,只看最终结构是否是true或者false

三元运算符:

if else结构的简写: 变量 = (表达式) ? 表达式1 : 表达式2;

好处:可以简化if else代码

弊端:因为是一个运算符,所以运算完必须有有一个结果

· 选择结构

switch语句:
格式:
switch(表达式){
case取值1:
执行语句;
break;

case取值2:
执行语句;
break;

.......

default:
执行语句;
break;
}
switch语句的特点:
a. switch语句选择类型只有4种:byte short int char
b. case之间与default没有顺序。先执行第一个case,没有匹配的case执行default
c. 结束switch语句有两种情况:遇到break和执行到switch结束
d. 如果匹配的case或者default没有对应的break,那么程序会接着往下执行,运行可以执行的语句,直到遇到break或者switch结束

· 循环结构

代表语句:while,do while,for
while语句格式:
while(条件表达式) {
执行语句;
}
do while语句格式:
do {
执行语句;
} while(条件表达式) ;
do while的特点是条件无论是否满足,循环体至少循环一次。

for(语句格式):
for(初始化表达式 循环条件表达式 循环后的操作表达式){

执行语句;

}

 注:

afor里面的个体表达试运行顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复这个过程,知道条件不满足为止。

bwhilefor可以互换。如果需要定义循环增量,用for更合适。

c,变量有自己的作用域。对于for来讲,如果将用于控制循环的增量定义在for语句中。那么该变量只在for语句内有效。

d,最简单无限循环:while(true)for(;;),无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。

 

总结:

什么时候使用循环结构?当对某些语句使用很多次时,就使用循环结构。

其他流程控制语句

break(跳出)continue(继续)

break语句:应用范围:选择结构和循环结构。

continue语句:应用于循环结构。

注:

a,这两个语句离开应用范围,存在时没有意义的。

b,这个两个语句单独存在下面都不可以有语句,因为执行不到。

ccontinue语句是结束本次循环继续下次循环。

d,标号的出现,可以让这个两个作用于指定的范围

for嵌套循环

for语句中还可以嵌套for语句进行输出,外面的for语句控制的是行数,内循环控制的是每一行的列数。
例:输出一个99乘法表
for(int x=1;x<=9;x++) {
   for(int y=1;y<=x;y++) {
      System.out.print(y+"*"+x+"="+y*x+"\t");
   }
   System.out.println();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值