Java高级类特性:static, final, abstract, interface, 内部类解析
需积分: 7 165 浏览量
更新于2024-07-23
收藏 1.67MB PDF 举报
所有实例共享,不论是否创建了对象,它们都在内存中占有唯一的位置。类变量通常用`static`修饰,例如`private static double radius`。这意味着无论创建了多少个`Circle`类的对象,`radius`变量只有一个副本,所有对象都会共享这个值。如果在类中定义了一个静态变量并改变了它的值,那么所有对象都会看到这个改变。
静态初始化
静态初始化通常发生在类加载时,可以通过静态初始化块(`static { ... }`)来执行。这些代码块只会在类首次被加载到JVM时执行一次,用于设置类变量的初始值。例如:
```java
class Circle {
static {
System.out.println("静态初始化块执行");
}
private static double radius = 1.0;
}
```
静态方法
静态方法与类相关联,而不是类的实例。这意味着静态方法不能访问实例变量,因为它们不依赖于任何特定的对象实例。例如,计算圆周率的函数可能是一个静态方法,因为它不依赖于特定的圆的半径。调用静态方法的方式是使用类名,而不是对象实例,如`Circle.calculatePI()`。
单子模式
单子模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。在Java中,通常通过静态方法实现单子模式,返回类的唯一实例。例如:
```java
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
```
`main`方法的语法
`main`方法是Java程序的入口点,必须是静态的,以便在没有创建任何对象的情况下执行。其标准签名是`public static void main(String[] args)`。Java虚拟机(JVM)会寻找包含此方法的类并执行其中的代码。
`final`关键字
`final`关键字用于声明一个变量不可改变,一个方法不能被重写,或者一个类不能有子类。例如,声明一个常量:
```java
public final double PI = 3.14159;
```
在此之后,`PI`的值不能被修改。
抽象类(`abstract`关键字)
抽象类是不能被实例化的类,它们通常用来作为其他类的基类。抽象类可以包含抽象方法(没有实现的方法)。如果一个类包含一个或多个抽象方法,那么该类必须被声明为抽象的。子类继承抽象类时,必须实现所有未实现的抽象方法,除非子类也是抽象的。
接口(`interface`关键字)
接口是完全抽象的类型,它们定义了一组方法签名,但不提供具体实现。一个类可以实现多个接口,从而获得多个行为。接口是多继承的唯一方式。例如:
```java
public interface Runnable {
void run();
}
public class MyRunnable implements Runnable {
@Override
public void run() {
// 实现run方法
}
}
```
内部类
内部类是定义在一个类内部的类,它可以访问外部类的所有成员,包括私有成员。内部类分为成员内部类、局部内部类、匿名内部类等。内部类提供了更复杂的封装,常用于事件处理、回调机制以及实现特定设计模式。
总结来说,`static`、`final`、抽象类、接口和内部类都是Java中高级类特性的关键概念,它们提供了丰富的面向对象编程功能,如共享数据、防止篡改、多态性、模块化设计等。理解和熟练使用这些特性对于编写高效、可维护的Java代码至关重要。
2017-03-26 上传
2017-07-31 上传
2018-06-04 上传
点击了解资源详情
2014-10-16 上传
2017-08-29 上传
2014-10-10 上传
墨茵
- 粉丝: 0
- 资源: 101
最新资源
- C语言数组操作:高度检查器编程实践
- 基于Swift开发的嘉定单车LBS iOS应用项目解析
- 钗头凤声乐表演的二度创作分析报告
- 分布式数据库特训营全套教程资料
- JavaScript开发者Robert Bindar的博客平台
- MATLAB投影寻踪代码教程及文件解压缩指南
- HTML5拖放实现的RPSLS游戏教程
- HT://Dig引擎接口,Ampoliros开源模块应用
- 全面探测服务器性能与PHP环境的iprober PHP探针v0.024
- 新版提醒应用v2:基于MongoDB的数据存储
- 《我的世界》东方大陆1.12.2材质包深度体验
- Hypercore Promisifier: JavaScript中的回调转换为Promise包装器
- 探索开源项目Artifice:Slyme脚本与技巧游戏
- Matlab机器人学习代码解析与笔记分享
- 查尔默斯大学计算物理作业HP2解析
- GitHub问题管理新工具:GIRA-crx插件介绍