Java高级特性
Java高级特性
Static关键字
- 静态变量(Static Variables):
- 当
static
修饰一个成员变量时,这个变量就成为静态变量,也称为类变量。静态变量存储在Java方法区中,且仅有一个副本,供所有类的实例共享 - 静态变量在类加载时初始化,其生命周期贯穿整个程序执行过程,直到JVM停止运行(类似于全局变量)
- 可以通过类名直接访问静态变量,无需创建类的实例
- 当
- 静态方法(Static Methods):
- 静态方法也是属于类而不属于类的任何对象,因此可以通过类名直接调用,不需要实例化对象
- 静态方法内不能直接访问非静态成员(变量或方法),因为非静态成员必须依赖于具体的对象存在。比如
main()
方法 - 静态方法中不能使用
this
或super
关键字,因为没有指向任何对象的引用 - 静态方法适合于那些不依赖于对象状态的操作,如工具类中的方法
抽象类和接口
抽象类:
只有声明而没有方法体的方法称为抽象方法,而包含一个或多个抽象方法的类称为抽象类,抽象类(Abstract Class)是一种特殊的类。必须在声明中增加 abstract
关键字,在无方法体的方法前也要加上abstract
- 抽象类也可有构造方法、普通的成员变量或方法,也可以派生子类。
- 抽象类不能直接用来生成实例(即使是普通类前面添加abstract修饰)。
- 一般可通过定义子类进行实例化可以生成抽象类的变量,该变量可以指向具体的一个子类的实例
- 抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同、但是本质上相同的具体概念的抽象
- 抽象类主要用来进行类型隐藏。构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类。为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在
- 如果一个类想实例化,那他必须重写所有父类的抽象方法
接口:
接口是在抽象类概念的基础上演变而来的。
- 在接口中定义的常量默认具有public,final,static的属性。
- 在接口中声明的方法默认具有public,abstract的属性。
- 接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(Java SE 8开始能在接口中实现方法)
- 因而,接口定义了一组行为的协议,两个对象之间通过这个协议进行通信
- 接口在面向对象的 Java 程序设计中占有举足轻重的地位。事实上在设计阶段最重要的任务之一就是设计出各部分的接口,然后通过接口的组合,形成程序的基本框架结构
- 接口不属于类层次结构。不相关的类可以实现相同的接口
- 用
implements
代替extends
声明子类,该子类中必须实现接口(及其超类)中的所有方法
1 |
|
package
语句
包(package)是相关类与接口的一个集合,它提供访问控制与命名空间管理,Java平台中的类与接口都是根据功能以包组织的。
包机制的好处:
-
程序员容易确定包中的类是相关的,并且容易根据所需的功能找到相应的类
-
每个包都创建一个新的命名空间,因此不同包中的类名不会冲突
-
同一个包中的类之间有比较宽松的访问控制
包成员的使用import
将package引入源程序,格式为:
1 |
|
- import语句必须在源程序之前,在package声明之后
1 |
|
- 引入其他类的静态成员:
1 |
|
包名与包中类的存储位置
-
包分隔符相当于目录分隔符,包存储的路径由包根路径加上包名指明的路径组成。
-
包的根路径由CLASSPATH环境变量指出。
1 |
|
枚举类型
1 |
|
-
枚举类型与类一样,也可以实现接口。
-
所有的枚举类型都隐含地继承了
java.lang.Enum
类,由于Java不支持多继承,所以枚举类型的声明中不能再继承任何类 -
枚举类型实际上是具有固定实例的特殊类
-
每个枚举常量都将与一个整数值相对应
-
枚举类型的构造方法只能定义为private(默认)
-
枚举类型的方法:
1 |
|
- 枚举类型的变量也属于一种引用型变量
Wrapper类
-
Wrapper将基本类型表示成类
-
每个Wrapper类对象都封装了基本类型的一个值
Primitive Data Type | Wrapper Class |
---|---|
boolean | Boolean |
byte | Byte |
char | Character |
short | Short |
int | Integer |
long | Long |
float | Float |
Wrapper
类中包含了很多有用的方法和常量,如数字型Wrapper类中的MIN_VALUE 和 MAX_VALUE 常量,定义了该类型的最大值与最小值。byteValue, shortValue方法进行数值转换,valueOf 和 toString 实现字符串与数值之间的转换
自动装箱与拆箱
-
装箱(Box):把基本类型的数据通过相应Wrapper类形成对象
-
拆箱(Unbox):把一个Wrapper类对象中的基本数据类型提取出来
-
自动装箱与拆箱
1 |
|