一、注释
在java中,有3种标记注释的方式。
1.1 单行注释
//单行注释内容
1.2 多行注释
/*
多行注释内容
多行注释内容
多行注释内容
多行注释内容
*/
1.3 文档注释
/**
* 类注释
*
* @author vivfeng
*/
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
二、关键字
2.1 总览
|
访问控制 |
private |
protected |
public |
||||||
|
类,方法和变量修饰符 |
abstract |
class |
extends |
final |
implements |
interface |
native |
new |
static |
|
strictfp |
synchronized |
transient |
volatile |
||||||
|
程序控制 |
break |
continue |
return |
do |
while |
if |
else |
for |
instanceof |
|
switch |
case |
default |
|||||||
|
错误处理 |
try |
catch |
throw |
throws |
|||||
|
包相关 |
import |
package |
|||||||
|
基本类型 |
boolean |
byte |
char |
double |
float |
int |
long |
short |
null |
|
true |
false |
||||||||
|
变量引用 |
super |
this |
void |
||||||
|
保留字 |
goto |
const |
| 关键字 | 含义 |
| abstract | 表明类或者成员方法具有抽象属性 |
| assert | 用来进行程序调试 |
| boolean | 基本数据类型之一,布尔类型 |
| break | 提前跳出一个块 |
| byte | 基本数据类型之一,字节类型 |
| case | 用在switch语句之中,表示其中的一个分支 |
| catch | 用在异常处理中,用来捕捉异常 |
| char | 基本数据类型之一,字符类型 |
| class | 类 |
| const | 保留关键字,没有具体含义 |
| continue | 回到一个块的开始处 |
| default | 默认,例如,用在switch语句中,表明一个默认的分支 |
| do | 用在do-while循环结构中 |
| double | 基本数据类型之一,双精度浮点数类型 |
| else | 用在条件语句中,表明当条件不成立时的分支 |
| enum | 枚举 |
| extends | 表明一个类型是另一个类型的子类型,这里常见的类型有类和接口 |
| final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变 |
| finally | 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
| float | 基本数据类型之一,单精度浮点数类型 |
| for | 一种循环结构的引导词 |
| goto | 保留关键字,没有具体含义 |
| if | 条件语句的引导词 |
| implements | 表明一个类实现了给定的接口 |
| import | 表明要访问指定的类或包 |
| instanceof | 用来测试一个对象是否是指定类型的实例对象 |
| int | 基本数据类型之一,整数类型 |
| interface | 接口 |
| long | 基本数据类型之一,长整数类型 |
| native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
| new | 用来创建新实例对象 |
| package | 包 |
| private | 一种访问控制方式:私用模式 |
| protected | 一种访问控制方式:保护模式 |
| public | 一种访问控制方式:共用模式 |
| return | 从成员方法中返回数据 |
| short | 基本数据类型之一,短整数类型 |
| static | 表明具有静态属性 |
| strictfp | 用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范 |
| super | 表明当前对象的父类型的引用或者父类型的构造方法 |
| switch | 分支语句结构的引导词 |
| synchronized | 表明一段代码需要同步执行 |
| this | 指向当前实例对象的引用 |
| throw | 抛出一个异常 |
| throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
| transient | 声明不用序列化的成员域 |
| try | 尝试一个可能抛出异常的程序块 |
| void | 声明当前成员方法没有返回值 |
| volatile |
表明两个或者多个变量必须同步地发生变化 |
| while |
用在循环结构中 |
三、常量与变量
3.1 常量
在 Java中,利用关键字 final指示常量。例如:
final int A = 1;
关键字 final 表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。习惯上, 常量名使用全大写。
3.2 变量
在 Java中,每个变量都有一个类型。在声明变量时,变量的类型位于变量名之前。例如:
int a;
long b;
String s;
变量名必须是一个以字母开头并由字母或数字构成的序列。另外,不能使用 Java 保留字作为变量名。
四、运算符
4.1 算术运算符
| 运算符 | 描述 | 例子 |
|---|---|---|
| + | 加法:相加运算符两侧的值 | A + B 等于 30 |
| - | 减法:左操作数减去右操作数 | A – B 等于 -10 |
| * | 乘法:相乘操作符两侧的值 | A * B等于200 |
| / | 除法:左操作数除以右操作数 | B / A等于2 |
| % | 取余:左操作数除以右操作数的余数 | B%A等于0 |
| ++ | 自增:操作数的值增加1 | B++ 或 ++B 等于 21 |
| -- | 自减:操作数的值减少1 | B-- 或 --B 等于 19 |
4.2 关系运算符
| 运算符 | 描述 | 例子 |
|---|---|---|
| == | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (A == B)为假。 |
| != | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | (A != B) 为真。 |
|检查左操作数的值是否大于右操作数的值,如果是那么条件为真。| (A > B)为假。
< |检查左操作数的值是否小于右操作数的值,如果是那么条件为真。| (A <B)为真。
= |检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 |(A >= B)为假。
<= |检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 |(A <= B)为真。
4.3 位运算符
| 运算符 | 描述 | 例子 |
|---|---|---|
| & | 如果相对应位都是1,则结果为1,否则为0 | (A&B)得到12,即 0000 1100 |
| | | 如果相对应位都是0,则结果为0,否则为1 | (A | B)得到61,即 0011 1101 |
| ^ | 如果相对应位值相同,则结果为0,否则为1 | (A ^ B)得到49,即 0011 0001 |
| 〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A)得到-61,即 1100 0011 |
| << | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | (A << 2)得到240,即 1111 0000 |
|按位右移运算符。左操作数按位右移右操作数指定的位数。 |(A >> 2)得到15,即 0000 1111
|按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 |(A>>>2)得到15,即 0000 1111
4.4 逻辑运算符
| 运算符 | 描述 | 例子 |
|---|---|---|
| && | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 | (A && B)为假。 |
| || | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 | (A || B)为真。 |
| ! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 | !(A && B) 为真。 |
4.4 赋值运算符
| 运算符 | 描述 | 例子 |
|---|---|---|
| = | 赋值运算符,将右操作数的值赋给左侧操作数 | C = A + B将把A + B得到的值赋给C |
| += | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 | C += A等价于C = C + A |
| -= | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 | C -= A等价于C = C - A |
| *= | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 | C *= A等价于C = C * A |
| /= | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 | C /= A等价于C = C / A |
| %= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 | C %= A等价于C = C%A |
| <<= | 左移位赋值运算符 | C <<= 2等价于C = C << 2 |
= |右移位赋值运算符| C >>= 2等价于C = C >> 2
&= |按位与赋值运算符| C&= 2等价于C = C&2
^= |按位异或赋值操作符| C ^= 2等价于C = C ^ 2
|= |按位或赋值操作符| C |= 2等价于C = C | 2
4.5 条件运算符(?:)
条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。
int a = 1;
int b = 2;
boolean f = a >= b ? true : false;//f为false
五、数据类型
5.1 基本数据类型
/* byte
* 存储需求:1字节
* 取值范围:-128 ~ 127
* 默认值:0
* */
byte num1 = 100;
/* short
* 存储需求:2字节
* 取值范围:-32,768 ~ 32,767
* 默认值:0
* */
short num2 = 10000;
/* int
* 存储需求:4字节
* 取值范围:-2,147,483,648 ~ 2,147,483,647
* 默认值:0
* */
int num3 = 1_000_000_000;
/* long
* 存储需求:8字节
* 取值范围:-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
* 默认值:0L
* */
long num4 = 1_000_000_000_000_000_000L;
/* float
* 存储需求:4字节
* 有效位数:6 ~ 7位
* 默认值:0.0F
* */
float num5 = 1.1F;
/* double
* 存储需求:8字节
* 有效位数:15位
* 默认值:0.0D
* */
double num6 = 2.0D;
/* boolean
* 存储需求:JVM规范中,boolean变量作为int处理,也就是4字节
* 取值范围:只有两个取值,即 true 和 false
* 默认值:false
* */
boolean k = true;
/* char
* 存储需求:2字节
* 取值范围:0~65535
* */
char c = 'a';
5.2 引用数据类型
/*
* 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。
* 这些变量在声明时被指定为一个特定的类型,比如 String 等。
* 变量一旦声明后,类型就不能被改变了。
* 对象、数组都是引用数据类型。
* 所有引用类型的默认值都是 null。
*/
String string = null;
string = new String("aaaaa");
六、大数值
如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:Biglnteger和 BigDecimaL,这两个类可以处理包含任意长度数字序列的数值。
BigInteger类实现了任意精度的整数运算,BigDecimal类实现了任意精度的浮点数运算。
//使用静态的 valueOf方法可以将普通的数值转换为大数值
BigInteger bigA = BigInteger.valueOf(5L);
BigInteger bigB = BigInteger.valueOf(10L);
BigInteger bigC = null;
//加
bigC = bigA.add(bigB);
//减
bigC = bigA.subtract(bigB);
//乘
bigC = bigA.multiply(bigB);
//除
bigC = bigA.divide(bigB);
//取余
bigC = bigA.mod(bigB);
七、数组
数组是一种数据结构,用来存储同一类型值的集合。通过一个整型下标可以访问数组中的每一个值。在声明数组变量时, 需要指出数组类型 (数据元素类型紧跟 [] ) 和数组变量的名字。一旦创建了数组,就不能再改变它的大小。
7.1 一维数组
//静态初始化
//静态初始化的同时就为数组元素分配空间并赋值
int[] array1 = {1, 2, 3, 4};
//动态初始化
int[] array2 = new int[4];
array2[0] = 1;
array2[1] = 2;
array2[2] = 3;
array2[3] = 4;
7.2 二维数组
//静态初始化
int[][] array3 = {{1, 2}, {2, 3}, {4, 5}};
//动态初始化
int[][] array4 = new int[2][3];
array4[0][0] = 12;
array4[0][1] = 34;
array4[0][2] = 93;
array4[1][0] = 12;
array4[1][1] = 34;
array4[1][2] = 93;
7.3 遍历数组
//for循环
for (int i = 0; i < array1.length; i++) {
System.out.println(array1[i]);
}
//for each循环
for (int i : array1) {
System.out.println(i);
}
八、控制流程
8.1 条件分支
int n = 19;
if (n < 10) {
System.out.println(n + " < 10");
} else if (n < 50) {
System.out.println("10 < " + n + " < 50");
} else {
System.out.println("50 < " + n);
}
8.2 开关分支
int n = 1;
switch (n) {
case 1:
System.out.println("n = 1");
break;
case 2:
System.out.println("n = 2");
break;
case 3:
System.out.println("n = 3");
break;
default:
System.out.println("n未知");
break;
}
8.3 循环
Integer[] integers = new Integer[5];
integers[0] = 0;
integers[1] = 1;
integers[2] = 2;
integers[3] = 3;
integers[4] = 4;
//for循环
for (int i = 0; i < integers.length; i++) {
System.out.println(integers[i]);
}
//for each循环
for (Integer integer : integers) {
System.out.println(integer);
}
//while循环
int j = 0;
while (j < integers.length) {
System.out.println(integers[j]);
j++;
}
//do while循环
int m = 0;
do {
System.out.println(integers[m]);
m++;
} while (m < integers.length);