Java_1.基础概念
0. Java相关注意事项
0.1 语言特性
- Java区分大小写。
- Java是面向对象的程序设计语言,所以所有代码都包含在类中。
- Java中的命名不能使用关键字,以及true、false、null、NaN、Infinity、-Infinity等有意义的字面量。
- Java是强类型语言,每个变量必须声明它的类型。
- 程序的浮点型计算可能存在极小的误差,因为计算机使用二进制无法精确的表示浮点类型的数值。
0.2 Java关键字
| 关键字 | 含义 |
|---|---|
| abstract | 抽象类或方法 |
| assert | 断言 |
| boolean | 布尔类型 |
| break | 跳出一个switch或循环 |
| byte | 8位整型 |
| case | switch的一个分支 |
| catch | 捕获异常的try块子句 |
| char | Unicode字符类型 |
| class | 定义一个类类型 |
| const | 预留,未使用 |
| continue | 进入下一次循环 |
| default | switch的缺省子句 |
| do | do/while循环中的一部分 |
| double | 双精度浮点数类型 |
| else | if语句的else子句 |
| enum | 枚举类型 |
| extends | 定义一个类的父类 |
| final | 一个常量,或不能覆盖的方法,不能继承的类 |
| finally | try块中总会执行的代码块 |
| float | 单精度浮点数类型 |
| for | 一个循环类型 |
| goto | 预留,未使用 |
| if | 条件语句 |
| implements | 定义一个类实现的接口 |
| import | 导入一个包 |
| instanceof | 测试一个对象是否为一个类的实例 |
| int | 32位整型 |
| interface | 定义一种抽象类型,其中包含由类实现的方法 |
| long | 64位整型 |
| native | 本地方法 |
| new | 创建一个新对象 |
| private | (访问限制符)类内部可以访问 |
| protected | (访问限制符)类内部、子类及同一个包中的类可以访问 |
| public | (访问限制符)所有类都可以访问 |
| return | 方法返回 |
| short | 16位整型 |
| static | 静态,类所有(不属于对象) |
| strictfp | 对浮点数计算使用严格的规则 |
| super | 超类的对象或构造函数 |
| swtich | 一个选择语句 |
| synchronized | 线程锁,保证代码块执行的原子性 |
| this | 当前对象的引用或类的构造函数 |
| throw | 抛出一个异常 |
| throws | 声明一个方法可能抛出异常 |
| transient | 标志非永久的数据 |
| try | 捕获异常的代码块 |
| void | 指示一个方法不返回任何值 |
| volatile | 确保一个字段可以由多个线程访问 |
| while | 一种循环 |
对于访问限制符,还有一种包级(即不指定访问限制符),返回是类内部及同一个包中的类可以访问。
0.3 注释
程序中的注释是给程序员阅读的文字,Java中提供三种注释方式。
-
行注释,从“//” 开始到行尾。
int a = 100;//从这里开始是注释的内容。 -
块注释,从"/*"开始到"*/"结束。
/* 里面的内容是注释 */ /* 这种注释是可以跨行的。 多行也没有关系。 */ -
自动生成文档的注释,从"/**"开始到"*/"结束。
/** Java会位这种注释自动生成文档。 * @version 1.01 * @author 作者信息 */
0.4 数的进制
计算机中使用二进制作为数据的表示方法。即用0和1来表示数据。
Java中常用的进制如下。
| 进制 | 表示法 |
|---|---|
| 十进制 | 100 |
| 二进制 | 前缀0b或0B,0b100(表示十进制的4) |
| 八进制 | 前缀0,010(表示十进制的8) |
| 十六进制 | 前缀0x或0X,0x10(表示十进制的16) |
1. Java 程序的基本结构
public class Hello {
public static void main(String[] args){
System.out.println("Hello World!");
}
}
- 首先使用class声明一个名叫Hello的类,这个类用public修饰,所以所有类都可以访问到它。
- 然后在类中定义了一个公有静态方法,名叫main,它不返回任何值(void),main方法接收一个String[]类型的参数。
- 方法中,使用语句在控制台中打印Hello World! 字符串。
- Java虚拟机(JVM)会从指定类中的main方法开始执行。
2. Java中的值
2.1 字面量(Literal)
表示实实在在的值,比如:100、'a'、3.14、"string"、true、false等等。
他们代表着具体的数值、字符串、布尔值。
null是一个字面量,代表空的引用。
NaN表示不是数字,当使用浮点数0.0/0.0或负数的平方根时结果为NaN。
Infinity表示正无穷,使用正数除以0.0时。
-Infinity表示负无穷,使用负数除以0.0时。
public class Hello{
// 以下所有"="后边的值都是字面量,它们代表具体的值。
int a = 100;
char c = 'a';// 字符类型使用单引号
double d = 3.14;
float f = 3.14f;// Java默认浮点型字面量为double型,使用f或F后缀表示字面量为float型。
boolean b = true;
long l = 1000L;//Java默认整型字面量为int型,使用L后缀表示字面量为long型。
// 字符串属于类类型,使用双引号。
String str = "string";
// 这里是Hello类型的变量。它持有一个空的引用。
Hello hello = null;
}
2.2 变量(Variable)
2.2.1 变量的声明
// 声明变量的做法:变量类型 变量名 = 初始值;
int a = 10;
// 也可以将声明和赋值分开。如果不给声明的变量赋值,则Java会给这个变量一个默认值。
int a;
a = 10;
不能使用没有初始化的变量,Java编译器会报错(The local variable a may not have been initialized)。
2.2.2 变量的类型
java中的变量有四个种类:基本类型、数组类型、引用类型(类类型)和接口类型。
引用类型和接口类型在面向对象中再说。
这里先介绍Java的基本类型,Java有8种基本类型,如下表。
| 关键字 | 类型 | 类型长度 | 默认值 |
|---|---|---|---|
| byte | 整形 -27~27-1 | 8bit | 0 |
| short | 整形 -215~215-1 | 16bit | 0 |
| int | 整形 -231~231-1 | 32bit | 0 |
| long | 整形 -263~263 -1 | 64bit | 0 |
| float | 单精度浮点型 | 32bit | 0.0 |
| double | 双精度浮点型 | 64bit | 0.0 |
| boolean | 布尔型 | 理论上应该是8bit | false |
| char | 字符型 | 16bit | 'u0000'(空字符) |
int类型最为常用,大约能表示21亿左右,当需要表示的值大于这个范围时,考虑使用long类型。
char类型使用16位Unicode,范围从\u0000到\Uffff。
2.2.4 数组类型
在类型的基础上添加方括号,就声明了一个对应类型的数组。
数组表示固定长度的同种数据类型的多条记录,索引从0开始。
// 声明了一个int型的数组,同时对数组元素进行了初始化。
int[] arr = new int[]{1,2,3};
// 因为数组十分常用,所以还提供了一种简易的声明方式。
int[] arr = {1,2,3};
// 另外的声明方式,在创建数组的同时必须声明数组的长度。
int[] brr = new int[3];
brr[0] = 1;// 通过索引0访问数组中的第一个数据。
brr[1] = 2;
brr[2] = 3;
无论使用那种方式创建数组,都指明了数组的长度,一旦创建了一个数组,这个数组的长度就是不可变的。
2.2.5 变量的转换
自动类型转换
小范围数据向大范围数据的类型转换,例如int转为long。
java在做两个值的计算时,会将两个量的类型转变为长度较大的变量类型再做计算。
强制类型转换
当大范围数据向小范围数据转换时,因为转换前的长度大于转换后的长度,所以需要显式指定要转换的类型。
byte a = (byte)10;
当然,强制转换有可能会造成数据的精度丢失。
2.3 常量(Constant)
// 当使用final类修饰变量时,该变量被标识为常量,只能对常量赋值一次,否则会报错。
final double PI = 3.14;
常量的变量名通常使用全大写的形式。
2.4 命名规则
2.4.1 类名和接口名
必须以字母开头,后面可以跟字母和数字的任意组合,长度基本没有限制。
标准的命名规范为大驼峰命名法:以大写字母开头的名词,如果名称由多个单词组成,则每个单词的首字母大写。
其中源代码文件名必须与公共类的名字相同,并以.java作为后缀。比如上面Hello类的文件名应该为Hello.java。大小写非常重要。
2.4.2 变量名和方法名
必须是以字母开头(字母包括'A~Z','a~z','_','$',在程序中尽量不采用中文作为变量名)并由字母或数字构成的序列。
标准的命名规范为小驼峰命名法:以小写字母开头,如果名称由多个单词组成,则后续的每个单词首字母大写。
3. Java中的语句
在Java中用运算符连接上值,即组成了语句,Java中的每个语句都要用";"结尾。
// 以下语句声明了一个int类型的变量a,并把100这个字面量赋给a这个变量。这里"="是赋值运算符,并不表示等于的意思
int a = 100;
Java使用"{"、"}"来将代码块组织在一起。
3.1 运算符
3.1.1 算数运算符
| 符号 | 意义 |
|---|---|
| + | 加和 |
| - | 减或取负 |
| * | 相乘 |
| / | 除 |
| % | 取余(取模) |
| ++ | 自增 |
| -- | 自减 |
注意事项
-
两个整数相除时,做整数除法,结果舍去小数部分,例如:7/3的结果为2,7%3的结果为1。
-
两个浮点数除以0,则会得到无穷大或NaN。
-
整型相乘时,需要注意结果是否会溢出(超过int型能够表示的极限)。
long a = 2147483647 * 2; /* 结果为-2。虽然a的类型为long,但是在计算时,2147483647和2都是int型,得到的结果也为int型,此时应该将参与计算的任意一个操作数标识为long型。*/ long a = 2147483647 * 2L; -
自增/减可以在变量左右两边存在,当在左边时,先增减再计算;在右边时,先计算再增减。
// 先增,后算 int a = 5; int b = 6; ++a + b;// 结果为12 a++ + b;// 结果为11 // 计算结束后,a的值均为6
3.1.2位运算符
我们举个例子,比如byte类型的数据标识8位的整数。十进制的13用二进制可以表示为00001101,14可以表示为00001110。
对他们做位运算即将他们按位对齐,再按照对其的位分别进行运算。
00001101
00001110
或----------------
00001101(结果)
| 符号 | 意义 |
|---|---|
| & | 与运算 |
| | | 或运算 |
| ^ | 异或运算,相同为0,不同为1 |
| ! | 按位取反00001010 -> 11110101 |
| << | 左移,00001010 << 2 结果为00101000,相当于乘以22 |
| >> | 带符号右移,10001010 >> 2 结果为11100010 |
| >>> | 不带符号右移,10001010 >>> 2 结果为10000010,相当于除以22 |
3.1.3 赋值运算符
| 符号 | 意义 |
|---|---|
| = | 赋值,将右边的值赋予左边的变量 |
| += | a += 1;等同于a = a + 1; |
| -=, *=, /=, %= | 与+=类似 |
| &=, ^=, |=, <<=, >>=, >>>= | 与+=类似,只不过做位运算 |
3.1.4 比较运算符
运算结果为布尔值。
| 符号 | 意义 |
|---|---|
| > | 大于 |
| >= | 大于等于 |
| < | 小于 |
| <= | 小于等于 |
| == | 等于 |
| != | 不等于 |
3.1.5 关系运算符
| 符号 | 意义 |
|---|---|
| && | 与 |
| || | 或 |
| ! | 非 |
关系运算符,会进行短路运算,即如果前边的值符合能够最终决定结果的值,就不进行后边表达式的计算。
注意事项
&和|也可以进行关系运算,但是不会对运算进行短路。
3.1.6 三元运算符
布尔表达式 ? 值1: 值2
如果布尔表达式的值为true,则结果为值1,否则为值2。
3.1.7 运算符优先级
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 1 | ()、[]、{} | 从左向右 |
| 2 | !、+、-、~、++、-- | 从右向左 |
| 3 | *、/、% | 从左向右 |
| 4 | +、- | 从左向右 |
| 5 | <<、>>、>>> | 从左向右 |
| 6 | <、<=、>、>=、instanceof | 从左向右 |
| 7 | ==、!= | 从左向右 |
| 8 | & | 从左向右 |
| 9 | ^ | 从左向右 |
| 10 | | | 从左向右 |
| 11 | && | 从左向右 |
| 12 | || | 从左向右 |
| 13 | ?: | 从右向左 |
| 14 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从右向左 |
3.2 语句块
Java用大括号来表示语句块。
// 以下为一个语句块,这种形式通常用于方法体、循环体、if判断中以及一些初始化代码块。
{
int a = 10;
int b = 20;
int c = a + b;
}

浙公网安备 33010602011771号