1、接口
- 为什么使用接口?
- 因为java体系中,继承具有单根性,为了解决多继承的问题,所以推出了接口的概念!
- 如何使用接口?
- 定义一个类使用class关键字,定义一个接口使用interface关键字
- 接口中的方法都是抽象方法,也就是没有任何的具体实现,所以定义接口后,必须让一个类来实现这个接口,进而重写接口中的方法,使用implements关键字来实现一个接口
代码:
public interface USB {
// 提供服务
public void service();
}
public class Mouse implements USB {
public void service() {
System.out.println("鼠标可以移动了。");
}
}
public class UDisk implements USB {
public void service() {
System.out.println("传输数据。。。");
}
}
public class Test {
public static void main(String[] args) {
// 第一个USB接口,插上了一个鼠标
USB u1 = new Mouse();
// 第二个USB接口,插上了一个u盘
USB u2 = new UDisk();
u1.service();
u2.service();
}
}
2、接口的特性
- 接口中的方法都是抽象方法
- 一个类如果实现了一个接口,那么在该类中必须重写接口中的所有抽象方法
- 面向企业级开发,java就从面向对象,转化为 面向接口编程。(对象只能搞一个,接口却可以实现无数个)所以,面向接口编程才是王道!
- 接口不能实例化(就是不能new)
- 一个类只能继承另一个类,但是实现接口是可以多个的(java中的多继承)
- 接口中的变量都是静态常量 int i = 10; 等价于 public static final int i =10;
3、接口的练习
需求:模拟手机的进化过程
4、基本数据类型
四类八种:
- 整数型
- byte 字节型
- -2的7次方~ 2的7次方-1
- short 短整型
- -2的15次方~ 2的15次方-1
- int 整型
- -2的31次方~ 2的31次方-1
- long 长整型
- -2的63次方~ 2的63次方-1
- long i = 21474836481L;
- 浮点型(作业,查阅资料,更深入了解float和double)
- float 32位单精度浮点型
- double 64位双精度浮点型
- double比float更精确!
- 字符型
- char
- 一个字符,要使用单引号
- 布尔型
- boolean
- 取值范围:true,false
引用数据类型
- 字符串String(内部构造依然是char类型,并且是char类型的数组)
- 数组
- 自定义的类,接口
在声明的时候,变量前面必是数据类型
int i = 1;
Dog d = new Dog();
字符型char须知
在计算机的世界中,全世界任何一个字符(char),都有属于自己对应数字编号
例如小写字母a对应的数字编号就是97
public static void main(String[] args) {
for (int i = 1; i <= 30000; i++) {
char c = (char) i;
System.out.print(c);
if (i % 200 == 0) {
System.out.println();
}
}
}
a=97 , z=122 , A=65 , Z=90
计算溢出
System.out.println(0.2 + 0.1);
System.out.println(0.3 - 0.1);
System.out.println(0.2 * 0.1);
System.out.println(0.3 / 0.1);
结果为:
0.30000000000000004
0.19999999999999998
0.020000000000000004
2.9999999999999996
结果出现了bug,原因是:
- float和double类型的主要设计目标是为了科学计算和工程计算,他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速计算而设计的。
- 整数可以用二进制非常精确的表达,但是浮点数(小数)是没有办法用二进制精确描述的,然而CPU用的是二进制做计算,就容易丢失精度(浮点数是由两个部分组成的,指数和尾数)
- 简单的来说,cpu计算整数完全无压力,但是碰上小数,就可能出现结果不精确的情况
- 然而,他们没有提供完全精确的结果,所以不利于在精确结果的运算场景。
- 但是商业计算往往要求结果精确,这时候,应该用BigDecimal类型做计算。
代码如下:
import java.math.BigDecimal;
public class Test2 {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("0.2");
BigDecimal b = new BigDecimal("0.1");
System.out.println(a.add(b));
System.out.println(a.subtract(b));
System.out.println(a.multiply(b));
System.out.println(a.divide(b));
}
}