Java面向对象总结

1.类与对象:

类:
        定义:
                类是具有相同属性和方法的一组对象的集合
        组成:
                属性和方法
                成员变量和成员方法
        特征:
                类是抽象的,仅仅是一个模板
        创建:
                新建一个类(类名要符合帕斯卡命名规则)
                编辑属性
                编辑方法
        对象(类的实例):
                定义:
                用来描述客观事物的一个实体,由一组属性和方法组成
        组成:
                属性和方法
                实例变量和实例方法
        特征:
                是一个看得见摸得着的实体
        创建:
                类名 对象名 = new 类名();  //通过构造方法创建对象
                变量类型 变量名 = 变量值
                类和对象关系:
                类是对象的抽象,对象是类的具体实现

对象和类的区别:
1.对象是有状态的,就是它的属性是有值的,并且值是可以变化的

        类的本质:

是一种自定义类型变量,可以比普通变量存储更多的信息

2.方法和方法重载:
方法:
分类:
无参无返回值
无参有返回值     get
有参无返回值     set
有参有返回值
调用:
本类直接调用
异类 先生成对象  通过对象名.方法名进行调用
本类main方法  先生成对象  通过对象名.方法名进行调用
注意点:
形参由 参数类型和参数名
实参由 参数值组成
形参名和实参名不要求一致
传参:
基本数据类型和String传参 属于 值传递    前后操作的是两个变量
引用数据类型传参         属于 引用地址传递  前后操作的是同一个变量

构造方法:
分类:
无参构造方法:
创建对象
有参构造方法:
创建对象
初始化对象属性
注意点:
添加有参构造方法的时候系统不再默认提供无参构造,需要手动添加无参构造

方法重载:
定于:
同一个类中,方法名相同
参数项不同(参数类型和参数个数不一样)
与访问修饰符和返回值类型无关
应用场景:
根据不同条件查询相同的类型信息
this:
作用:
调用属性
调用方法
调用构造方法
本质:
指代当前对象
和动态绑定有关
成员变量和局部变量:
定义:
1.定义在类里面的变量叫做成员变量
2.定义在方法里面的变量叫做局部变量
区别:
1.作用域不一样
成员变量本类可见
局部变量 只在当前方法内部可以使用
2.初始值不一样
成员变量具有初始值
局部变量没有初始值,需要赋值之后才能使用
注意点:
同一个方法内不可以由同名的局部变量
在不同方法中可以由同名的局部变量
同一个类中,成员变量和局部变量同名,局部变量拥有更高的优先级

3.封装与继承
封装:
定义:
将类的信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法进行访问
原则:
把尽可能多的信息隐藏起来,对外提供便捷接口进行访问
把类的属性全部隐藏起来
使用:
1.属性私有化
2.提供getset方法
3.添加属性控制语句
继承:
抽取子类共有的属性和方法组成父类,以供子类进行继承
使用:
定义父类
定义子类继承父类
优点:
提高了代码复用率
不能继承的资源:
private 修饰的属性和方法
子类和父类不再同一个包中 使用默认修饰符修饰的属性和方法
构造方法
继承条件下的构造方法调用原则:
1.如果子类没有通过super显式调用父类的有参或者无参构造方法,也没有通过
this调用自身其它构造,那么系统默认调用父类的无参构造方法
2.如果子类构造方法通过super显式调用父类的有参或者无参构造方法,那么就会先调用
父类对应的构造方法,然后再调用自身构造方法
3.吐过子类构造通过this调用自身其它构造方法,也要符合以上两条规则

信息类定义步骤:
1.创建一个类
2.定义私有化属性
3.生成getset方法
4.创建无参构造方法
5.创建有参构造方法
6.加上toString()方法
7.添加属性控制语句

static:
作用:
修饰成员变量 变成静态变量 可以通过类名.变量名直接访问
修饰成员方法 变量静态方法 可以通过类名.方法名直接调用
修饰代码块   变量静态代码块  永远只会被执行一次
什么样的变量需要定义成静态变量
需要被当前类的所有实例所共享的变量需要定义成静态变量

super:
作用:
访问父类属性
访问父类方法
访问父类构造方法
本质:
指代父类对象
和this的区别:
this指代当前对象  super指代父类对象

访问修饰符:
类的访问修饰:
public
private
类成员的访问修饰:    同类  同包    父子类(同包,不同包)    不同包
public            
protected
默认
private
包:
作用:
1.分门别类
2.解决同名冲突问题
3.实现访问权限控制
命名:
小写字母组成,不能以原点开头或者结尾
组织域名倒置,后续部分依据组织内部不同的规范而不同
注意点:
1.父包不会包含子包的内容
2.同时引用来自不同包的两个同名类,需要使用完整限定名来加以区分
3.顺序固定  package第一句  import第二句 类的声明第三句


4.方法重写与多态
方法重写:
定义:
父子类中 
方法名相同
参数列表相同
返回值类型相同或者是其子类
访问修饰符不能严于父类
父类静态方法不能被重写成非静态方法
父类非静态方法不能被重写成静态方法
父子类静态方法同名,会隐藏父类的静态方法
不能抛出比父类方法更多的异常
父类的私有方法不能被子类重写
为什么?
父类方法不能访问子类方法的属性
子类实现方法的内容完全不一样
为什么说方法重写是多态实现的基础?
多态:
定义:
父类引用指向子类对象
Pet pet = new Dog();
pet.show()  调用的是子类重写的方法而不是父类的方法
使用:
使用父类作为形参来使用
使用父类作为返回值来使用
作用:
同一种类型,由于采用不同实例,而得到不同的执行结果

使用步骤:
5个类
1个父类 2个子类  1个信息操作类   1个测试类

Object:
是所有类的父类
hasCode()
toString()
equals()
getClass()

String 重写了父类的equals()方法

==和equals的区别?
1.数值比较只能使用==
2.字符串比较,==和equals() 有区别
==比较的是内存地址  equals比较的是字符串值
3.对象比较,==和equals效果是一样的
   都是比较内存地址
   
 向上转型
子类转化为父类 是属于自动类型转换
可以调用父子类共有的属性和方法
 向下转型
父类转成子类类型,属于强制类型转换
可以调用子类特有的属性和方法

 instanceOf
判单真实子类型

 抽象方法:
使用abstract修饰符修饰的方法
没有方法体
必须定义在抽象类里面
必须在子类里面重写父类的抽象方法,除非子类也是抽象类

5.抽象类和接口
抽象类VS普通类
抽象类不能被实例化
但可以创建一个引用变量,其类型是一个抽象类,指向非抽象的子类实例
普通类可以被实例化
抽象类与抽象方法的使用
抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类
如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
没有抽象构造方法,也没有抽象静态方法
抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用
接口:
父子类满足 is-a关系
接口和类满足 has-a关系
特性:
接口不可以被实例化
实现类必须实现接口的所有方法
实现类可以实现多个接口
implements、多个接口使用逗号隔开 
接口中的变量都是静态常量(public static final)
使用方式:
接口表示一种能力
接口表示一种规范
使用注意点:
接口中的成员变量
默认都是public static final的,必须显式初始化
接口中的方法
默认都是public abstract的
接口没有构造方法,不能被实例化
一个接口不能实现另一个接口,但可以继承多个其他接口
一个类必须实现接口抽象方法(implements),除非这个类也是抽象类
抽象类vs接口:
相同点
代表系统的抽象层
都不能被实例化
都能包含抽象方法
用于描述系统提供的服务,不必提供具体实现
不同点
在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法
抽象类便于复用,接口便于代码维护
一个类只能继承一个直接的父类,但可以实现多个接口
接口使用原则:
接口做系统与外界交互的窗口
接口提供服务
接口本身一旦制定,就不允许随意修改
抽象类可完成部分功能实现,还有部分功能可作为系统的扩展点

面向对象设计原则:
多用组合,少用继承
针对接口编程
针对扩展开放,针对改变关闭

6.异常
异常处理5个关键字:
try catch  finally  throw  throws
异常家族体系
throwable
Error     Exception
  受检异常(必须要处理的异常)  运行时异常(可以不处理)
  ParseException                ArithmeticException  算术异常
  IOException                   InputMisMatchException  输入不匹配异常
  SQLException                  NumberFormatException   数字强制转换异常
...

finally
无论是否报错都需要执行的代码
唯一不执行的情况   System.exit(1)
如果catch 里面有return 限制性finally 后执行return

什么时候需要try catch  
调用JDK包里面方法声明了受检异常 ,调用方必须进行处理

异常链:
抛出新的错误的同时要包含原有的错误原因

try catch 需要先捕捉子类异常 后捕捉父类异常
  ....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值