Java 教程

Java 教程 Java 简介 Java 下载安装 Java 入门 Java 语法 Java 注释 Java 变量 Java 数据类型 Java 数据类型转换 Java 运算符 Java 字符串 Java 数学方法 Java 布尔值 Java If...Else Java Switch Java While 循环 Java For 循环 Java Break/Continue Java 数组

Java 方法

Java 方法 Java 方法参数 Java 方法重载 Java 作用域 Java 递归

Java 类库

Java OOP Java 对象和类 Java 类属性 Java 类方法 Java 构造函数 Java 修饰符 Java 封装 Java 包与API Java 继承 Java 多态 Java 内部类 Java 抽象类 Java 接口 Java 枚举 Java 用户输入 Java 日期和时间 Java ArrayList Java LinkedList Java HashMap Java HashSet Java 迭代器 Java 包装类 Java Exceptions Java 正则表达式 Java 线程 Java Lambda

Java 文件处理

Java 文件 Java 创建/写入文件 Java 读取文件 Java 删除文件

Java 如何使用

添加两个数字

Java 参考手册

Java 关键字 Java 字符串方法 Java 数学方法 Java & MongoDB 教程 Java XML 教程

Java 常用包

java.io 包 java.lang 包 java.math 包 java.time 包 java.util 包 java.util.regex 包 java.util.zip 包

Java 各版本参考

Java8 (2014-3-18) Java9 (2017-9-21) Java10 (2018-3-10) Java11 (2018 年 9 月) Java12 (2019 年 3 月) Java13 (2019 年 9 月) Java14 (2020-3-17) Java15 (2020 年 9 月) Java16 (2021 年 3 月)

Java 实例

Java 实例 Java 练习 Java 测验



Java 修饰符

修饰符

现在,您已经非常熟悉我们几乎所有示例中出现的public关键字:

public class MyClass

public 关键字是一个访问修饰符,这意味着它用于设置类、属性、方法和构造函数的访问级别。

我们将修饰符分为两组:

  • 访问修饰符 - 控制访问级别
  • 非访问修饰符 - 不控制访问级别,但提供其他功能

访问修饰符

对于 classes,可以使用 publicdefault:

修饰符 描述 试一试
public 该类可由任何其他类访问 试一试 »
default 该类只能由同一包中的类访问。在不指定修改器时使用此选项。您将在" Packages"一章中了解有关软件包的更多信息 试一试 »

对于属性、方法和构造函数,可以使用以下选项之一:

修饰符 描述 试一试
public 所有类都可以访问该代码
private 代码只能在声明的类中访问 试一试 »
default 该类只能由同一包中的类访问。在不指定修改器时使用此选项。您将在" Packages"一章中了解有关软件包的更多信息 试一试 »
protected 代码可以在相同的包和子类中访问。在 继承一章中,您将了解有关子类和超类的更多信息 试一试 »

非访问修饰符

对于,可以使用finalabstract:

修饰符 描述 试一试
final 该类不能被其他类继承(您将在 继承一章中了解有关继承的更多信息) 试一试 »
abstract 该类不能用于创建对象(要访问抽象类,它必须从另一个类继承。您将在 继承抽象章节中了解有关继承和抽象的更多信息)

对于属性和方法,可以使用以下选项之一:

修饰符 描述
final 无法覆盖/修改属性和方法
static 属性和方法属于类,而不是对象
abstract 只能在抽象类中使用,并且只能在方法上使用。该方法没有主体,例如抽象abstract void run();。主体由子类(继承自)提供。 在继承抽象章节中,您将了解有关继承和抽象的更多信息
transient 序列化包含属性和方法的对象时,将跳过属性和方法
synchronized 方法一次只能由一个线程访问
volatile 属性值不是本地缓存的线程,总是从"主内存"中读取


Final

如果不希望覆盖现有属性值,请将属性声明为 final:

实例

public class MyClass {
  final int x = 10;
  final double PI = 3.14;

  public static void main(String[] args) {
    MyClass myObj = new MyClass();
    myObj.x = 50; // 将产生错误:无法为 final 变量赋值
    myObj.PI = 25; // 将产生错误:无法为 final 变量赋值
    System.out.println(myObj.x);
  }
}

运行实例 »


Static

static 静态方法意味着可以在不创建类对象的情况下访问它,这与public不同:

实例

演示staticpublic方法之间差异的示例:

public class MyClass {
  // 静态方法
  static void myStaticMethod() {
    System.out.println("Static methods can be called without creating objects");
  }

  // 公共方法
  public void myPublicMethod() {
    System.out.println("Public methods must be called by creating objects");
  }

  // Main 方法
  public static void main(String[ ] args) {
    myStaticMethod(); // 调用静态方法
    // myPublicMethod(); 这将输出错误

    MyClass myObj = new MyClass(); // 创建一个 MyClass 的对象
    myObj.myPublicMethod(); // 调用公共方法
  }
}

运行实例 »


Abstract

abstract 抽象方法属于abstract抽象类,它没有主体。主体由子类提供:

实例

// Code from filename: Person.java
// 抽象类
abstract class Person {   public String fname = "John";   public int age = 24;   public abstract void study(); // 抽象方法 } // 子类(从 Person 继承) class Student extends Person {   public int graduationYear = 2018;   public void study() { // 此处提供了抽象方法的主体     System.out.println("Studying all day long");   } } // End code from filename: Person.java // Code from filename: MyClass.java class MyClass {   public static void main(String[] args) {     // 创建 Student 类的对象(从 Person 继承属性和方法)     Student myObj = new Student();     System.out.println("Name: " + myObj.fname);     System.out.println("Age: " + myObj.age);     System.out.println("Graduation Year: " + myObj.graduationYear);     myObj.study(); // 调用抽象方法
  } }