Java语法基础规则超详解(6大必学语法)

Java语法基础规则超详解(6大必学语法)-mikechen

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语法基础规则超详解(6大必学语法)-mikechen

Java为基本类型提供语言级别的支持,即已经在Java中预定义,用相应的保留关键字表示。

基本类型是单个值,而不是复杂的对象,基本类型不是面向对象的,主要出去效率方面的考虑,但是同时也提供基本类型的对象版本,即基本类型的包装器(wrapper)。

 

第一类:整数类型

byte 、short 、int 、long
Java语法基础规则超详解(6大必学语法)-mikechen

 

第二类:浮点数类型

Java语法基础规则超详解(6大必学语法)-mikechen

1.float

float:单精度类型,32 位,后缀 F 或 f。

例子:

float f1 = 234.5f

2.double

常用来表示浮点数。

  • double 数据类型是双精度、64 位,后缀为后缀 D或 D。

例子:

double d = 10.0d;

如果double类也无法达到你所要表示的浮点数,推荐使用BigDecimal来表示,他可以表示任意的浮点数。

 

第三类:布尔类型

Java语法基础规则超详解(6大必学语法)-mikechen

boolean 没有什么好说的,它的取值就两个:true 、false 。

 

第四类、字符类型

Java语法基础规则超详解(6大必学语法)-mikechen
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,如下图所示:

Java语法基础规则超详解(6大必学语法)-mikechen

 

按位或(|)

或运算符用符号“|”表示,其运算规律如下:

只要对应的两个二进制位有一个为1,结果就为1,否则就为0,如下图所示:

Java语法基础规则超详解(6大必学语法)-mikechen

 

按位异或(^)

异或运算符是用符号“^”表示的,其运算规律是:

两个操作数的位中,位相同则结果为0,不同则结果为1,如下图所示:

Java语法基础规则超详解(6大必学语法)-mikechen

 

取反(~)

按位非(~)操作符,也称为取反操作符,它属于一元操作符。

只对一个数进行操作(其他按位操作符是二元操作符),按位“非”生成与输入位相反的值,若输入0,则输出1;若输入1,则输出0。

我们以数字5为例讲解按位取反的运算过程,如下图所示:

Java语法基础规则超详解(6大必学语法)-mikechen

首先把数字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年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法