java学习笔记5

面向对象编程OOP

面向过程和面向对象

属性+方法=对象
面向过程:线性过程,第一步。。。第二步。。。第三步。。。适合一些简单的问题
面向对象:分类思想,一个事情分成几个部分,每个分类单独思考,符合复杂问题(微观是面向过程)

OOP本质:以类的方式组织代码,以对象的方式组织(封装)数据

核心思想:抽象
三大特性:封装、继承、多态

  • 类是对象的模板,是对象的抽象。
  • 对象是类的具体事物
  • 静态方法static,类里直接调用,别的类用类型.方法名直接调用
  • 非静态方法没有static,需要实例化一个对象,用对象.方法名调用,实例化后才存在,没有实例化不能调用
  • 两个静态方法可以相互调用,但是静态不能调用非静态,因为没有实例化不存在
  • 实参和形参类型要对应
  • 值传递就是形参和实参的数值传递
  • 引用传递,引用类型实参和形参的内存地址传递
  • this:当前对象/当前类

类和对象的创建

  • 一个项目应该只存在一个main方法,创建一个总的测试方法,application
  • 其他类不要总是加public static void main(String[] args){ }
  • 一个类只有属性和方法,没有其他东西
  • 类是抽象的,需要实例化
  • new对象时,会对属性进行默认初始化以及对类中构造器进行调用
  • 可以对对象进行属性赋值,不同对象不同赋值

构造器详解

构造器也叫构造方法,是创建对象时必须调用的,有两个特点:(new person()中的person方法)

  • 必须和类名相同
  • 必须没有返回值,也不能用void
  • 不写的话,编译时候会默认生成
  • 写了有参,无参的就没了

构造器的作用:

  • 无参构造器:设置对象初始值,不写的话默认null、0
  • 有参构造器:new一个对象本质在调用构造器,有参的话,new对象是需要带上参数,可以传参给对象
  • 当你有了有参构造,还想用无参构造,就要有无参数的构造方法两个都要写,无参直接{}也可以
  • Alt+insert快捷键可以生成构造器

创建对象内存分析

在这里插入图片描述

封装详解

  • 该露的露,该藏的藏
  • 高内聚(类的内部数据操作细节自己完成,不允许外部干涉)
  • 低耦合(暴露少量的方法给外部使用)
  • 属性私有,get/set
  • 一般都是属性私有,然后提供一些公有方法可以设置这些属性
  • 意义
    – 提高程序安全性,保护数据
    – 隐藏代码实现细节
    – 统一接口
    – 系统可维护性增加了

继承详解

  • 继承本质是对某一批类的抽象(对类的抽象),从而实现对现实世界更好的建模
  • extends的意思是拓展,子类是父类的拓展
  • java只有单继承,没有多继承
  • 类之间的关系除了继承,还有依赖,组合,聚合
  • 继承关系的两个类中,一个是父类,一个是子类
  • 子类与父类之间,从意义上讲,应该具有“ is a ”的关系
  • 子类继承父类,就会拥有父类的属性和方法
  • object是所有类的老爹,所以有很多的方法,默认的

super详解

  • super 调用父类的方法
  • this 调用所用的子类的方法和变量
  • 私有的方法不被继承
  • 没有声明,默认用子类的
  • 构造子类对象的时候,隐形之中也构造了父类(隐藏代码super(),而且在子类代码的第一行)
  • 父类有参的话,子类必须传参才能调用父类构造方法
  • super和this不能同时调用构造方法
  • this没有继承也可以使用,但是super只有继承关系才可以用

方法重写

方法重写实现多态
重写都是方法的重写,和属性无关
父类可以构造子类对象,方法都有static时,方法从属于对象的类型
方法没有static时,从属于对象,因为子类重写了父类的方法,因此没事不要乱写static方法
重写只跟非静态方法有关,而且关键词只能是public

  • 重写需要有继承关系,子类重写父类的,方法名必须相同,参数列表必须相同,方法体不同
  • 修饰符范围可以扩大,但是不能变小;抛出的异常范围可以被缩小,但是不能扩大
  • public>protected>default>private
  • ClassNotFoundException<Exception
  • 为什么需要重写?
  • 子类不一定需要/满足父类的方法

什么是多态

可以实现动态编译
定义:同一方法根据发送对象的不同而采用不同的行为方式

  • 一个对象的实际类型是确定的,引用类型不一定,父类的引用指向子类
  • 引用类型 名字=new 实际类型();
  • 对象能执行哪些方法主要看左边,如果父类型对象可以指向子类,但是不能使用子类独有的方法,如果非要用会强制转换到子类类型
  • 父类引用指向子类,子类引用不能指向父类

多态是方法的多态,属性没有多态
没有关系,强制转换会出错
多态存在的条件:继承关系,方法重写

无法重写的情况:
static 属于类,不属于实例
final 常量
private 方法,私有

instanceof和类型转换

instanceof判断某个对象和某个类型有没有关系
类型转换可以理解为子类范围方法比较多,父类要使用子类方法,一定要强制转换为子类才可以用子类的独有方法;但是父类方法比较少,子类使用父类不需要转换
子类转为父类可能丢失部分方法

static关键字详解

静态方法一直存在,非静态需要打开,static 可以扩大使用范围
匿名代码块需要调用,静态代码块一直存在(只执行一次),可以设置初始值

抽象类

抽象类的所有方法交给子类实现
抽象类不可以new,只能被继承,被实现
抽象类可以写普通方法
抽象方法必须在抽象类中
思考:抽象类有构造器吗?抽象类存在的意义?
节省代码,提高开发效率

接口定义和实现

类是单继承的,但是接口是多继承的

  • 普通类只有具体实现
  • 抽象类有具体实现和规范
  • 接口只有规范,自己写方法,专业的约束,实现约束和实现分离,(面向接口编程)

接口的本质:接口就是规范,契约,是一组规则
接口的声明是Interface
接口中的所有定义都是抽象的

如果类实现接口,就要重写接口中的方法
接口可以有属性,但要是常量,不经常用
接口没有实例化,没有构造方法

N种内部类

内部类就是一个类中再定义一个类,相对于内部类的概念就是外部类,A中定义B,B是A的内部类,A是B的外部类

  • 成员内部类:可以拿到外部类的私有属性
  • 静态内部类:外部类的static属性才可以被static内部类拿到
  • 一个文件可以有多个class,但是只能有一个public的class
  • 局部内部类
  • 匿名内部类

异常

error和exception

异常指的是运行过程中不期而至的各种状况
异常发生在程序运行期间,影响了正常的程序执行流程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以下情况通常是程序员的错误
在这里插入图片描述
不处理异常,可能不能编译,大多数情况不需要自定义异常
大多数异常可以被程序处理

捕获和抛出异常(异常的处理)

五个关键字:try、catch、finally、throw、throws

try{//监控区域
}catch(捕获的某种异常,异常有多种可能,就用throwable大佬或者exception){
处理方法
}catch(){
}catch(){//提供捕获多种异常//越大的异常放越后面
}finally{
有没有异常都会执行的工作
}
(finally可选项,通常用于善后工作,关掉IO流等)
//快捷键Ctrl+Alt+T
//打印错误栈信息

知道什么情况下会出错,可以主动抛出异常,一般在方法中使用
方法中处理不了,可以在方法上声明抛出异常throws

自定义异常

在这里插入图片描述
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值