Skip to content

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)

运算符是用于对变量和值执行操作的特殊符号。

  • 算术运算符: + (加), - (减), * (乘), / (除), % (取模/求余数)

    java
    int result = 10 / 3; // 结果是 3 (整数除法)
    int remainder = 10 % 3; // 结果是 1
  • 赋值运算符: = (赋值), +=, -=, *=, /=, %=

    java
    int x = 10;
    x += 5; // 等同于 x = x + 5; 现在 x 是 15
  • 一元运算符: + (正号), - (负号), ++ (自增), -- (自减), ! (逻辑非)

    java
    int 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;
    java
    int score = 85;
    String grade = (score >= 60) ? "及格" : "不及格"; // grade 的值是 "及格"
  • instanceof 运算符:

    • 用于检查一个对象是否是某个特定类或其子类的实例。
    java
    String name = "Java";
    boolean isString = name instanceof String; // 结果是 true

本站内容仅供学习和研究使用。