Java第十课. API&语言包
回顾
1.抽象类和抽象方法的关系
有抽象方法的类,一定是抽象类;抽象类不一定有抽象方法;
当子类继承抽象类时,必须要将抽象类中的抽象方法全部实现(或者称为重写),否则子类依然是抽象类;
2.接口的特点,和作用
接口特点:
①接口不可以被实例化,只能被类实现。
②在接口中只能有 public 修饰和缺省修饰的公共常量和抽象方法
③1个类可以实现多个接口,必须要实现所有接口的所有抽象方法
④1个接口可以被多个类实现
⑤接口也是多态的表现形式
⑥接口的引用指向实现类
作用:解决Java中的单继承问题;
3.抽象类和接口的区别
抽象类中可以有抽象方法和普通方法,也可以有普通变量和常量,可以有构造方法;
接口中只能有抽象方法和静态常量,没有构造方法。
4.类的基类是什么类?Object
5.final 修饰的类的特点:不能被继承
final 修饰的方法的特点:不能被重写
final 修饰的变量的特点:不能被修改
6.static 修饰的变量特点:内存唯一,给所有实例共享
static 修饰的方法特点:通过类名.静态方法()
7.static 是否可以和 abstract 连用?不可以
final 是否可以和 abstract 连用? 不可以
static 是否可以和 final 连用?可以
接口和抽象类都不可以被实例化?是;接口被类实现 implements ,抽象被类继承 extends;
8.写出四大访问修饰符,并且对应的有效范围
public 公开的
protected 父子友好,同包友好
缺省 同包友好
private 同类友好
9.继承的关键词 定义接口的关键词 实现接口的关键词
extends interface implements
语言包 lang 包
java中内置的基础包,使用的时候会默认导入
1. 枚举
1.1 枚举的概念
枚举类型可以取代以往的常量的定义方式,即将常量封装在类或接口中,此外,它还提供了安全检查功能. 枚举本质上还是以类的形式存在,枚举类型增强了程序代码的健壮性;
枚举定义:有很多现实的对象属性的属性值其实是固定:性别,季节,节气;
• 枚举(在Jave中简称为enum)是一个特定类型的类。所有枚举都是Java中的新类java.lang.Enum的隐式子类。此类不能手工进行子类定义;
关键字:enum
1.2 语法
定义一个枚举类的语法: public enum 类名{
成员常量1,成员常量2....}
public enum Sex{
//固定的成员变量
男,女;
}
1.3 实现
将枚举类作为参数的数据类型,那么参数值就必须是枚举类中的常量值;
public class Somebody {
private Sex sex;
public Sex getSex() {
return sex;
}
public void setSex(Sex sex) {
this.sex = sex;
}
}
测试类:
public class TestSomebody {
public static void main(String[] args) {
Somebody somebody=new Somebody();
somebody.setSex(Sex.人妖);//安全检查功能,参数的值必须是,枚举类中的常量
System.out.println(somebody.getSex());
}
}
1.4 枚举的特点
• 所有的枚举都继承自java.lang.Enum类。由于Java不支持多继承,所以枚举对象不能再继承其他类;
• 枚举可以实现接口;
• 不能有 public 的构造函数,这样做可以保证客户代码没有办法新建一个 enum 的实例;
• 所有枚举值都是 public , static , final 的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义 变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。
• enum 默认实现了java.lang.Comparable接口。
• enum 覆载了了toString方法;
• enum 提供了一个valueOf方法,这个方法和toString方法是相对应的;
• enum 还提供了values方法,这个方法使你能够方便的遍历所有的枚举值;
• enum 还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定;
1.5 枚举的作用
类型安全,易于输入,代码清晰;
2. 包装类
2.1 概念
Java中包含 2大数据类型:基本数据类型(原始数据类型)、引用数据类型;
之前学习的基本数据类型在某一些场合使用不了,比如集合(集合存放只能是引用数据类型);
Java提供一系列包装类,将原始数据类型变成引用数据类型;
在java.lang包中,对于每个原始数据类型都有一个相应的包装类;
[包装类->引用类型]
*原始数据类型* | *包* *装* *类* |
---|---|
boolean*(布尔型)* | *Boolean* |
byte*(字节型)* | *Byte* |
char*(字符型)* | *Character* |
short*(短整型)* | *Short* |
int*(整型)* | *Integer* |
long*(长整型)* | *Long* |
float*(浮点型)* | *Float* |
double*(双精度浮点型)* | *Double* |
上表我们可以发现,除了字符型 char 和整形 int 的包装类是Character和Integer,其他的数据类型的包装类只需要把第一个字母改成大写即可;
已经有了基本类型,为什么还要提供包装类呢?
1. 和面向对象思想一致(普通类型没有方法属性 );
2. 和其他类型进行转换,没有包装类,["比较麻烦"](例如将字符串转换为 int)
String