标识符
什么是标识符
标识符就像是给程序中的各种元素起的名字,比如变量、方法、类名等。就像每个人都有名字一样,程序中的各个部分也需要名字来区分彼此。
命名规则:
必须以字母、下划线_或美元符$$开头
后面可以跟字母、数字、_或$$
不能是Java关键字
区分大小写
长度理论上没有限制
// 合法的标识符
String userName;
int _age;
double $salary;
final int MAX_COUNT = 100;
// 非法的标识符
int 2ndPlace; // 不能以数字开头
float public; // 不能使用关键字
String first name; // 不能包含空格
命名规范
好的命名就像是贴心的标签,让人一眼就知道是做什么的。Java社区有一些约定俗成的命名规范:
类名:大驼峰式,如StudentManager
方法名和变量名:小驼峰式,如getUserName
常量名:全大写,用下划线分隔,如MAX_VALUE
包名:全小写,如com.example.project
关键字
什么是关键字
关键字是Java语言预先定义的、有特殊含义的单词,就像是汉语中的"的"、"了"、"在"等字,有固定用法不能随便用。
Java中的关键字有:
数据类型:int, double, boolean等
流程控制:if, else, for, while等
访问控制:public, private, protected等
异常处理:try, catch, finally等
# 源文件保存为“Main.java”
// 使用关键字的例子
public class Main { // public和class都是关键字
public static void main(String[] args) { // static和void也是关键字
int count = 10; // int是关键字
if (count > 5) { // if是关键字
System.out.println("Count大于5");
}
}
}
常量
什么是常量
常量就像是生活中的固定规则,比如"一天24小时",在程序中定义后就不能改变。Java中用final关键字定义常量。
常量特点:
值一旦设定就不能修改
通常用全大写命名
可以是基本类型或对象类型
必须在声明时或构造方法中初始化
# 源文件保存为“Circle.java”
// 常量的定义和使用
public class Circle {
// 定义常量PI
public static final double PI = 3.1415926;
public static void main(String[] args) {
double radius = 5.0;
double area = PI * radius * radius; // 使用常量
System.out.println("圆的面积:" + area);
// PI = 3.14; // 错误!不能修改常量的值
}
}
案例解析
编写一个综合应用标识符、关键字和常量的程序。
# 源文件保存为“GradeCalculator.java”
/**
* 学生成绩计算器
*/
public class GradeCalculator {
// 定义常量:及格分数线
public static final int PASSING_SCORE = 60;
// 成员变量
private String studentName; // 学生姓名
private int mathScore; // 数学成绩
private int englishScore; // 英语成绩
/**
* 构造方法
* @param name 学生姓名
* @param math 数学成绩
* @param english 英语成绩
*/
public GradeCalculator(String name, int math, int english) {
this.studentName = name;
this.mathScore = math;
this.englishScore = english;
}
/**
* 计算平均分
* @return 两科平均分
*/
public double calculateAverage() {
return (mathScore + englishScore) / 2.0;
}
/**
* 判断是否及格
* @return 是否及格
*/
public boolean isPassed() {
return calculateAverage() >= PASSING_SCORE;
}
/**
* 打印成绩报告
*/
public void printReport() {
System.out.println("学生姓名:" + studentName);
System.out.println("数学成绩:" + mathScore);
System.out.println("英语成绩:" + englishScore);
System.out.println("平均成绩:" + calculateAverage());
System.out.println("是否及格:" + (isPassed() ? "是" : "否"));
}
public static void main(String[] args) {
// 创建学生成绩对象
GradeCalculator student1 = new GradeCalculator("张三", 85, 72);
student1.printReport();
}
}
运行结果
学生姓名:张三
数学成绩:85
英语成绩:72
平均成绩:78.5
是否及格:是
代码解析:
类名GradeCalculator使用大驼峰命名法
常量PASSING_SCORE全大写,用下划线分隔
成员变量使用小驼峰命名法,有描述性
方法名使用小驼峰命名法,动词开头
合理使用关键字public, private, static, final等
常量在类加载时初始化,值不可变
代码结构清晰,命名规范
常见错误及解决方法
使用非法标识符
int 1stPlace; // 错误:不能以数字开头
String first name; // 错误:不能包含空格
float public; // 错误:使用关键字
解决方法:
变量名不能以数字开头,可以改为firstPlace
去掉空格或使用下划线,如firstName
避免使用Java关键字,改为isPublic等
常量未初始化或修改
final int MAX_VALUE; // 错误:未初始化
MAX_VALUE = 100; // 错误:不能在后续代码中赋值
final int MIN_VALUE = 50;
MIN_VALUE = 40; // 错误:不能修改常量
解决方法:
常量必须在声明时初始化:final int MAX_VALUE = 100;
如果需要在构造方法中初始化,必须是实例常量
常量一旦赋值就不能修改,确保业务逻辑正确
命名不规范
int a; // 无意义
String str; // 太泛泛
double db; // 缩写不明确
解决方法:
使用有意义的名称,如studentCount
避免泛泛的名称,如inputString比str好
避免模糊的缩写,如database比db更清晰
练习题
理论练习题
下面哪些是合法的Java标识符?为什么?
userName
2ndPlace
_age
public
$salary
答案:
userName:合法,符合标识符规则
2ndPlace:不合法,不能以数字开头
_age:合法,下划线开头是允许的
public:不合法,这是Java关键字
$salary:合法,$符号开头是允许的但不推荐
为什么Java常量的命名要全部大写?
答案:这是Java社区的命名约定,全部大写加下划线的方式能让人一眼就认出这是常量,与变量区分开来。就像交通标志全部大写一样,起到明显的警示作用,提醒开发者这个值不能被修改。
下面代码有什么问题?如何改正?
public class test {
public static void main(String[] args) {
final int max_count;
int 1stNum = 10;
max_count = 20;
double double = 3.14;
}
}
答案:
类名test应改为大驼峰Test
max_count常量未在声明时初始化,应在声明时赋值
1stNum不能以数字开头,可改为firstNum
double是关键字,不能用作变量名,可改为piValue
实操练习题
改正下面代码中的命名问题:
public class calculator {
final int max = 100;
public int add(int a, int b) {
int SUM = a + b;
if (SUM > max) {
System.out.println("超过最大值");
}
return SUM;
}
}
参考解答:
# 源文件保存为“Calculator.java”
public class Calculator { // 类名大驼峰
public static final int MAX_VALUE = 100; // 常量全大写
public int add(int firstNum, int secondNum) { // 参数名有意义
int sum = firstNum + secondNum; // 变量名小驼峰
if (sum > MAX_VALUE) {
System.out.println("超过最大值");
}
return sum;
}
}
解析:
类名改为大驼峰命名法
常量名改为全大写并更具描述性
参数和局部变量使用有意义的小驼峰命名
使用static使常量成为类常量
去掉了不必要的全大写变量SUM
编写一个程序,包含以下元素:
一个表示星期的常量枚举
根据当前星期输出不同活动
使用恰当的标识符命名
参考解答:
# 源文件保存为“WeeklyActivity.java”
public class WeeklyActivity {
// 定义星期枚举常量
enum DayOfWeek {
MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
// 根据星期返回活动
public static String getActivity(DayOfWeek day) {
switch (day) {
case MONDAY:
return "团队会议";
case FRIDAY:
return "代码审查";
case SATURDAY: case SUNDAY:
return "休息";
default:
return "编码时间";
}
}
public static void main(String[] args) {
DayOfWeek today = DayOfWeek.WEDNESDAY;
System.out.println("今天是" + today + ",活动是:" + getActivity(today));
}
}
解析:
使用enum定义星期枚举常量,全大写
方法名getActivity使用小驼峰,动词开头
参数名day简洁但含义明确
枚举值全大写,符合常量命名规范
使用switch处理不同情况,结构清晰
设计一个圆形类,包含:
圆周率常量
半径变量
计算面积和周长的方法
使用规范的命名
参考解答:
# 源文件保存为“Circle.java”
/**
* 圆形几何计算
*/
public class Circle {
// 圆周率常量
public static final double PI = 3.141592653589793;
private double radius; // 半径
public Circle(double radius) {
this.radius = radius;
}
// 计算面积
public double calculateArea() {
return PI * radius * radius;
}
// 计算周长
public double calculateCircumference() {
return 2 * PI * radius;
}
public static void main(String[] args) {
Circle myCircle = new Circle(5.0);
System.out.printf("面积:%.2f,周长:%.2f",
myCircle.calculateArea(),
myCircle.calculateCircumference());
}
}
解析:
常量PI全大写,使用final修饰
成员变量radius使用小驼峰
方法名calculateArea和calculateCircumference动词开头,描述清晰
类名Circle大驼峰,表示圆形
使用printf格式化输出结果