类与对象的关系
对象是类的具体实现,类是对象的抽象。
在一个程序中,类是独一无二的,相同的类只有一个。对象是基于类创建的,类的具体化,没有数量限制。
类是定义的抽象的存储数据的规则、处理数据的方式。
对象是具体实现数据存储和数据处理的实例。
创建一个类和类的使用
class Foo {
private int name;
public int getName() {
return name;
}
public void setName(int name) {
this.name = name;
}
public void m(int a, int b) {
System.out.println(a + b);
}
}
Foo f = new Foo();
System.out.println(f);
抽象方法、抽象类
被abstract修饰的类和方法被称作抽象类、抽象方法。
抽象方法是一个没有方法体的方法,只提供了方法签名、返回类型等规则,明确了如何去调用以及返回结果的形式。
一个类中如果出现了抽象方法,这个类必须被定义为抽象类,定义为抽象类的类不能被实例化,因为可能包含无法执行的抽象方法。
abstract class Goo{
public abstract void absMethod();
}
接口
一种可以用来定义数据类型的概念,但是他本身不能直接实例化,因为只有抽象方法,没有具体的方法实现。提供规范标准,也称为边界类,虽然不是类。
interface Hoo {
void show();
}
接口与抽象类的对比
他们是不同的类型。抽象类是类的一种,而接口是区别于类的。
定义语法不同,接口是interface,抽象类是abstract class。
定义内容不一样,接口只包含公有静态常量和抽象方法,抽象类可以包含正常类的所有内容,额外的可以定义抽象方法。
接口是多继承,抽象类遵从类的规则是单继承。
一个具体实现类,只能继承一个抽象类,可以实现多个接口。
Static、this、super使用
Static:静态的意思,修饰的内容直接和类相关,类可以被访问的地方,只要权限足够就可以访问static修饰的方法和属性,可以修饰方法、属性、代码块。
This:指的当前对象。正在执行的代码,如果能找到执行的对象,this就是指的这个对象,可以调用方法、属性。
Super:指父类的内容,是具体的对象,有了this才有super。继承的情况下如果子类和父类有相同的属性或者方法,可以显式调用父类定义的内容。
异常的体系结构
异常的最大类Throwable:Error(开发者无法解决的严重错误)、Exception(可以通过一些处理让程序继续运行,而不终止)。
Error:内存溢出(各种内存区域的溢出)。
Exception:运行时异常(运行才知道是不是有异常)、检查型异常(编译前就得提前处理的异常)。
运行时异常:空指针、数组下标越界、类型转换异常、算数异常
检查型异常:io异常。
异常处理5个关键字的使用
try {
//可能发生异常的代码
} catch (Exception e) {
//出现异常后处理异常的代码
} finally {
//无论是否出现异常都执行的代码
}
throw new Exception();
public static void main(String[] args) throws Exception {
}
final、finally、finalize的区别
final:修饰符,修饰的变量是常量不能改变值;修饰的方法时最终法法,不能被重写;修饰的类是最终类,不能被继承。修饰的内容就是只读的。
finally:异常处理的关键字之一,所在代码块是任何时候都会被执行的,一般用于关闭资源。
finalize:是object类的一个方法名,析构函数,数据对象被销毁时调用的方法。
局部变量、成员变量
定义的位置不一样、作用域不一样、生命周期不一样,初始值不一样,存储位置不一样。
局部变量定义在方法内,作用域是所在代码块,没有初始值,必须先赋值才能使用,是在内容栈中存储的数据,所以生命周期比较短。
成员变量定义在类中,作用域是类的所有范围,不赋值的花也有默认值,可以直接使用,和对象相关,一起存储在堆内,生命周期和对象一样。
重载
发生在一个类中,方法名相同、参数列表不同的方法称之为方法重载,其他所有条件无限制。在java中重载的方法是完全没有关系的多个方法。
public void m(int a, int b) {
System.out.println(a + b);
}
private int m() {
return 0;
}
重写
发生在父类与子类中。子类对父类相同的方法进行不同的定义。java中判断相同方法的标准是方法签名。
要求满足里氏替换原则:
方法签名相同(方法名、参数列表);
访问权限修饰符的权限,子类必须必父类不小;
返回类型,子类的返回类型可以被父类的返回类型直接接收;
抛出的异常,子类不能比父类范围大。
abstract class Goo{
public abstract void absMethod();
}
class Ioo extends Goo {
@Override
public void absMethod() {
}
}