Java 高级语言特征

静态变量、方法与初始化程序块

final 关键字

抽象类

Interface

package

泛型与集合类

枚举类型

包装类与自动装箱和拆箱

注解Annotation

var局部变量类型推断

一、静态变量、方法与初始化程序块

1、类变量(static /class variable)、类(class/static)方法

在该类所有实例之间是共享的。在加载该类时,只分配一次空间,并初始化。

类变量可用来在实例之间进行通信或跟踪该类实例的数目。

  • 类变量可以是public 或private

  • 对于public 类型的类变量,可以在类外直接用类名调用而不需要初始化。

可以直接被调用,而不需要生成任何实例。

2、静态初始化程序

没有存在于任何方法体中的静态语句块。在加载该类时执行且只执行一次。

二、final 关键字

被定义成final的类不能有子类。

被定义成final 的成员方法不能被重写。

被定义成final的成员变量不能改变。该变量实际上是常量,一般大写,并赋值。

final int NUMBER = 100;

三、抽象类

一个类如果只声明方法而没有方法的实现,则称为抽象类。

必须在声明中增加 abstract 关键字,在无方法体的方法前也要加上abstract。

  • 抽象类也可有普通的成员变量或方法。

  • 抽象类不能直接用来生成实例。一般可通过定义子类进行实例化。

  • 可以生成抽象类的变量,该变量可以指向具体的一个子类的实例。

四、接口 interface

Interface 是在抽象类概念的基础上演变而来的。

一个interface所有成员方法都是抽象的,并且只能定义 static final 成员变量。

1、interface 的含义:

  • interface定义了一组行为的协议。两个对象之间通过这个协议进行通信。

  • interface 不属于类层次结构。不相关的类可以实现相同的接口。

2、实现interface:

用implements代替extends声明子类,该子类中必须实现接口(及其超类)中的所有方法。

3、接口与多重继承:

可以通过实现接口实现多重继承:一个类可只继承一个父类,并实现多个接口。

interface I1{ … };

interface I2{ …};

class E{ ….} ;

class M extends E implements I1,I2 { …}

4、interface的使用:

interface可以作为一种数据类型使用。

5、interface 与多态:

一个interface 可作为类名使用,实现多态。

6、Interface 中注意问题:

不能向interface定义中随意增加方法

7、利用缺省方法扩展接口:

Java SE 8 (JDK1.8)引入缺省方法(default method),解决接口的扩展问题

可以向已经发布并存在实现(implement)类的接口中,增加缺省方法,而不需要这些已存在的实现类做任何修改

缺省方法的定义与使用:

  • 定义方式:在方法的声明前面使用default关键字

  • 缺省方法不是抽象方法,是具有方法体的普通方法

  • 所有实现这个接口的类,都将继承缺省方法并可以直接使用

  • 接口的实现类中可以重写缺省方法

8、接口中的静态方法:

在Java SE 8以后的版本中,还可以在接口中定义静态方法(static method)

  • 可以用来定义接口的通用方法

  • 不能被实现接口的类或子接口继承

  • 定义与用法与类中的static方法一样,通过接口名访问

五、package

1、类分组 package 语句

包(package)是相关类与接口的一个集合,它提供访问控制与命名空间管理。

Java平台中的类与接口都是根据功能以包组织的。

包机制的好处:

  • 程序员容易确定包中的类是相关的,并且容易根据所需的功能找到相应的类。

  • 每个包都创建一个新的命名空间,因此不同包中的类名不会冲突。

  • 同一个包中的类之间有比较宽松的访问控制。

2、创建包

用package语句指定源文件中的类属于一个特定包:

package 包名

  • 包定义语句在每个源程序中只能有一条, 即一个类只能属于一个包。

  • 包定义语句必须在程序的第一行(之前可有空格及注释)。

  • 包名用“.” 分隔。

3、import 语句

将package 引入源程序,格式:

import 包名.*;

import 包名. 类名;

import 语句必须在源程序之前,在package 声明之后。

[package ….. ] //缺省是package .

[import …. ] //缺省是import java.lang.*

[类声明… ]

...

4、包名与包中类的存储位置

包分隔符相当于目录分隔符,包存储的路径由包根路径加上包名指明的路径组成。

包的根路径由CLASSPATH环境变量指出。

package abc.financeDept

%CLASSPATH%\abc\ financeDept

5、源文件(.java)与类文件(.class)的管理

  • 源文件可以按照包名指明的路径放置。如

  • 类文件也将放在反映包名的一系列目录下。

一般将源文件与类文件分别存放,可采用如下方式:

六、泛型与集合类Collection API

  • 泛型即泛化技术(Generics),通过一种类型或方法操纵各种类型的对象,而同时又提供了编译时的类型安全保证。

  • 泛型技术的基本思想是类和方法的泛化,是通过参数化实现的,因此泛型又被称为参数化类型

  • 优点:

编译时的严格类型检查

消除了绝大多数的类型转换

1、泛型的定义与使用

泛型的定义与普通类定义相比,在类名后增加了由尖括号标识的类型变量,一般用T表示

泛型在使用时,必须像方法调用一样执行”泛型调用“, 将泛型中的类型变量T替换为具体的类、接口等

2、泛型与集合类Collection API

一个集合类对象表示了一组对象,相当于一个容器。

Java Collections API的核心接口支持泛型,并且形成了两个独立的树型结构

(1)Set

Set不能包含重复的元素。

Set的实现:HashSet和TreeSet等

Set 接口定义:

(2)List

  • List是有序的集合,元素可以重复。

  • List接口定义:

  • List的实现: ArrayList, LinkedList,Vector

(3)Map

Map把键值映射到某个值。一个键值最多只能映射一个值。

Map 接口定义:

Map的实现:HashMap, TreeMap, HashTable等

七、枚举类型

一般用于表示一组常量。一个枚举声明实际上定义了一个类。

定义:

枚举类型的方法

所有的枚举类型都缺省继承于java.lang.Enum类。Enum 直接继承java.lang.Object且实现了java.lang.Comparable接口。编译器在创建一个枚举时也将自动加入一些特殊的方法, 如values()

enum Week{
SUNDAY,MONDAY,TUESDAY,WEDNESDAYTHURSDAY,FRIDAY,SATURDAY
}
public class HelloWorld {
    public static void main(String []args) {
       for(Week w:Week.values()){
   System. out.print ( w.name()+",");
   }
       System.out.println ( );
    }
}

八、JDK1.6中的自动装箱与拆箱

1、Wrapper类

Wrapper将基本类型表示成类。

每个wrapper类对象都封装了基本类型的一个值。

Wrapper类中包含了很多有用的方法和常量。

如数字型Wrapper类中的MIN_VALUE 和 MAX_VALUE 常量,定义了该类型的最大值与最小值。byteValue, shortValue方法进行数值转换,valueOf 和 toString 实现字符串与数值之间的转换。

2、装箱与拆箱

  • 装箱(Box):把基本类型的数据通过相应Wrapper类形成对象

  • 拆箱(Unbox):把一个Wrapper类对象中的基本数据类型提取出来。

  • 自动装箱与拆箱

Integer i = 10;

int j = i;

3、= = 运算符与equals( )方法

equals() 和 = = 比较两个引用是否指向相同的对象。

equals()方法在String, Date, File, 所有Wrapper类都重写了该方法,改为比较内容。

九、注解Annotation

1、注解Annotation的作用与格式

2、注解类型的定义

注解类型的定义由三部分构成:

  • 继承java.lang.annotation.Annotation的接口;在注解类的声明中由@interface 表示

  • 利用枚举类型ElementType指定该注解类型可以标注的声明类型,包括TYPE、 FIELD 等 8个元素,每个元素表示一种声明;由Java定义的注解类型@Target给出

  • 利用枚举类型RetentionPolicy指定该注解类型的保存方式或称为作用域,包括SOURCE, CLASS和RUNTIME等3个元素;由Java定义的注解类型@Retention给出

示例:注解类型SomeAnnotation ,标注的声明类型是ElementType.TYPE,保存方式是RetentionPolicy.RUNTIME

3、Java中定义的注解类型

Java中定义了一组注解类型,主要有两种用途:

  • 用于Java程序代码的注解,目的是向Java编译器提供信息

包括@Deprecated, @Override,@SuppressWarnings等。例如,@Override 只能标注方法,通知编译器该方法重写父类中的方法:

@Override

int overriddenMethod() { }

  • 用于标注其他注解的注解类型,被称为元注解(meta-annotation)

包括@Target、 @Retention、@Deprecated、 @Override、@Documented等。例如,@Target声明了被标注注解类型能够注释的声明类型,@Retention声明了所标注注解类型的存储方式

十、var局部变量类型推断

Java SE 10以后的版本,可以使用var标识符声明带有非空初始化的局部变量,变量的类型从上下文推断得到,例如:

使用范围:

  • 可以用于带有初始化的局部变量,增强for循环中的索引变量,以及传统for循环中声明的局部变量;

  • 不能用于方法与构造方法的形参、方法的返回类型、类成员变量、catch的形参以及其他类型的变量声明

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值