Java入门
二.Java程序设计基础
1.标识符和关键字
1.1标识符概述
标识符分为两类,分别为关键字和用户自定义标识符。
- 关键字是有特殊含义的标识符,如 true、false 表示逻辑的真假。
- 用户自定义标识符是由用户按标识符构成规则生成的非保留字的标识符,如name就是一个标识符。
1.2标识符
Java 中标识符是为方法、变量或其他用户定义项所定义的名称。标识符可以有一个或多个字符。
(1)标识符定义规则如下:
- 由数字、字母、下划线(_)和美元符($)组成
- 不能以数字开头
- 不能是关键字
- 区分大小写
(2)常见命名约定:
①小驼峰命名法:方法,变量。
- 约定1:标识符是一个单词的时候,首字母小写。
- 例:name
- 约定2:标识符由多个单词组成的时候,第一个单词首字母小写,其他单词首字母大写。
- 例:firstName
②大坨峰命名法:类。
- 约定1:标识符是一个单词的时候,首字母大写。
- 例:Student
- 约定2:标识符由多个单词组成的时候,每个单词的首字母大写。
- 例:GoodStudent
1.3关键字概述
关键字(或者保留字)是对编译器有特殊意义的固定单词,不能在程序中做其他目的使用。关键字具有专门的意义和用途,和自定义的标识符不同,不能当作一般的标识符来使用。
1.4关键字特点:
- 关键字的字母全部小写
- 常用的代码编辑器,针对关键字有特殊的颜色标记,非常直观。
按其用途划分为如下几组:
(1)用于数据类型:boolean、byte、char、 double、 false、float、int、long、new、short、true、void、instanceof。
(2)用于语句:break、case、 catch、 continue、 default 、do、 else、 for、 if、return、switch、try、 while、 finally、 throw、this、 super。
(3)用于修饰:abstract、final、native、private、 protected、public、static、synchronized、transient、 volatile。
(4)用于方法、类、接口、包和异常:class、 extends、 implements、interface、 package、import、throws。
(5)保留字:true、false、null。
由于 Java 区分大小写,因此 public 是关键字,而 Public 则不是关键字。但是为了程序的清晰及可读性,要尽量避免使用关键字的其他形式来命名。
2.注释
2.1概述
- 注释是在程序指定位置添加的说明性信息。
- 注释不参与程序运行,仅起到说明作用。
2.2注释分类
- 单行注释:只能注释一行内容,用在注释信息内容少的地方。
格式: //注释信息
- 多行注释:能注释很多行的内容。为了可读性比较好,一般首行和尾行不写注释信息。
格式:/*注释信息*/
- 文档注释:能注释多行内容,一般用在类、方法和变量上面,用来描述其作用。注释后,鼠标放在类和变量上面会自动显示出我们注释的内容。
格式:/**注释信息*/
文档注释可以通过 Javadoc 命令把文档注释中的内容生成文档,并输出到 HTML 文件中,方便记录程序信息。还可以包含一个或多个 @ 标签,每个 @ 标签都在新的一行开始。
3.Java常量
3.1常量概述
常量:在程序运行过程中,其值不可以发生改变的量。
3.2常量分类
①整数常量
Java 的整型常量值主要有如下 3 种形式。
- 十进制数形式:59,32,-99,0。
- 八进制数形式:Java 中的八进制常数的表示以 0 开头,如 0125 表示十进制数 85。
- 十六进制数形式:Java 中的十六进制常数的表示以 0x 或 0X 开头,如 0x100 表示十进制数 256。
整型(int)常量默认在内存中占 32 位,是具有整数类型的值,当运算过程中所需值超过 32 位长度时,可以把它表示为长整型(long)数值。长整型类型则要在数字后面加 L 或 l, 如 697L,表示一个长整型数,它在内存中占 64 位。
②实型常量
Java 的实型常量值主要有如下两种形式。
- 十进制数形式:由数字和小数点组成,且必须有小数点,如 3.1415、-55.64。
- 科学计数法形式:如 1.75e5 或 32&E3,其中 e 或 E 之前必须有数字,且 e 或 E 之后的数字必须为整数。
Java 实型常量默认在内存中占 64 位,是具有双精度型(double)的值。如果考虑到需要节省运行时的系统资源,而运算时的数据值取值范围并不大且运算精度要求不太高的情况,可以把它表示为单精度型(float)的数值。
单精度型数值一般要在该常数后面加 F 或 f,如 69.7f,表示一个 float 型实数,它在内存中占 32 位。
③布尔常量
Java 的布尔型常量只有两个值,即 false(假)和 true(真)。
④字符常量和字符串常量
Java 的字符型常量值是用单引号引起来的一个字符,如 ‘e’、E’。注意,Java 字符串常量值中的单引号和双引号不可混用。双引号用来表示字符串,像 “11”、“d” 等都是表示单个字符的字符串。
⑤空常量:一个特殊的值,空值。null
4.数据类型
4.1计算机存储单元
我么知道计算机是可以用来存储数据的,但是无论是内存还是硬盘,计算机存储设备的最小信息单元叫“位(bit)”,又称之为“比特位”,通常用小写字母“b”表示。而计算机中最小的存储单元叫“字节(byte)”,通常用大写字母“B”表示,字节是由连续的8个位组成。
除了字节外还有一些常用的存储单位,如:
1B = 8bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
4.2数据类型
Java语言是强类型语言,对于每一种数据都给出了明确的数据类型,不同的数据类型也分配了不同的内存空间,所以它们表示的数据大小也是不一样的。
4.3内存占用和取值范围
5.Java变量
5.1变量概述
在程序运行过程中,其值可以发生改变的量。从本质上讲,变量是内存中一小块区域。
5.2变量定义
- 格式:数据类型 变量名 = 变量值;
- 例 int a = 10;
- 变量标识符的命名规范如下:
①首字符必须是字母、下划线、美元符号。
②标识符由数字、大写字母、小写字母、下划线、美元符号以及所有在十六进制前的ASCll码组成。
③不能把关键字、保留字作为标识符。
④标识符的长度没有限制。
⑤标识符区分大小写。
5.3变量的使用
取值和修改值
- 取值格式:变量名
- 例:a
- 修改值格式:变量名 = 变量值
- 例:a = 20;
5.4注意事项
①变量名不能重复。
②变量未赋值不能使用。
③long类型的变量定义的时候,为了防止整数过大,后面要加L。
④float类型的变量定义的时候,为了防止类型不兼容,后面要加F。
6.变量的作用域
6.1作用域概述
变量的作用域规定了变量所能使用的范围,只有在作用域范围内变量才能被使用。根据变量声明地点的不同,变量的作用域也不同。根据作用域的不同,一般将变量分为不同的类型:成员变量和局部变量。
6.2成员变量
Java的成员变量有两种,分别是全局变量和静态变量(类变量)。定义在方法体和语句块之外,不属于任何一个方法,作用域是整个类。
名称 | 修饰 | 访问 | 生命周期 |
---|---|---|---|
全局变量(实例变量) | 无static修饰 | 对象名.变量名 | 只要对象被当作引用,实例变量就将存在 |
静态变量(类变量) | 用static修饰 | 类名.变量名或对象名.变量名 | 其生命周期取决于类的生命周期。当类被垃圾回收机制彻底回收时才会被销毁 |
6.3局部变量
局部变量是指在方法或者方法代码块中定义的变量,其作用域是其所在的代码块。可分为以下三种:
- 方法参数变量(形参):在整个方法内有效。
- 方法局部变量(方法内定义): 从定义这个变量开始到方法结束这一段时间内有效。
- 代码块局部变量(代码块内定义):从定义这个变量开始到代码块结束这一段时间内有效。
7.类型转换
数据类型的转换是在所赋值的数值类型和被变量接收的数据类型不一致时发生的,它需要从一种数据类型转换成另一种数据类型。
7.1 类型转换分类
- 自动类型转换(隐式转换)
- 强制类型转换(显示转换)
7.2自动类型转换
如果以下 2 个条件都满足,那么将一种类型的数据赋给另外一种类型变量的时,将执行自动类型转换。
- 两种数据类型彼此兼容
- 目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)
当以上 2 个条件都满足时,拓宽转换发生。例如 byte 类型向 short 类型转换时,由于 short 类型的取值范围较大,会自动将 byte 转换为 short 类型。
在运算过程中,由于不同的数据类型会转换成同一种数据类型,所以整型、浮点型以及字符型都可以参与混合运算。自动转换的规则是从低级类型数据转换成高级类型数据。转换规则如下:
- 数值型数据的转换:byte、short→int→long→float→double。
- 字符型转换为整型:char→int。
程序执行结果如下:
从执行结果看出,short、float、int 和 double 三种数据类型参与运算,最后输出的结果为 double 类型的数据。
7.3强制类型转换
当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换。
程序执行结果如下:
在强制类型转换中,如果是将浮点类型的值转换为整数,直接去掉小数点后边的所有数字;而如果是整数类型强制转换为浮点类型时,将在小数点后面补零。
8.算数运算符
8.1运算符和表达式
- 运算符:对常量或者变量进行操作的符号。
- 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。
- 举例说明
int a = 10;
int b = 20;
int c = a + b;
+:是运算符,并且是算数运算符
a+b:是表达式,由于+是算数运算符,所以这个表达式叫算数表达式
8.2算数运算符
符号 | 作用 | 例子 |
---|---|---|
+ | 加 | a + b |
- | 减 | a - b |
* | 乘 | a * b |
/ | 除 | a/b |
% | 取余 | a % b |
注意事项:
/ 和%的区别:两个数据做除法,/ 取结果的商,%去结果的余数。整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。
8.2.1字符的“+”操作
算数表达式中包含多个基本数据类型的值的时候,整个算数表达式的类型会自动进行提升。提升规则:
- byte类型,short类型和char类型将被提升到int类型。
- 整个表达式的类型自动提升到表达式中最高等级操作数同样的类型。等级顺序:byte、short、char→int→long→float→double。
8.2.2字符串的“+”操作
- 当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算数运算符。
- 在“+”操作中,如果出现了字符串,就是连接运算符,否则就是算数运算。当连续进行“+”操作时,从左到右逐个执行。
8.3赋值运算符
8.4自增自减运算符
操作数必须是一个整型或浮点型变量。
应用实例
运算符 | 含义 | 实例 | 结果 |
---|---|---|---|
i++ | 将i的值先使用再加1赋值给i变量本身 | int i= 1;int j = i++; | i = 2 ;j =1 |
++1 | 将i的值先加1赋值给变量i本身后再使用 | int i = 1;int j = ++i; | i=2;j = 2 |
i - - | 将i的值先使用再减1赋值给i变量本身 | int i = 1;int j = i - -; | i = 0;j = 1 |
- - i | 将i的值先减1赋值给变量i本身后再使用 | int i = 1;int j = - - i; | i = 0;j = 0 |
在使用自增/自减运算时应注意下面几个问题。
- 自增/自减只能作用于变量,不允许对常量、表达式或其他类型的变量进行操作。常见的错误是试图将自增或自减运算符用于非简单变量表达式中。
- 自增/自减运算可以用于整数类型 byte、short、int、long,浮点类型 float、double,以及字符串类型 char。
- 在 Java 1.5 以上版本中,自增/自减运算可以用于基本类型对应的包装器类 Byte、Short、Integer、Long、Float、Double 和 Character。
- 自增/自减运算结果的类型与被运算的变量类型相同。
9.关系运算符
关系运算符,也可以称为“比较运算符”,用于用来比较判断两个变量或常量的大小。关系运算符是二元运算符,运算结果是 boolean 型。当运算符对应的关系成立时,运算结果是 true,否则是 false。
符号 | 说明 | 实例 | 结果 |
---|---|---|---|
== | a==b,判断a和b的值是否相等,成立为true,不成立为false | 4==5 | false |
!= | a !=b,判断a和b的值是否不相等,成立为true,不成立为false | 4!=5 | true |
> | a>b,判断a是否大于b,成立为true,不成立为false | 4>5 | false |
>= | a>=b,判断a是否大于等于b,成立为true,不成立为false | 4>=5 | false |
< | a<b,判断a是否小于b,成立为true,不成立为false | 4<5 | true |
<= | a<=b,判断a小于等于b,成立于true,不成立为false | 4<=5 | true |
注意:
- 基本类型的变量、值不能和引用类型的变量、值使用 == 进行比较;boolean 类型的变量、值不能与其他任意类型的变量、值使用 == 进行比较;如果两个引用类型之间没有父子继承关系,那么它们的变量也不能使用 == 进行比较。
- == 和 != 可以应用于基本数据类型和引用类型。当用于引用类型比较时,比较的是两个引用是否指向同一个对象,但当时实际开发过程多数情况下,只是比较对象的内容是否相当,不需要比较是否为同一个对象。
- 关系运算符的优先级为:>、<、>=、<= 具有相同的优先级,并且高于具有相同优先级的 !=、==。关系运算符的优先级高于赋值运算符而低于算术运算符,结合方向是自左向右。
- 不要将“ == ”写成“ = ”。
10.逻辑运算符
10.1逻辑运算符概述
在数学中,一个数据x,大于3,小于6,我们可以这样来进行表示:3<x<6。再Java中,需要将上面的式子先进行拆解,再进行合并表达。
- 拆解为:x>3和x<6
- 合并后:x>3&&x<6
&&其实就是一个逻辑运算符。逻辑运算符,是用来连接关系表达式的运算符。当然,逻辑运算符也可以直接连接布尔类型的常量或者变量。
10.2逻辑运算符
符号 | 作用 | 说明 |
---|---|---|
& | 逻辑与 | a&b,a和b都是true,结果为true,否则为false |
| | 逻辑或 | a|b,a和b都是false,结果为false,否则为true |
^ | 逻辑异或 | a^b,a和b结果不同为true,相同为false |
! | 逻辑非 | !a,结果和a的结果正好相反 |
10.3短路逻辑运算符
符号 | 作用 | 说明 |
---|---|---|
&& | 短路与 | 作用和&相同,但是有短路效果 |
|| | 短路或 | 作用和|相同,但是有短路效果 |
注意:
- 逻辑与&:无论左边真假,右边都要执行。
- 短路与&&:如果左边为真,右边执行;如果左边为假,右边不执行。
- 逻辑或|:无论左边真假,右边都要执行。
- 逻辑或||:如果左边为假,右边执行;如果左边为真,右边不执行。
- 逻辑运算符的优先级为:!运算级别最高,&& 运算高于 || 运算。!运算符的优先级高于算术运算符,而 && 和 || 运算则低于关系运算符。结合方向是:逻辑非(单目运算符)具有右结合性,逻辑与和逻辑或(双目运算符)具有左结合性。
11.三元运算符
- 格式:关系表达式?表达式1 : 表达式2;
- 范例:a>b?a:b;
计算规则: 首先计算关系表达式的值,如果值为true,表达式1的值就是运算结果;如果值为false,表达式2的值就是运算结果。
12.位运算符
Java 定义的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括 long,int,short,char 和 byte。
位运算符主要用来对操作数二进制的位进行运算。按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值。
Java 语言中的位运算符分为位逻辑运算符和位移运算符两类。
12.1位逻辑运算符
运算符 | 含义 |
---|---|
& | 按位进行与运算 |
| | 按位进行或运算 |
^ | 按位进行异或运算 |
~ | 按位进行取反运算 |
12.1.1位与运算符
位与运算符为&,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为 1,那么计算结果才为 1,否则为 0。因此,任何数与 0 进行按位与运算,其结果都为 0。
12.1.2 位或运算符
位或运算符为 |,其运算规则是:参与运算的数字,低位对齐,高位不足的补零。如果对应的二进制位只要有一个为 1,那么结果就为 1;如果对应的二进制位都为 0,结果才为 0。
12.1.3 位异或运算符
位异或运算符为^,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位相同(同时为 0 或同时为 1)时,结果为 0;如果对应的二进制位不相同,结果则为 1。
12.1.4 位取反运算符
位取反运算符为~,其运算规则是:只对一个操作数进行运算,将操作数二进制中的 1 改为 0,0 改为 1。
12.2位移运算符
位移运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数。
运算符 | 含义 |
---|---|
>> | 右移位运算符 |
<< | 左移位运算符 |
12.2.1左位移运算符
左移位运算符为«,其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
从图中可以看到,原来数的所有二进制位都向左移动 1 位。原来位于左边的最高位 0 被移出舍弃,再向尾部追加 0 补位。最终到的结果是 22,相当于原来数的 2 倍。
12.2.2右位移运算符
右位移运算符为»,其运算规则是:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。
从图中可以看到,原来数的所有二进制位都向右移动 1 位。原来位于右边的最低位 1 被移出舍弃,再向最高位追加 0 补位。最终到的结果是 5,相当于原数整除 2 的结果。
13.运算符优先级表
优先级 | 运算符 | 结合性 |
---|---|---|
1 | ()、[]、{} | 从左向右 |
2 | !、+、- 、~ 、++、– | 从右向左 |
3 | * 、 / 、% | 从左向右 |
4 | + 、- | 从左向右 |
5 | << 、>> 、 | 从左向右 |
6 | < 、<= 、> 、>= 、instanceof | 从左向右 |
7 | == 、!= | 从左向右 |
8 | & | 从左向右 |
9 | ^ | 从左向右 |
10 | | | 从左向右 |
11 | && | 从左向右 |
12 | || | 从左向右 |
13 | ? : | 从右向左 |
14 | = 、+= 、-= 、/= 、&= 、~=、…… | 从右向左 |