Java 基础语法

在控制台输出 Hello World!经典小程序.

   

Java关键字

Java标识符

所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始

首字符之后可以是字母(A-Z或者a-z),美元符($)、下划线(_)或数字的任何字符组合

程序注释

单行注释,格式: //注释文字

多行注释,格式: /* 注释文字 */

文档注释,格式:/** 注释文字 */ 文档注释用于javadoc工具生成帮助信息

不同进制的数据表现

二进制,由0b开头

八进制,由0开头, 注意就是0123的0,不是字母o

十六进制,由0x开头

   

有符号数据表示法

在计算机内,有符号数有三种表示法,原码,反码和补码。所有的数据运算都是采用补码进行的。

   

原码,最高位为符号位,0表示正,1表示负。其余位表示数值的大小。

反码,正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

补码,证书的补码与其原码相同;负数的补码在其反码的末位加1.

   

用原码,反码,和补码来分别表示+7, 和-7.

   

原码:

+7

0

0000111

-7

1

0000111

反码:

+7

0

0000111

-7

1

1111000

补码:

-7

0

0000111

+7

1

1111001

   

数据类型

变量(variable)占据一定的内存空间。不同类型的变量占据不同的大小。Java中的变量类型如下:

数据类型

字节数

数值举例

类型名称

byte     

1byte          

3  

字节

int      

4bytes      

3

整数

short    

2bytes      

3

短整数

long     

8bytes      

3L

长整数

float    

4bytes    

1.2f

单精度浮点数

double   

8bytes    

1.2d

双精度浮点数

char     

2bytes    

'a' 

字符

boolean  

1bit     

true     

布尔值

Java语言采用的是Unicode编码。

Java语言中的字符char可以存储一个中文汉字,因为Java中字符占用两个字符。

   

在定义Long或者Float类型变量的时候,要加L或者F。

   

整数数值默认是int类型,浮点数数值默认是double类型。在定义byte,short类型是,他们接受的其实是一个int类型的值,编译器做了一个数据范围检测,如果不在他们的范围内,就报错。

   

注意,未初始化的或者未赋值的变量不能再程序中被使用。

   

数据类型转换

boolean类型不参与转换。

默认转换, byte,short, char -> int -> long -> float -> double

long占用8个字节,float占用4个字节,但float表示的范围比long还要大。

注, 虽然float数据的表示范围大,但其数值越大,损失的精度越大,这与其存储数据的结构有关,具体可 以参考IEEE745 标准。

   

Float精度测试程序,当其数值大于一定程序,其精度可能大于1.

   

byte, short, char之间不相互转换,直接转换成int类型参与运算。

问题1,下图中b1 +b2的运算的结果是什么类型?。

答案是int类型.

   

问题2, 130在byte数据类型中表示为多少?

 

需要分析其补码和原码

  

符号位

  

130的补码(和原码相同)

0

10000010

截取后变为了负数(补码)

1

000 0010

反码

1

000 0001

原码

1

111 1110

其结果为 - 126

   

问题3,看下图中的程序,写出其打印的结果,

考察的知识点为:

1, 数据从左向右计算,数据类型也是从左向右开始转换。

2, 字符串和其他数据做+,结果是字符串类型。

3, 单引号为char类型,其结果为数值。

   

算数运算符

整数相除只能得到整数。

如果想得到浮点数,可以把操作中的任一数据变为浮点数。

   

赋值运算符 =

拓展赋值运算符 +=, -=, *=, /=, %=

注意,拓展运算符内隐含着一个强制转换。

下图中s = s + 1; 会报错是因为1默认为int类型。未添加强制转换会报类型错误。

   

位运算符

<< 和>> 都属于带符号移位,移位时正负数不变。

例如 -9>> 10, 其结果为-1.

<<

空位补0,被移除的高位丢弃。

>>

被移位的二进制最高位是0,右移后,空缺位补0;

最高位是1,最高位补1。

>>>

被移位二进制最高位无论是0或者是1,空缺位都用0补。

&

任何二进制位和0进行&运算,结果是0;

和1进行&运算结果是原值。

|

任何二进制位和0进行 | 运算,结果是原值;

和1进行 | 运算结果是1。

^

任何相同二进制位进行 ^ 运算,结果是0;

不相同二进制位 ^ 运算结果是1。

   

取反运算符(反码)

~3 的结果为-4。 用补码计算其过程。

   

异或的特点,

某一个数据被另一个数据亦或两次,其数值不变。

   

利用这个特性可以实现不用第三个变量,即可实现两个数据的交换。

   

   

移位运算符, 注意移位有可能会导致数据溢出

左移的特点是空位补0,最高位丢弃。

右移的特点是,如果最高位是0,右移后,空缺位补0.如果最高位是1,最高位补1.

既正数右移后永远为正数,负数右移后永远是负数。

   

无符号右移,无论最高位是0还是1,左边补齐0. 但下图实验过程中补得还是1,没看懂。

   

条件运算符(?:)

条件运算符也被称为三元运算符。三目运算符 格式, 比较表达式? 表达式1:表达式2;

   

   

   

while 循环

while是最基本的循环,它的结构为:

   

while( 布尔表达式 ) {

//循环内容

}

   

do…while 循环

对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。

do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。

do {
//代码语句
}while(布尔表达式);

   

for循环

虽然所有循环结构都可以用 while 或者 do...while表示,但 Java 提供了另一种语句 —— for 循环,使一些循环结构变得更加简单。

for循环执行的次数是在执行前就确定的。语法格式如下:

for(初始化; 布尔表达式; 更新) { //代码语句 }

   

关于 for 循环有以下几点说明:

   

最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。

然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。

执行一次循环后,更新循环控制变量。

再次检测布尔表达式。循环执行上面的过程。

   

break 关键字

break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。

break 跳出最里层的循环,并且继续执行该循环下面的语句。

   

continue 关键字

continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。

在 for 循环中,continue 语句使程序立即跳转到更新语句。

在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。

break和continue通过添加标签可以用于多层循环中

   

if 语句

一个 if 语句包含一个布尔表达式和一条或多条语句。

if 语句的用语法如下:

if(布尔表达式)

{

//如果布尔表达式为true将执行的语句

}

   

   

switch 语句

switch 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

switch 语法格式如下:

当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。

switch 语句可以包含一个 default 分支,该分支必须是 switch 语句的最后一个分支。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。

   

实现从键盘录入数据的方法

导包(位置放到class定义的上面)

import java.util.Scanner;

创建对象

Scanner sc = new Scanner(System.in);

接收数据

int x = sc.nextInt();

   

方法(函数)

定义

修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {

函数体;

return 返回值;

}

   

方法重载

在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同即可。

   

数组

数组的两种定义方法

   

两种赋初值的方式

   

Java中的参数传递,数组名传递的是引用,子函数可以直接对其修改。

同理,如果把一个数组名字赋值给另一个数组,则两个数组指向同一地址。

   

利用数组的属性length可以获得数组的长度。

三种二维数组定义的方法。 在Java中,二维数组中每个一维数组的长度可以是不同值。

1, 在定义时直接给出m和n的大小。

2, 可以利用赋初值的方式让Java计算出大小。

3,可以先指定m的大小,在程序中再指定每个一维数组的大小。

   

整数和数组参数传递问题

整数传递的是形参,子函数对其形参的修改不会影响原有的数值。

数组传递的相当于值引用,子函数对引用的修改会直接修改原数值。

   

数组练习题,讲一个小于8位的整数类型倒序。

例如,int number = 123456, 倒数后输出654321。

   

   

   

   

   

猜你喜欢

转载自www.cnblogs.com/pecar/p/8964335.html