Java语法是Java程序员学习编程的第一要素,今天就给大家总结完整的Java语法基础知识,分为以下6个必学Java语法。
一、标识符
1.java标识符
Java 语言中,类、变量、常量、方法都需要名字,我们统统称之为 Java 标识符。
标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。
Java 标识符的注意事项:
- Java 标识符由数字,字母A-Z或者a-z和下划线_,美元符号$组成;
- 所有的标识符都应该以字母A-Z或者a-z,美元符$、或者下划线_开始,首位不能是数字;
- 关键字不能用作标识符;
- 在 Java 中是区分大小写的;
Java 中还有一些约定俗成的命名规则:
1)类和接口名
每个字的首字母大写,含有大小写,例如:
MyClass, HelloWorld,Time 等。
2)方法名
首字符小写,其余的首字母大写,含大小写,尽量少用下划线,例如:
myName,setTime 等
这种命名方法叫做驼峰式命名。
3)常量名
基本数据类型的常量名使用全部大写字母,字与字之间用下划线分隔,对象常量可大小混写,例如:
SIZE_NAME
4)变量名
可大小写混写,首字符小写,字间分隔符用字的首字母大写,不用下划线,少用美元符号。
命名过程中尽量做到见名知意,方便后期查看和修改代码,也方便其他人员的阅读。
二、关键字
Java 的关键字对 java的编译器有特殊的意义,用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名。
Java关键字有如下表所列,目前共有50个Java关键字:
1)访问修饰符的关键字(共3个)
关键字 | 含义 |
---|---|
public | 公有访问修饰符 |
protected | 受保护的访问修饰符 |
private | 私有访问修饰符 |
2)包的关键字(共2个)
关键字 | 含义 |
---|---|
import | 引入包 |
package | 定义包 |
3)定义类、接口、抽象类和实现接口、继承类的关键字、实例化对象(共8个)
关键字 | 含义 |
---|---|
class | 定义类 |
interface | 定义接口 |
abstract | 定义抽象 |
implements | 实现接口 |
extends | 继承 |
new | 创建新对象 |
enum | 枚举类 |
assert | 断言 |
4)数据类型的关键字(共9个)
关键字 | 含义 | 字节 |
---|---|---|
byte | 字节型 | 8bit |
char | 字符型 | 16bit |
boolean | 布尔值 | — |
short | 短整型 | 16bit |
int | 整型 | 32bit |
float | 浮点型 | 32bit |
long | 长整型 | 64bit |
double | 双精度小数 | 64bit |
void | 无返回值 |
5)条件循环(流程控制)(共12个)
关键字 | 含义 |
---|---|
if | 布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代码 |
else | 当 if 语句的布尔表达式值为 false 时,else 语句块会被执行 |
while | 只要布尔表达式为 true,循环就会一直执行下去。 |
for | for循环执行的次数是在执行前就确定的 |
swifch | 判断一个变量与一系列值中某个值是否相等,每个值称为一个分支 |
case | 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。 |
defalt | 默认 |
do | 至少会执行一次 |
break | 跳出最里层的循环,并且继续执行该循环下面的语句 |
continue | 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代 |
return | 有两个作用,一是返回,二是终止 |
instanceof | 测试它左边的对象是否是它右边的类的实例 |
6)修饰方法、类、属性和变量(共9个)
关键字 | 含义 |
---|---|
static | 静态 |
final | 最终的 不可变的 |
super | 指向的是当前对象父类的引用 |
this | 指向的是当前对象的引用 |
native | 本地 |
strictfp | 更可控,更精确 |
synchronized | 线程,同步 |
transient | 序列化对象的时候,添加这个属性就不会序列化到指定的目的地中 |
volatile | 更新某个volatile声明的变量时,会通知其他的cpu使缓存失效 |
7)错误处理(共5个)
关键字 | 含义 |
---|---|
catch | 处理异常 |
try | 捕获异常 |
finally | 有没有异常都会执行 |
throw | 抛出一个异常对象 |
throws | 声明一个异常可能被抛出 |
三、基本数据类型
Java语言提供了8种基本数据类型,分别是 byte、short、int、long、float、double、boolean、char。
Java为基本类型提供语言级别的支持,即已经在Java中预定义,用相应的保留关键字表示。
基本类型是单个值,而不是复杂的对象,基本类型不是面向对象的,主要出去效率方面的考虑,但是同时也提供基本类型的对象版本,即基本类型的包装器(wrapper)。
第一类:整数类型
byte 、short 、int 、long
第二类:浮点数类型
1.float
float:单精度类型,32 位,后缀 F 或 f。
例子:
float f1 = 234.5f
2.double
常用来表示浮点数。
- double 数据类型是双精度、64 位,后缀为后缀 D或 D。
例子:
double d = 10.0d;
如果double类也无法达到你所要表示的浮点数,推荐使用BigDecimal来表示,他可以表示任意的浮点数。
第三类:布尔类型
boolean 没有什么好说的,它的取值就两个:true 、false 。
第四类、字符类型
char:2字节
char 类型是一个单一的 16 位 Unicode 字符;
例子:
char c = 'c';
四:运算符
Java运算符按功能可分为:算数运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符。
1)算数运算符
算术运算符包括通常的加(+)、减(-)、乘(*)、除(/)、取模(%),完成整数型和浮点型数据的算术运算。
示例如下:
int a = 10; int b = 20; int c = 23; //算术运算符(加减乘除) System.out.println(a+b); System.out.println(a-b); System.out.println(a*b); System.out.println(a-c);
2)关系运算符
关系运算符用来比较两个值,包括大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于()和不等于(!=)6种。
示例如下:
int a = 10; int b = 20; int c = 23; //关系运算符返回的结果是正确、错误 ,布尔值 System.out.println(a<b); System.out.println(a>b); System.out.println(a!=b); System.out.println(a==b); System.out.println(a%b); System.out.println(a%c); System.out.println(c%a);
3)逻辑运算符
逻辑运算符包括逻辑与(&&)、逻辑或(||)和逻辑非(!)。
示例如下:
//逻辑预算法 与或非 && || ! boolean a = true; boolean b = false; //&&两个变量都是true 结果才会是true System.out.println("a&&b:"+(a&&b)); //两个变量只要一个为真,结果为真 System.out.println("a||b:"+(a||b)); //结果取反 System.out.println("!(a&&b):"+!(a&&b)); int c =5; boolean d = (c<3)&&(c++<4);//&&只要前面部分为假,就不会执行后面的部分 System.out.println(c); System.out.println(d);
4)位运算符
位运算符用来对二进制位进行操作,包括按位取反(~)、按位与(&)、按位或(|)、异或(^)、右移(>>)、左移(<<)和无符号右移(>>>)。
按位与(&)
按位与运算符的写法是一个”&”符号,表示如果两个输入位都是1,那么按位“与”(&)操作就会生成一个输出位1,否则生成一个输出位0,如下图所示:
按位或(|)
或运算符用符号“|”表示,其运算规律如下:
只要对应的两个二进制位有一个为1,结果就为1,否则就为0,如下图所示:
按位异或(^)
异或运算符是用符号“^”表示的,其运算规律是:
两个操作数的位中,位相同则结果为0,不同则结果为1,如下图所示:
取反(~)
按位非(~)操作符,也称为取反操作符,它属于一元操作符。
只对一个数进行操作(其他按位操作符是二元操作符),按位“非”生成与输入位相反的值,若输入0,则输出1;若输入1,则输出0。
我们以数字5为例讲解按位取反的运算过程,如下图所示:
首先把数字5转换成补码形式,之后把每个二进制位上的数字进行取反,如果是0就变成1,如果1就变成0。
左移(<<)
左移运算符用“<<”表示,是将运算符左边的对象,向左移动运算符右边指定的位数,并且在低位补零。
其实,向左移n 位,就相当于乘上2 的n 次方,例如下面的例子。
public static void main(String[] args) { int a=2; int b=2; System.out.println("a 移位的结果是:"+(a<<b)); }
运行结果:a 移位的结果是:8
带符号右移(>>)
右移运算分为两种,分别是带符号右移和无符号右移,首先我们来说说带符号右移运算符。
带符号的右移运算符用符号“>>”表示,是将运算符左边的运算对象,向右移动运算符右边指定的位数。如果是正数,在高位补零,如果是负数,则在高位补1,先看下面一个简单的例子。
public static void main(String[] args) { int a=16; int c=-16; int b=2; int d=2; System.out.println("a 的移位结果:"+(a>>b)); System.out.println("c 的移位结果:"+(c>>d)); }
运行结果:
a 的移位结果:4
c 的移位结果:-4
分析上面的程序段:
a 的值是16,转换成二进制是00010000,让它右移两位成00000100 即4。
c 的值是-16,转换成二进制是11101111,让它右移一位成11111011 即-4。
无符号右移(>>>)
上面说了右移运算分为两种,分别是带符号右移和无符号右移,现在再来讲解无符号右移。
无符号右移运算符的写法是”>>>”,比带符号右移多了一个”>”。
右移运算符用符号“>>>”表示,是将运算符左边的对象向右移动运算符右边指定的位数,并且在高位补0,其实右移n 位,就相当于除上2 的n 次方。
public static void main(String[] args) { int a=16; int b=2; System.out.println("a 移位的结果是:"+(a>>>b)); }
运行结果
a 移位的结果是:4
分析上面的程序段:从本质上来分析,16 的二进制是00010000,它向右移动2 位,就变成了00000100,即4。
如果从另一个角度来分析,它向右移动2 位,其实就是除以2 的2 次方,结果还是4。
五、数组
1. 一维数组
int[] i; //声明一个整型的一维数组变量 int ii[]; //声明一个整型的一维数组变量 i = new int[5]; //创建一个长度为5的一维数组对象,并将变量i指向该对象 float[] f = new float[5]; //直接创建一个长度为5的单精度浮点型一维数组对象,并将变量f指向该对象 double[] d = {1, 2, 3.4, 4.5}; //直接初始化一个一维数组元素
2. 二维数组
int[][] i; //声明一个整型的二维数组变量 int ii[][]; //声明一个整型的二维数组变量 int[] iii[]; //声明一个整型的二维数组变量 i = new int[5][2]; //创建一个长度为5的二维数组对象,并将变量i指向该对象 float[][] f = new float[5][2]; //直接创建一个长度为5的单精度浮点型二维数组对象,并将变量f指向该对象 double[][] d = {{1}, {2,3}, {4,5,6}, {7,8,9,10}}; //直接初始化一个二维数组元素
六、流程控制语句
1. 条件分支语句
1)if-else
格式如下:
if (表达式1){ 语句块1 }else if(表达式2){ 语句块2 } else{ 语句块3 }
代码示例:
if(score<60){//如果成绩<60,成绩不及格 System.out.printf("成绩不及格:%3.1f", score); }else if(score>=60&&score<90){//如果60<=score<90,成绩及格 System.out.printf("成绩及格:%3.1f", score); } else {//否则成绩优秀 System.out.printf("成绩优秀:%3.1f", score); }
2)switch-case
格式如下:
switch(表达式) { case 值1:语句块1:break; case 值2:语句块2:break; case 值3:语句块3:break; default:语句块4
代码示例:
public class SwitchTest { public static void main(String args[]) { int i = 1; switch (i) { case 0: System.out.println("one"); break; case 1: System.out.println("two"); break; default: System.out.println("other"); break; } } }
注意:
- switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 (jdk 5.0),String (jdk 7.0);
- break语句用来在执行完一个case分支后使程序跳出switch语句块,如果没有break,程序会顺序执行到switch结尾。
2. 循环语句
1)for
格式如下:
for(表达式1;表达式2;表达式3) {循环体}
代码示例:
for (int i = 1; i <= 10; i++) { System.out.println(i); }
2)for in
int[] a = {1, 2, 3, 4, 5, 6}; for (int i : a) { System.out.println(i); }
3)while
格式如下:
while(表达式){ 循环体 }
代码示例:
public static void main(String[] args) { int i = 0; while (i < 10) { i++; System.out.println(i); } }
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》