接口
引用数据类型: 数组、类、接口、枚举
广义:一切用来定义规则的就是接口。
从Java角度来说,接口指的就是方法的声明。
格式:
interface 接口{
}
由于接口是用来定义规则的,因此在Java中定义接口实际就是定义一些方法的声明,将这些方法的声明用大括号给包裹起来。编译后生成的还是class文件。
interface中能定义的就是方法的声明—抽象方法,除此外还可以定义常量。
interface中能定义的内容是被限定的,因此方法和常量都是有固定修饰符的:
方法: public abstract
常量: public static final
由于修饰符都是固定的,因此定义时可以省略部分或全部修饰符,编译器会自动补全。
建议写完整,不要省略。
特点:
1.不能实例化(不能创建对象)
2.需有子类(实现类)实现(implements)接口,子类想要创建对象,子类必须将所有的抽象方法全部实现(重写),否则子类还是抽象类。
3.父类接口引用 可以指向自己的实现类(多态)
4.接口没有构造方法,实现类中的构造方法的super()找的是实现类extends的父类
类和接口、接口和接口、类和类间的关系
类和类间的关系: 单继承,不能多继承,可以多层继承。
一个子类只能有一个父类
类和接口的关系: 单实现,多实现都可以
格式: class 类名 implements 接口名1,接口名2,…{}
如果多实现的接口有相同的方法,实现类只实现一次。
接口和接口的关系: 单继承,多继承
实际使用时:
class A extends B implements C,D{}
以上写法是固定的,必须先写继承后写实现。
class A extends B{}
class B implements C,D{}
总结:
实现方法的声明与方法体的实现相分离了,降低耦合度。
匿名内部类
指的就是内部类没有类名。
实际:就是创建一个匿名的子类对象,即创建子类对象的简写。
前提:必须有继承或实现。
格式:
new 父类名/父接口名(){
//重写方法
//特有方法 — 不建议
}.方法名();
父类名/父接口名 引用名 = new 父类名/父接口名 (){
//重写方法
//特有方法 — 不建议
};
引用名.方法名()
注意:只能调用子父类共有的方法,因此这是多态形式创建的对象。
一般使用匿名内部类:建议方法个数不超过3个。
API
API: application programming interface 应用程序编程接口。
接口:方法定义的集合。方法名、参数、返回值类型、访问权限
学习API,即学习这些方法的调用。
程序执行的是class文件,因此只要有class文件即可。
jar包:jar格式的文件实际就是Java中的压缩包,一个jar包是由多个class文件组成。
生成jar包,选中—右键–export --java–jar file
注意:打包的类需是public类。
导入jar包: =项目名–右键–new folder lib – 粘贴jar到lib中
jar包上右键 – build path – add build paht(条件编译环境中)
类库:多个jar文件组合在一块,叫做类库。
导入类库: 右键 — build path – add Liabaries
Object类
是在java.lang包。
是Java体系中,所有对象的直接或间接父类,包括数组都实现了该类中的方法。
在这个类的构造方法中,是没有super()隐藏语句的。
方法:
boolean equals(Object obj)
方法调用者与参数obj比较是否是”相等”.
参数可以是任意类型的对象。
实际比较的是地址值,即两个引用是否指向同一个对象
这个比较是没有实际意义,因此会重写该方法,建立有意义比较。
面试题:
== 和 equals有什么区别?
==: 既可以比较基本也可以比较引用
基本比较的数值,引用比较的是地址值
equlas:只能比较引用类型
重写前比较地址值,重写后通常比较属性值。
== :
比较运算符,计算后的结果时boolean类型。
基本类型 : 比较的时两边的数值是否相同
引用类型: 比较的时两边的地制值是否相同,即比较的时是否指向同一个对象
String toString()
返回该对象的字符串表示。
发现调用该方法打印的结果与直接输出打印某个对象引用名的结果是相同的
因此当打印某个对象名时这个方法不需要手动调用
结果内容格式: 包名.类名+ @+ hashCode() 哈希值
返回的字符串没有实际意义,因此这个方法也会重写,返回有意义的信息,
通常是返回属性信息。
总结对象类的编写:
1.私有化属性
2.构造方法(无参、有参数)
3. set和get
[ 4.属性值比较:重写equals]
5.重写toString方法
Math
在java.lang包。
该类是封装了常用的一些数学方法,比如:获取绝对值、四舍五入、开平方等方法。
该类中的成员都是静态的,因此不需要创建对象。是一个final类。
常量:
方法:
获取随机数:
double random(): 返回一个随机小数,范围是大于等于0.0,小于1.0;
System
在Java.lang包,是一个final类,类中的成员都是类字段和类方法(static),不能实例化。
字段:
out : 标准的输出数据(控制台) PrintStream
err : 标准的错误输出(控制台,红色字显示,内容输出的位置不是固定的)
in: 标准的输入数据(键盘) InputStream
以上两个方法,可以更改默认的输出目的地和输入源
方法:
Scanner
在java.util包,是一个final类,可以扫描基本类型和字符串类型数据。
构造方法:
Scanner(InputStream ) : Scanner(System.in) 以键盘为数据源创建扫描器对象
Scanner(String str) :以str为数据源,创建扫描器
方法:
nextInt(): 扫描整数
总结: next+基本类型关键字(首字母大写) :扫描对应类型的数据
注意:基本类型中不能扫描char类型数据,即没有nextChar()方法
next():扫描字符串,遇到空格、tab键、换行符等符号结束扫描
nextLine():扫描一行字符串,遇到换行符等结束扫描。