1.package
package用来定义一个包,包的作用在于解决类名冲突的问题,同一个包不允许出现相同的类名
包的结构是有层级的,我们使用小数点分割包结构,我们可以使用包名.name来获取指定的某一个类
我们往往使用自己所在公司域名的倒写作为当前的包名
2.import
import导入某个类,那么在当前类中就可以直接使用该类,而无需写全类名
注意同一个包下无需导入类就可以直接使用
import 包名.*;可以导入该包下的所有类
注意:java.lang包是唯一一个无需导包而可以直接使用的包
3.继承
xxx是一种xxxx
子类继承父类,子类就自动拥有了父类所有的成员,包含成员变量和方法;
除此之外,子类还可以包含新增加的成员
在Java中使用extends来完成继承关系
//Java中不存在多继承,一个子类不能同时继承多个父类
4. 访问控制相关
同一个类 | 同一个包 | 子类 | 任何地方 | |
---|---|---|---|---|
private | y | |||
默认(不写) | y | y | ||
protected 受保护的 | y | y | y | |
public 公共的 | y | y | y | y |
它们分别可以用来修饰成员变量和方法
5.public修饰类
被pubilc修饰的类在当前项目中任何地方都可以使用,否则只能在当前包下使用
6.Java Bean
一个实体类,它的所有成员变量都是private,并且对应每个成员变量都提供一个无参的构造方法,那么这样一个实体类称为java bean,
java bean 体现了面向对象的封装性
7.重写
继承关系的两个类,子类重写父类中的方法,重写方法和被重写方法具有相同的声名部分,但方法的实现不一样,我们根据调用者的类型来确定调用的方法是父类或子类中的方法;
在方法调用的时候,首先到该对象所在类中去找这个方法,如果没有找到,会沿着继承关系去父类中寻找
8.super
super存的是父类对象的内存地址
在对象内部,有一个super关键字表示当前对象中的父类对象的引用,它指向当前对象的父类对象
我们可以使用super.成员变量来调用父类的成员变量
super.方法来调用父类中的方法;
9
子类在构造的过程中,必须先调用父类的构造方法先构造出父类对象
我们在子类的构造方法中可以使用super(参数列表),来调用父类中的某个构造方法创建父类对象
super();必须写在子类构造方法第一行
如果子类构造方法中没有使用super语句调用父类构造方法,而父类中又没有无参的构造方法,则编译报错
10
在构造方法时,还可以使用this(参数列表)来调用本类其他构造方法来调用方法
11 instanceof
判断某一个类是否是某一个类的对象
Animal a = new Animal("小可啊");
System.out.println(a instanceof Animal);
Cat c = new Cat("tom","blue");
System.out.println(c instanceof Cat);
System.out.println(c instanceof Animal);
注意:
1.父类引用可以指向子类对象,父类引用无法访问子类对象中新增加的成员,子类对象被当作父类的类型来使用,这叫做向上转型。
2.将父类类型转化成子类类型的过程称为向下转型,向下转型后,我们就可以访问子类中新增加的成员
Animal e = new Dog("循环","black");
System.out.println(e.getName());
Dog d = (Dog) e;
System.out.println(d.getFurColor());
注意:父类引用指向子类对象,可以使得我们的程序可扩展性好
static void f(Animal a){
System.out.println(a.getName());
if (a instanceof Cat) {
Cat a2 = (Cat)a;
System.out.println(a2.getEyesColor());
} else if (a instanceof Dog) {
Dog a2 = (Dog)a;
System.out.println(a2.getFurColor());
}
}
12 多态性
多态性:父类的引用调用父类的方法,实际上调用的是子类的方法
要有继承
要有重写
父类引用指向子类对象
满足以上三个条件,父类的引用调用父类的方法,实际上调用的是子类的方法
13 抽象类
抽象方法,一个方法如果只有声名而没有实现,那么该方法被称为抽象方法,抽象方法必须被abstract关键字修饰
抽象类,含有抽象方法的类称为抽象类,抽象类必须被继承,抽象类必须被abstract关键字修饰,抽象方法必须被重写,
抽象类不能直接被实例化
14 Object类
Object类是所有类的父类,当某个类不继承任何类时,等同于它继承了object类,所有类都拥有Object类中的方法
toString(),用来描述一个对象的方法,Object类中的toString()返回的时候当前对象所在类的全类名@哈希编码
我们自己的类往往需要重写toString,用来描述当前类
equals(Object)用来比较两个对象是否相等,Object对象中的equals方法比较的标准是两个对象是同一个对象时返回true
我们通常需要自己重写equals方法,进行成员变量的比较
15 final
这是一个关键字,final修饰的类称为最终类,最终类不能被继承
final还可以修饰方法,被final修饰的方法不能重写
final修饰的变量值不能改
16 常量
一个成员变量被public static final修饰的,那么它被称为常量
17 接口
接口中所有的方法都是抽象的,接口是抽象方法和常量的集合,接口中的抽象方法必须也都是公共的,可以省略 public
使用 interface 关键字来定义一个接口
使用 implements 关键字来使得某个类实现一个接口注意:实现某个接口,就必须要重写接口中所有的抽象方
法
注意:我们可以使用接口类型的引用指向接口实现类的
对象,然后该引用调接口中的方法,实际调用到的是实现类中重写过后的方法
18. try…catch…finally…代码块
try代码块:包含一组可能发生异常的代码
catch代码块:当try代码块发生异常时,转而进行的处理语句
throw 抛出某个异常
throws 告诉调用者可能抛出什么异常,写在方法声名的地方
注意:检查异常必须要被try/catch或者throw/throws,否则无法通过编译
catch(异常)中异常的顺序:子类异常要在父类异常之前
注意:当需要使用catch代码块捕获多个异常时,必须先捕获子类异常,后捕获父类异常
finally是接在catch代码块后面的第三个代码块,无论try代码块是否抛异常,都一定执行的代码
注意:在finally之前如果执行了 return 语句,那么finally代码块依旧会执行
19. String 不可变字符序列
String是存放在常量区的,比较两个String对象需要使用equals()方法
如果使用new String(字符串),其实是在内存中创建了2个对象,其中一个是另一个拷贝的副本