Java 修饰符和运算符
Java 提供了丰富的修饰符和运算符,它们是控制程序行为和执行数据操作的基础。本章将分别介绍这两大类重要的语言元素。
Java 修饰符 (Modifiers)
修饰符是用于修改类、方法、变量等定义的关键字。它们可以分为两类:访问修饰符和非访问修饰符。
1. 访问修饰符 (Access Modifiers)
访问修饰符决定了其他类对某个类、方法或变量的访问权限。
public(公共的)- 权限: 最高。可以被任何地方的任何类访问。
- 用途: 用于定义希望暴露给外部使用的公共 API。
protected(受保护的)- 权限: 可以被同一包(package)内的类访问,以及不同包中的子类访问。
- 用途: 用于在父类中定义希望被子类使用,但不想完全公开给外部的成员。
default(默认,无关键字)- 权限: 如果不写任何访问修饰符,就是默认权限。只能被同一包内的类访问。
- 用途: 当希望某些成员仅在包内部共享时使用。
private(私有的)- 权限: 最低。只能在声明它的类内部被访问。
- 用途: 用于封装类的内部实现细节,这是封装原则的核心。
访问权限级别总结 (从高到低): public > protected > default > private
2. 非访问修饰符 (Non-Access Modifiers)
非访问修饰符为类、方法、变量提供其他特殊功能。
static:- 用途: 用于创建类变量和类方法。它们属于类本身,而不是类的某个实例。可以通过类名直接访问。
final:- 用于变量: 表示该变量是一个常量,其值一旦被赋值后就不能再改变。
- 用于方法: 表示该方法不能被子类重写 (override)。
- 用于类: 表示该类不能被继承 (inherit)。例如
String类就是final的。
abstract:- 用途: 用于创建抽象类和抽象方法。抽象类不能被实例化,必须被继承。抽象方法没有方法体,必须由子类实现。
synchronized:- 用途: 用于多线程编程,确保同一时间只有一个线程可以执行被标记的方法或代码块,防止并发问题。
volatile:- 用途: 同样用于多线程,确保一个线程修改了变量值后,该变化对其他线程立即可见。
Java 运算符 (Operators)
运算符是用于对变量和值执行操作的特殊符号。
算术运算符:
+(加),-(减),*(乘),/(除),%(取模/求余数)javaint result = 10 / 3; // 结果是 3 (整数除法) int remainder = 10 % 3; // 结果是 1赋值运算符:
=(赋值),+=,-=,*=,/=,%=javaint x = 10; x += 5; // 等同于 x = x + 5; 现在 x 是 15一元运算符:
+(正号),-(负号),++(自增),--(自减),!(逻辑非)javaint a = 5; int b = ++a; // 先自增再赋值: a=6, b=6 int c = a++; // 先赋值再自增: c=6, a=7 boolean isTrue = true; System.out.println(!isTrue); // 输出 false关系运算符:
==(等于),!=(不等于),>(大于),<(小于),>=(大于等于),<=(小于等于)。运算结果总是boolean类型。逻辑运算符:
&&(逻辑与),||(逻辑或)&&(短路与): 如果第一个操作数为false,则不再计算第二个操作数。||(短路或): 如果第一个操作数为true,则不再计算第二个操作数。
位运算符:
&(按位与),|(按位或),^(按位异或),~(按位取反),<<(左移),>>(带符号右移),>>>(无符号右移)。通常用于底层数据处理。三元运算符 (Ternary Operator):
? :- 这是
if-else语句的简写形式。 variable = (condition) ? valueIfTrue : valueIfFalse;
javaint score = 85; String grade = (score >= 60) ? "及格" : "不及格"; // grade 的值是 "及格"- 这是
instanceof运算符:- 用于检查一个对象是否是某个特定类或其子类的实例。
javaString name = "Java"; boolean isString = name instanceof String; // 结果是 true