一、Java基础语法回顾

Java SE复习总目录
本人情况说明:20年春学过Java语言,了解简单语法,但并不会应用,面向对象的特征及堆栈的概念也并不清楚,希望这个假期可以进行总体的回顾,并通过记博客的方式督促自己,巩固知识,欢迎有相同目标的小伙伴共同交流,一起进步鸭~~



前言

Java(也即编程)基本语法回顾:
  这一章内容较少,主要包含一些基本数据类型和流程控制语句的重点注意事项


一、Java语言

1. Java是先编译(生成.java文件),后执行(生成.class文件)的语言,编译语句为javac.文件名.java,执行语句为java.文件名(注意此处无需.class),执行过程为:

在这里插入图片描述

2. 编译型语言: 一次性的编译成机器码,运行效率高,但不可跨平台,常见有C,C++。
3. 解释型语言: 对源程序逐行解释并立即执行,运行效率低,需解释器,可跨平台,常见有Python,JavaScript,Ruby。
4. Java是跨平台的语言,真正执行的不是二进制代码,而是字节码(.class文件就是字节码文件),依靠JVM(Java虚拟机),不同平台的JVM都是不同的,但他们都提供了相同的接口。
5. 如果一个Java源文件定义了多个类,将编译生成多个字节码文件,Java中程序编写建议:一个Java源文件只定义一个类,不同的类使用不同的源文件定义。
6. API是指应用程序接口。


二、变量与数据类型

1. Java语言是一门强类型语言。
①所有的变量必须先声明、后使用。
②指定类型的变量只能接受类型与之匹配的值。
2. Java变量名(即标识符)不能以数字开头,命名可以是下划线、字母、数字以及$。
3. Java程序中的关键字全部都是小写的,无需任何大写字母。

在这里插入图片描述

4. 常量的命名规则: 所有单词的字母都是大写,如果有多个单词,那么使用下划线连接即可,如:

public static final int AGE_OF_PERSON = 20;
5. Java数据类型分为原生数据类型 (byte、short、int、long、float、double、char、boolean) 和引用数据类型 (对象类型)。
6. 其中byte、short、int、long、float、double、char可统称为数值类型,boolean为布尔类型。
7. 注意,要想将一个大数赋给long修饰的变量,需在该数末尾加上L。
8. 引用数据类型包括类,接口,数组和空类型(null)。
9. null可以赋给任何引用类型的变量,用以表示这个引用类型变量中保存的地址为空,还未指向任何有效对象。
10. 所有数值类型之间才可以进行类型转换,包括自动类型转换和强制类型转换。数值类型包括整型、字符型和浮点型,数值类型和布尔类型之间是不能转换的。(boolean类型的直接量只能赋给boolean类型的变量,不能赋给其他任何类型的变量。)即可以将表示范围小的类型的变量赋给表示范围大的变量,若反过来,需强制类型转换。

在这里插入图片描述

//下面这行代码可以通过编译
short a=1;
int b=a;

int a=1;
short b=a;//错误
short b=(short)a;//先将a强制类型转换为short,再赋值给b

11. 强制类型转换的注意事项——溢出:把一个浮点数强制类型转换为整数时,Java将自动截断浮点数的小数部分。强制类型转换可能导致溢出。
12. 可以给int赋值二进制,八进制,十进制,十六进制的整数,二进制的整数以0b或0B开头,八进制的整数以0开头,16进制的整数以0x或者0X开头,其中10~15分别以a~f(此处的a到f不区分大小写)来表示。
13. 所有数字在计算机底层都是以补码的二进制形式存在。
14. 补码的计算规则: 正数的补码和原码完全相同。负数: 最高位(符号位)保持不变,原码按位取反得到反码,再加一得到补码。
15. Unicode的表示方式是'\uXXXX'范围为'\u0000'~'u\FFFF'。
16. 只有同时写两个反斜线,Java才会把第一个反斜线当成转义字符,和后一个反斜线组成真正的反斜线。
17. Java中的所有浮点类型默认情况下都是double。例如,1.2代表一个double类型的值。若要float a = 1.2,需强制类型转换或float a = 1.2F。
18. NaN != NaN,非数,属浮点数。
float a=1.2;//错误
float a=(float)1.2;//正确
float a=1.2F;//正确

三、运算符

1. 混合运算时,结果的数据类型与参与运算的变量中范围最大的那个变量的数据类型相同。
2. 除的注意事项:a/b
①a,b均为整数,结果为截去小数部分取整,b不能为0。
②a,b有一个为浮点数,结果同数学运算,b可为0或0.0,此时结果为正无穷大(a>0)或负无穷大(a<0)。
3. 取余的注意事项:a%b
①a,b均为整数,b不能为0。
②a,b有一个为浮点数,则a%0或0.0为NaN,0或0.0%任何非0数 = 0 或0.0
4. 取模运算结果符号与被除数相同。
int a=-5;
int b=3;
int c=a%b;//c=-2

int d=5;
int e=-3;
int f=d%e;//f=2
5. Math.random()方法返回一个0~1之间的伪随机数。
6. 位运算符:&、|、~、^、>>、<<、<<<
(1)位运算符操作的是计算机底层的二进制码,即补码。
(2)按位非~是将操作数的每个位全部取反,包括符号位。
(3)按位异或^,当两位相同时返回零,不同时返回一。
(4)位运算符移出去的部分被截断,移完之后的也仍为补码。若想得到输出值,对于负数来说,仍需减一取反得原码。
(5)<<左移运算符,>>右移运算符(如果第一个操作数原来是正数,则左边补0,如果第一个操作数是负数,则左边补1)>>>无符号右移运算符。
(6)移位运算符的注意事项:
 ①对于低于int类型(如byte、short和char)的操作数总是先自动类型转换为int类型后再移位。
 ②对于int类型的整数移位a>>b,当b>32时,从先用b对32取余(因为int类型只有32位),得到的结果才是真正移位的位数,例如,a>>33和a>>1的结果完全一样,而a>>32的结果和a相同。
 ③对于long类型的整数移位a>>b,当b>64时,总是先用b对64取余(因为long类型是64位),得到的结果才是真正移位的位数。
7. 赋值运算符:健壮性
这个例子说明了赋值运算符的健壮性,两种运算符底层的运行机制存在一定差异。
public class Test {

    public static void main(String[] args) {
        // 定义一个byte类型的变量
        byte a = 5;
        // 下面语句出错,因为5默认是 int 类型,a + 5就是int类型
        // 把int赋给byte类型的变量,所以出错
        // a = a + 5;
        // 定义一个byte类型的变量
        byte b = 5;
        // 下面语句不会出现错误
        b += 5;
    }

}
8. 比较运算符:
(1)<,>,<=,>=只能对数值类型进行比较。
(2)==可比较数值类型,比较的是值,如97=='a'返回true,5.0==5也返回true,也可比较boolean类型和引用类型,只有当两个引用变量的类型有父子关系时才可以比较,而且这两个引用必须指向同一个对象才会返回true。
(3)!=比较引用数据类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就返回true。
注意:无论==还是!=,前提均需两引用变量类型具有父子关系才能比较,是否相等只取决于是否指向同一对象。
9. 逻辑运算符:&&、||、!
(1)逻辑运算符操纵的是两个布尔型的变量或常量,注意同位运算符进行区分。
(2)逻辑运算符&&和||本身返回boolean值,且具有短路特性。
int a=1;
int b=2;
int c=3;
int d=4;
int f1=0;
int 2=0;

boolean x=(a<b)&&((f1=c)<d);
System.out.println(x);
System.out.println(f1);//未短路,f1=3

boolean y=(a>b)&&((f2=c)<d);
System.out.println(y);
System.out.println(f2);//因为a>b为false,短路,程序不再往后执行,f2=0
10. 单目运算符,赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。
11. 运算符优先级:

在这里插入图片描述

四、流程控制

1. switch语句后面的控制表达式的数据类型只能是byte,short,char,int四种整数类型,枚举类型和java.lang.String类型(注意不能是StringBuffer和StringBuilder),不能是boolean类型,不能switch (true)。
2. for循环和while,do while循环的区别: 由于while,do while循环的循环迭代语句紧跟着循环体,因此如果循环体不能完全执行,如使用continue语句来结束本次循环,则循环迭代语句不会被执行。但for循环的循环迭代语句并没有与循环体放在一起。因此,不管是否使用continue语句来结束本次循环,循环迭代语句一样会获得执行。
3. break语句不仅可以结束其所在的循环,还可以直接结束其外层循环→使用标签。
public class Test {

    public static void main(String[] args) {
        // 外层循环,outer作为标识符
        outer:
        for (int i =0;i < 5;i++)
        {
            // 内层循环
            for (int j = 0;i < 3;j++)
            {
                if (j == 1)
                {
                    // 跳出outer标签所标识的循环
                    break outer;
                }
            }
        }
    }

}

4. continue后也可以紧跟一个标签,用于直接跳过标签所标识循环的当次循环的剩下语句,重新开始下一次循环。
5. return直接结束,整个方法包括main方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值