第一章 面向对象上
-
面向对象的特点:封装、继承、多态。
-
类和对象的关系
①类的定义:类是对象的抽象,用于描述一组对象的共同特征和共同行为。
共同特征:类的属性(成员变量)
共同行为:类的方法(成员方法)
【修饰符//public或不写】class类名[extends父类名] [implements接口名】{
类体
}
②成员变量: 声明(未初始化=未赋值)成员变量
定义(初始化)成员变量
③成员方法:格式
修饰符:权限修饰符、静态修饰符static、最终修饰符final等。
④对象:
类名 对象名=new 类名();
栈内存 堆内存
注意:new.类名().对象成员【只能访问其中一个成员,无引用,则为垃圾】
⑤访问控制符:private——default——protected——public
同类 同包 同包\不同包子类 全局 -
类的封装
注:如果外界需要访问私有属性,需要提供一些使用public修饰的公有方法包括获取属性值的getXXX方法、设置属性值的setXXX方法。 -
方法的重载和递归
①重载:方法名相同、参数个数不同或类型不同(与返回值类型无关)
②递归: -
构造方法(它会在类实例化对象时自动被调用)(实例化对象同时为对象的属性赋值)(无需直接访问属性或调用setXXX方法给属性赋值)
【修饰符】方法名({参数列表}){
// 方法体
}
①方法名与类名相同
②方法名前无返回值类型声明
③在方法中不能使用return语句返回一个值,但可单独写一条return语句作为方法的结束
④构造方法的重载
注:Java中每个类至少有一个构造方法,若无显示构造方法,则系统自建一默认的构造方法。若有,则无默认
通常用public修饰 -
this(在非静态成员方法中,使用访问类的其他非静态成员)
①通过this调用成员变量,解决与局部变量名称冲突问题this.成员变量
②调用成员方法this.方法名()
③调用构造方法(在一个构造方法中调用其他构造方法)
(只能为第一条语句,且只能出现一次)
(不能在一个 类中两个构造方法相互调用)
this([参1,参2,…]) -
static关键字
①静态变量:类名.变量名;(只能用于修饰成员变量,不能局部变量)
②静态方法(不创建对象直接调用方法)
:在类中定义的方法前加上static关键字
类名.方法 / 实例对象名.方法
注:在一个静态方法中只能访问用static修饰的成员。
③静态代码块(在类第一次使用时才会被加载,且只会加载一次)(会随类对象的创建而执行)
static{
}
第四章
1
-
类的继承(extends)
注:①允许单继承,不允许多重继承
②多个类可以继承同一个父类
③多层继承允许 -
重写父类方法(子类权限<=父类权限,不能更严格)
子类中重写的方法需和父类被重写的方法名有相同的方法名、参数列表、返回值类型。 -
super关键字(访问父类的成员【变量,方法,构造方法】)
①调用父类的成员变量和成员方法
super.成员变量
super.成员方法({参1,参2,…})
② 调用父类的构造方法(位于子类的第一行,并且只能出现一次)
(在子类中一定会调用父类中的某个构造方法,若没指定,则调用父类无参的构造方法)
super({参1,参2,…}) -
Object类(超类、基类、根类)
①所有类的父类
②定义类时,无没有用extends显示表明父类,则默认继承自Object类
③eauals()方法 [ 判断某对象与此对象是否相等]
两种比较方法
—base1.equals(base2)[结果为布尔型]
—base1==base2(比较地址)
④getClass()方法(返回运行时类)【base.getClass()】
⑤hashcode()方法(返回对象内存地址为int类型的哈希码值)(对象转为int)【base.hashCode()】
⑥String toString()方法(返回对象用字符串表示)【base.toString( )】 -
final关键字
①修饰的类不能被继承
②修饰的方法不能被子类重写
③修饰的变量(局部变量、成员变量)是常量,只能赋值一次(final修饰成员变量是,需在定义的同时赋一个初始值)。 -
抽象类和接口
1>抽象类(为继承服务)
-抽象方法必须用abstract类修饰,且定义方法时无需实现方法体
public abstract 返回值类型 方法名();
①包含抽象方法的类必定为抽象类,但抽象类可以不包含抽象方法
②抽象类不能被实例化(abstract+普通类)
-抽象方法没有方法体,不能被调用(如需调用,创建子类,实现抽象方法)
③子类实现父类的抽象方法后,可调用(通过实例化的对象即可调用实现方法) -
接口(抽象类中所有方法都为抽象)(不能包含普通方法)
-修饰符【interface】
-一个接口可同时继承多个父接口(extends 父接1,父接2,…)
-一个类可同时实现多个接口
-实现类用implements实现接口(entends父类名 implements接口1,接口2,…【一个类继承一个类时还可以实现多个接口】
-接口与接口还可用继承关系,实现类需实现两个接口所有的抽象方法 -
多态(是指不同类的对象在调用同一个方法时所呈现的多种不同行为)
-一个类中的属性和方法被其他类继承或重写后,当把子类对象直接赋值给父类引用变量时,相同引用类型的变量调用同一个方法所呈现出的多种不同形态。
-Java的多态性是由类的继承、方法重写以及父类引用指向子类对象体现的
1>对象的类型转换
①向上转换(不能通过父类变量调用子类的特有方法)
Area circle=new Circle();
父类 子类
circle.area();
②向下转换(必须转换为本质类型)
Animal an1=new Cat();
Cat cat=(Cat)an1;
cat.shout( );
-避免转换类型错误instanceof
Animal an1=new Dog();
if(an1 instanceof Cat) {
Cat cat=(Cat)an1;
cat.shout( );
}else{
S.o.p(“不是Cat类型”)} -
内部类
①成员内部类(类中类)
-成员内部类可访问外部类的所有成员;外部也可访问内部成员变量及方法。
Outer outer=new Outer();
Outer.Inner inner=outer.new Inner();
inner.show();
outer.show2();
②局部内部类(方法内部类)(方法内部)
Inner inner=new Inner();
-局部内部类可访问外部类的所有成员,而局部内部类中的成员中能在该创建局部内部类的方法中访问
③静态内部类(用static修饰的成员内部类)
-只能访问外部类的静态成员
-外部内访问静态内部类成员时,可跳过外部类直接用过内部类访问静态内部类成员
Outer.Inner inner=new Outer.Inner();
④匿名内部类(GUI)(无名称的内部类)
new 父接口(){
//匿名内部类实现部分
} -
异常(Exception)
1>编译异常checked
①throw
-在方法声明(Main)指明抛出异常,可同时抛出多种类型的异常
throws
-在方法体内,抛出一个异常类对象
②try…catch
注:用throw抛出异常后,还需要用throws或try…catch处理
若throw抛出的是Error、RuntimeException或者他们的子类异常对象,则不需用
③自定义异常
2>运行时异常unchecked
3>垃圾回收