标识符(掌握)
什么是标识符
在Java中,标识符是用来给变量、方法、类和包等命名的字符序列。标识符由字母、数字、下划线和美元符号组成,但是第一个字符必须是字母、下划线或美元符号。标识符不能包含空格或其他特殊字符,也不能与Java关键字相同。标识符的长度没有限制,但是建议使用有意义的、简洁的标识符,以提高代码的可读性和可维护性
标识符可以标识什么
Java中的标识符可以标识以下内容:
- 变量(Variable)
- 方法(Method)
- 类(Class)
- 接口(Interface)
- 枚举(Enum)
- 注解(Annotation)
- 包(Package)
- 类型参数(Type Parameter)
- 类型名称(Type Name)
- 常量(Constant)
以上是Java中常见的标识符,其中变量、方法、类、接口、枚举、注解和常量都是Java中的关键元素,而包和类型参数则是Java中的辅助元素。类型名称则是指Java中的基本类型和引用类型的名称,例如int、String、Object等。
标识符命名规则
Java中合法的标识符需要满足以下要求:
- 标识符可以由字母、数字、下划线(_)和美元符号($)组成,不能含有其他符号。(java支持全球所有语言,所以这里的 字母 指的是任何一个国家的语言都可以)
- 标识符不能以数字开头。
- 标识符不能是Java中的关键字,如public、class、void等。
- 标识符是区分大小写的,即Foo和foo是两个不同的标识符。
- 标识符的长度没有限制,但是Java建议使用有意义的、简短的标识符。
例如,以下是合法的标识符:
- name
- _name
- $name
- name123
- Name
- MyClassName
而以下是不合法的标识符:
- 123name(以数字开头)
- public(关键字)
- my-name(中间包含横线)
- MyClassName!(包含非法字符)
标识符命名规范
- 见名知意
- 驼峰式命名方式
- 类名、接口名、枚举、注解:首字母大写,后面每个单词首字母大写。(StudentService,UserService)
- 变量名和方法名:首字母小写,后面每个单词首字母大写。(doSome,doOther)
- 常量名:全部大写,每个单词用下划线连接。(LOGIN_SUCCESS,SYSTEM_ERROR)
- 包名:全部小写
判断标识符是否合法
判断以下标识符中哪些是合法的,哪些是不合法的
- myVariable
- 2name
- first.name
- studentName
- public
- public1
- address#
- MAX_SIZE
- id#
- _id
- @age
- $money
- 你好
关键字(理解)
什么是关键字
Java关键字是Java编程语言中预定义的具有特殊含义的保留字,这些保留字不能被用作标识符或变量名,而是在语法中有特定的用法和限制。Java关键字的作用是控制程序的逻辑和结构,这些关键字通常用于声明变量、定义类、控制程序流程、实现面向对象编程等。
Java关键字的种类有很多,包括基本数据类型关键字(如int、double、boolean等)、控制流程关键字(如if、for、while等)、访问权限关键字(如public、private、protected等)、类和对象关键字(如class、new、extends、super等)、异常处理关键字(如try、catch、finally等)等。不同的关键字有不同的作用和用法,程序员需要根据具体的需求选择合适的关键字来编写代码。
Java关键字的使用规则也有一些限制,例如关键字不能作为变量名、方法名等标识符的名称,也不能在不同的上下文中使用不同的含义。在编写Java代码时,需要遵守Java关键字的使用规则,以保证程序的正确性和可读性。
java中有哪些关键字
java中所有的关键字都是小写的。包括:
abstract, assert, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, enum, extends, final, finally, float, for, goto, if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while
字面量(理解)
什么是字面量
Java中,字面量指的是在程序中直接使用的数据,字面量是Java中最基本的表达式,不需要进行计算或转换,直接使用即可。
Java中都有哪些字面量
- 整数型:10、-5、0、100
- 浮点型:3.14、-0.5、1.0
- 布尔型:true、false
- 字符型:‘a’、‘b’、‘c’、‘1’、‘2’、‘国’
- 字符串型:“Hello”、“World”、“Java”、“你好呀”
加号运算符
- 加号“+”在java中是一种运算符,有两个作用:
- 求和
- 字符串拼接:+的任意一边只要是字符串类型,做字符串拼接操作,拼接之后的结果还是一个字符串。其它情况一律是求和操作。
- 判断以下程序的输出结果
System.out.println(5 + 6);
System.out.println("5" + "6");
System.out.println("5" + 6 + 7);
System.out.println("5" + (6 + 7));
System.out.println(5 + 6 + "7");
System.out.println(5 + "6" + 7);
System.out.println(5 + (6 + "7")); // 添加小括号优先级较高
变量(掌握)
什么是变量
变量可以看做是一个盒子,这个盒子可以存储数据。本质上,变量是内存当中的一块空间,这块空间有三要素(变量的三要素):
- 要素一:数据类型(决定了空间大小)。例如有一种数据类型叫做整数型:int
- 要素二:名字(只要是合法的标识符就行)。例如:age(年龄)
- 要素三:值(盒子中具体存储的数据)。例如:20
例如以下代码则表示声明了一个整数类型的变量age,值为20
int age = 20;
以及以下代码则表示声明了一个字符串类型的变量name,值为"jack"
String name = "jack";
数据类型后面小节会详细讲解。目前只需要知道int代表整数类型,String代表字符串类型即可。
另外,变量的“变”体现在哪里呢?体现在变量这个盒子中的数据是可以改变的。例如,通过“=”赋值运算符,可以改变盒子中存储的数据:
age = 30;
这个操作用专业术语表达叫做:给变量重新赋值。
重新赋值时也是有要求的,值的类型要和变量的类型一致,不然就会报错,例如:
age = "30";
报错信息如下:
编译器找到等号右边的数据,发现是String类型,然后发现age这个盒子只能存储int类型,类型不匹配,表示这种int盒子不能存放String类型的数据。
变量的作用
有这样一个需求:请用你当前所学知识,分别计算100和111、222、666、888、999的和,你该怎么编写代码?
System.out.println(100 + 111);
System.out.println(100 + 222);
System.out.println(100 + 666);
System.out.println(100 + 888);
System.out.println(100 + 999);
现在需求变化了,要求计算234和111、222、666、888、999的和,你需要将以上代码中所有的100全部进行修改:
System.out.println(234 + 111);
System.out.println(234 + 222);
System.out.println(234 + 666);
System.out.println(234 + 888);
System.out.println(234 + 999);
修改了5个位置,如果求和的数据更多,那么修改的位置也会更多,显然:可维护性太差。怎么解决?使用变量可以解决。
int num = 100;
System.out.println(num + 111);
System.out.println(num + 222);
System.out.println(num + 666);
System.out.println(num + 888);
System.out.println(num + 999);
如果需求变化了,只需要修改一个位置即可:
int num = 234;
System.out.println(num + 111);
System.out.println(num + 222);
System.out.println(num + 666);
System.out.println(num + 888);
System.out.println(num + 999);
通过以上内容的学习,可以得知,变量的存在,可以让程序更加易维护。
再比如,又有这样一个需求:现在有三个圆,半径分别是10cm,20cm,30cm,π取值3.14,请分别计算他们的面积,如果不使用变量,程序是这样的:
System.out.println(3.14 * 10 * 10); // 314
System.out.println(3.14 * 20 * 20); // 1256
System.out.println(3.14 * 30 * 30); // 2826
上面程序存在的最大问题就是:可读性太差。使用变量可以提高程序的可读性:
double π = 3.14;
int r1 = 10;
int r2 = 20;
int r3 = 30;
System.out.println(π * r1 * r1);
System.out.println(π * r2 * r2);
System.out.println(π * r3 * r3);
因此变量的出现可以提高程序的可读性。
变量的声明、赋值、访问
变量的声明
语法如下:
数据类型 变量名;
例如:
int age;
String name;
double π;
数据类型后面详细讲。
变量名只要是合法的标识符即可。规范中要求:变量名首字母小写,后面每个单词首字母大写。
变量的赋值
使用赋值运算符“=”完成赋值,例如:
age = 20;
name = "jack";
π = 3.14;
注意:等号运算符叫做赋值运算符,“=”右边表达式优先级高,先执行右边,将执行结果赋值给左边的变量。
变量中的“变”是因为变量赋值后可以重新赋值:
age = 30;
name = "lucy";
需要注意的是:变量虽然可以重新赋值,但在赋值的时候,值的数据类型一定要和变量的数据类型一致,不能这样:
age = "张三";
另外,变量的声明和赋值也是可以在一行代码中完成的,例如:在声明的时候直接赋值:
int num = 200;
变量的访问
变量的访问不外乎包括两种情况:
- 读取
- 修改
读取变量的值:
int age = 20;
System.out.println(age);
修改变量的值:
age = 30;
将变量的值读取出来,复制一份传递给另一个变量:
int num1 = 10;
int num2 = num1;
int num3 = num1 + num2;
变量的小细节
- 变量必须先声明,再赋值,才能访问。
int age;
System.out.println(age); // 报错,原因是变量age没有赋值
- 方法体当中的代码遵循自上而下的顺序依次逐行执行,变量先访问,再声明肯定是不行的。
System.out.println(num);
int num = 20;
- 一行代码上可以同时声明多个变量。
int a, b, c = 300; // 表示声明三个int类型变量,分别起名a b c,但是a和b没有赋值,c赋值300
- 在同一个作用域当中,变量名不能重名,可以重新赋值。
public static void main(String[] args){
int a = 100;
// 重新赋值没问题
a = 200;
a = 300;
// 重复声明肯定不行
int a = 900; // 报错
}
变量的作用域
什么是变量作用域
作用域就是变量的有效范围。变量的作用域是怎样的呢?用一句大白话就可以概括了:出了大括号就不认识了。
public class MyClass {
static int e = 100;
public static void main(String[] args){
int i = 100;
System.out.println(i);
for(int k = 0; k < 10; i++){
int f = 100;
}
// 这里是无法访问f变量的
System.out.println(f);
// 这里是可以访问e的
System.out.println(e);
}
public static void m()