Java基础语法
文章目录
前言
记录Java学习过程中对Java基础语法的学习
一、关键字和保留字
1.1 关键字
- 关键字(keyword)的定义和特点
- 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
- 特点:关键字中所有的字母都为小写
- 官方地址: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
1.2 保留字
- Java保留字:
现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字;goto 、const。
二、标识符
2.1 标识符
- Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符。
- 技巧:凡是自己可以起名字的地方都叫标识符。
2.2 定义合法标志符规则
- 由26个英文字母大小写,0-9 ,_或 $ 组成。
- 数字不可以开头。
- 不可以使用关键字和保留字,但能包含关键字和保留字。
- Java中严格区分大小写,长度无限制。
- 标识符不能包含空格。
2.3 Java中名称命名规范
- 包名:多单词组成时所有字母都小写:xxxyyyzzz。
- 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz。
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二单词开始每个单词首字母大写:xxxYyyZzz。
- 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ。
- 注意:
- 在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
- java采用unicode字符集,因此标识符也可以使用汉字声明,但是不建议使用。
三、变量
3.1 变量的概念
- 内存中的一个存储区域。
- 该区域的数据可以在同一类型范围内不端变化。
- 变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值。
3.2 变量的作用
- 用于在内存中保存数据。
3.3 使用变量注意事项
- Java中每个变量必须先声明,后使用。
- 使用变量名来访问这块区域的数据。
- 变量的作用域:其定义所在的一对{ }内。
- 变量只有在其作用域内才有效。
- 同一个作用域内,不能定义重名的变量。
3.4 变量的分类:按数据类型分类
- 基本数据类型(primitive type)
- 数值型:
- 整数类型(byte,short,int,long)
- 浮点类型(float,double)
- 字符型(char)
- 布尔类型(boolean)
- 数值型:
- 引用数据类型
- 类(class) <- (字符串类型String)
- 接口(interface)
- 数组([ ])
3.5 基本数据类型之间的运算规则
- 自动类型提升:容量小的类型自动转换为容量大的数据类型
- (byte, short, char)→ int → long → float → double
- byte, short, char之间不会相互转换,它们三者在计算是首先转换为int类型
- Boolean类型不能与其他类型数据运算
- 当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符串类型。
- 强制类型转换:自动类型转换的逆过程,将容量大数据类型转换成容量小的数据类型。
- 使用时要加上强制转换符:(),但可能造成精度降低或溢出,格外要注意。
- 通常,字符串不能转换为基本类型,但通过基本类型对应的包装类则可以实现吧字符串转换成基本类型。
String a = “43”; int i = Integer.parseInt(a);
- Boolean类型不可以转换为其它的数据类型。
- 测试代码:
public class VariableTest {
public static void main(String[] args) {
//整形: byte(1字节);short(2字节);int(4字节);long(8字节)
//byte范围: -128 ~ 127
byte b = 12;
System.out.println(b);
//short范围: -2^15 ~ 2^15-1
short s = 13;
System.out.println(s);
//int范围: -2^31 ~ 2^31-1
int age = 23;
System.out.println(age);
//long范围: -2^63 ~ 2^63-1
long l = 1000000L;
System.out.println(l);
//浮点型: float(4字节); double(8字节)
//float: 后面需加f/F
float f = 123.4f;
System.out.println(f);
//double
double d = 123.5;
System.out.println(d);
//字符型(char): 1个字符 = 2字节 = 16 bit
char c = 'a'; //有且只能放一个
System.out.println(c);
//布尔型 boolean: true or false
boolean t = true;
boolean fe = false;
System.out.println(t);
System.out.println(fe);
//字符串类型 String: 引用数据类型
String str = "abc"; //从0个开始
System.out.println(str);
char c1 = 'a';
int num = 10;
String str1 = "hello";
System.out.println(c1 + num + str1); //107hello
System.out.println(c1 + str1 + num); //ahello10
System.out.println(c + (str1 + num)); //ahello10
System.out.println((c + str1) + num); //ahello10
}
}
四、运算符
4.1 算术运算符
- +(正号)、-(负号)
- +、-、*、/
- %(取余符号与被取余数相同)、++、–、+(字符串连接)
4.2 赋值运算符
- =、+=、-=、*=、/=、%= (不会改变本身的数据类型)
4.3 比较运算符
- ==、!=、<、>、<=、>=
- instanceof: 检查是否是类的对象; 如“hello” instanceof String == true
4.4 逻辑运算符
- &(逻辑与)、|(逻辑或)、!(逻辑非)
- &&(短路与)、||(短路或)、^(逻辑异或)
- &和&&、| 和 || 的区别
int x1 = 1, y1 = 1; if (x1++ == 2 && ++y1 == 2) { //短路与:前面一个条件不满足,则后面不执行(短路) x1 = 7; //短路或:前面一个条件满足,则后面不执行(短路) } System.out.println("x1=" + x1 + ",y1=" + y1);
4.5 位运算符(对补码二进制运算)(操作的都是整形)
- << 左移: 3 << 2 = 12 --> 322=12 空位补0,被移除的高位丢弃,空缺位补0。
- >> 右移: 3 >> 1 = 1 --> 3/2=1 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。
- >>> 无符号右移: 3 >>> 1 = 1 --> 3/2=1 被移位二进制最高位无论是0或者是1,空缺位都用0补。
- & 与运算: 6 & 3 = 2
- | 或运算: 6 | 3 = 7
- ^ 异或运算: 6 ^ 3 = 5
- ~ 取反运算: ~6 = -7
- 面试题:最高效的方式计算2*8: 2 << 3 或 8 << 1
4.6 三元运算符
- (条件表达式)?表达式1:表达式2;
- 为true,运算后的结果是表达式1;
- 为false,运算后的结果是表达式2;
- 表达式1和表达式2为同种类型
- 三元运算符与if-else的联系与区别:
- 三元运算符可简化if-else语句。
- 三元运算符要求必须返回一个结果。
- if后的代码块可有多个语句。
4.7 运算符的优先级(高→低)
- 只有单目运算符、三元运算符、赋值运算符是从右向左运算的。
五、程序流程控制
5.1 顺序结构
- 程序从上到下逐行地执行,中间没有任何判断和跳转。
5.2 分支结构
- 根据条件,选择性地执行某段代码。
- 有if…else和switch-case两种分支语句。
- 注意:
- switch中的变量只能为如下类型(byte、short 、char、int、String、枚举)。
- case子句中的值必须是常量,不能是变量名或不确定的表达式值。
- default子句是可任选的。同时,位置也是灵活的。
5.3 循环结构
- 根据循环条件,重复性的执行某段代码
- 有while、do…while、for三种循环语句
- 注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素
- 循环语句的四个组成部分:
- 初始化部分(init_statement)
- 循环条件部分(test_exp)
- 循环体部分(body_statement)
- 迭代部分(alter_statement)
5.4 特殊的流程控制语句
- break语句
- break语句用于终止某个语句块的执行。
- break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块。
- continue语句
- continue只能使用在循环结构中。
- continue语句用于跳过其所在循环语句块的一次执行,继续下一次循环。
- continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环。
- return语句
- 并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。
- 注意:
- break只能用于switch语句和循环语句中。
- continue 只能用于循环语句中。
- 二者功能类似,但continue是终止本次循环,break是终止本层循环。
- break、continue之后不能有其他的语句,因为程序永远不会执行其后的语句。
- 标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。
- 很多语言都有goto语句,goto语句可以随意将控制转移到程序中的任意一条语句上,然后执行它。但使程序容易出错。Java中的break和continue是不同于goto的。
总结
再一次学习Java基本语法,感受和之前完全不一样,一方面查漏补缺,一方面夯实基础,后面会继续更新学习Java的笔记。