目录
一.基本概念
1.面向对象的世界观
世界是由各种各样的具有自己独特的运动规律和内部属性的对象组成,不同对象之间互相作用和通讯就形成了缤纷的世界。
我们小时候做的数学题在解题时,就是面向过程,我们是通过形状和特征来分辨是什么物品,就像小时候我们上课时的投影仪的遥控器,遥控器就是一个对象,通过按钮,就可以进行一些操作,但是我们不了解到底是如何制作出来到的,只有生产他的人知道是怎么制作出来的,他将复杂的东西封装起来,让大家用简单的方法就可以使用。我们人是通过面向对象的方式来认识世界的,我们在开发程序时是通过面向过程的思维开发程序的,Java语言之所以流行,因为Java语言是完全的面向对象。
2.类与对象
概念:类是用来封装数据,及时处理这些数据方法。类是抽象的,对象是具体的。
对象:
何为对象嘞,其实我们生活中人,车,狗就是对象,看的见摸得着的就是对象 。
我们通过类来创建对象,用new关键字,对象是类产生出来的实例。
类:
我们将一些对象的共同属性和方法抽取出来,形成了类,类是对象的模板。
【精髓】学会把我们自己创建的类看作是一种数据类型!!!
- 建模: 对象---->(抽象)---->类 (建模就是将对象里面的共同属性抽出来形成一个类,就是 建模)
- 实例: 类----->(创建)----->对象 (实例其实相当于Stundent s =new Stundet,就是new)
- 类变量:static(静态)修饰的变量成员变量。我们在一个类中写了一个静态方法,那么只需要通过类名点方法就可以使用啦。
- 实例变量:没有static(静态)修饰的变量成员变量。我们需要先将该类实例化出来,在通过实例出来的对象调用方法。
static 静态
static属于类的东西,出生早于对象,所以即便没有创建对象,也可以调用静态方法。
- static加在变量前,变成静态变量;
- static加在方法前,变成静态方法;
加了static的变量和方法,除了对象实例化后可调用外,还可以直接通过类调用。
部分规则:
1、静态方法可以直接通过类名调用,任何的对象名(实例)也都可以调用。
2、静态方法中不能用this和super关键字
3、不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。
static静态与非静态区别:
非静态的只能用对象名调用, 静态的既能用对象名来调用,又能用类名来调用
静态方法:
public static void getCon(){ }
重点:
类中的static块: 在类加载完成,进行初始化时执行,且整个生命周期只被执行一次,一般的可用于资源初始化。
可能大家不知道什么是代码块,但是我们肯定是运用过的,比如我们的DBHeper类中,获取加载驱动,我们就是在外面套了一个static块,让他只被执行一次。
static { try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { e.printStackTrace(); } }
修饰符:
public 访问权限修饰词 abstract 抽象类,不能实例化对象 final 最终类,不能有子类
3.继承
继承的作用?
- 将重复的代码抽取到公共类(父类),让他的子类来调用里面的方法,减少代码量。
- 多态(同一种行为在不同的对象上表现出来的不同的形态)
格式:继承单词extends
public class 子类名 extends 父类{}
注:java中不允许多继承,但是可以多实现。
4.方法中的重载和重写
重载(静态多态)
同名不同参,一个类里面可以有两个同名的方法,但是里面的参数可以不同。
重写
1、当子类对于父类的不满意,可以补充,则直接重写父类的方法。
2、删除重写中的super.方法();就是全部推翻父类写法。
3、注意:子类的方法名、返回值、参数必须要与父类保持一致,而访问修饰符只能比父类的要高或者相等
4、重写的方法是否可以重载?可以
修饰符及作用域
作用域 当前类 同一包 子孙 其他包 public(公开) √ √ √ √ protected(受保护的)
√ √ √ ×
friendly(友好的) √ √ × × private(私有的) √ × × ×
5.抽象类
抽象:abstract 加在类或方法前面变成抽象类、抽象方法。
抽象类
不能被实例化,只能作为其它类的基类(父类)。
抽象方法
--没有方法体;
--必须在子类中被实现(重写),除非子类也是抽象类;
--抽象方法必须位于抽象类中。(换句话说:抽象方法一定要在抽象类中,抽象类中不一定所有的方法都是抽象方法)
抽象方法的由来:只规定对象的行为,不负责实现。(比如猪吃的方法,狗也有吃的方法,基类中写个吃的方法,但是吃什么就不管了。)
6.接口
语法:public interface 接口名
实现多个: public class 类名 implements 接口名1,接口名2...
接口表示的其实是一种能力,接口是对类的抽象(不理解就记下)。
接口里全部都是抽象方法,其它类在实现接口时,都要对接口中的方法进行重写。
注:接口无法被实例化
7.多态
多态:同一种行为在不同的对象上表现出来的不同的形态。
使用多态实现思路:
1.编写父类
2.编写子类,子类重写父类方法
3.运行时,使用父类的类型,子类的对象
8.异常
强制异常(受检异常): Exception,即在方法的声明中声明的异常。
非强制异常(非受检异常):RuntimeException,即在方法的声明中不声明的异常。
二.oop设计原则
1.里氏替换原则
里氏替换原则:子类应当可以替换父类并出现在父类能够出现的地方,是多态的基础。
例如:person是man和women的父类,man和women是person的子类,那么使用里氏替换原则如下
person p1=new man();
person p2=new women();
2.开闭原则
- 开闭原则是所有原则的总目标,即所有原则最终都是为了走向开闭原则
- 开闭原则简单来说就是指对扩展开放,对修改关闭,即在添加新功能时不需要修改源代码,他人可以直接使用却不能进行修改
- 开闭原则不修改源代码,减少了bug的引入,易维护,易定位错误(加入的代码中)
3.迪米特原则(最少知识原则)
- 只与你的直接朋友交谈,不与"陌生人"说话。
优点:其目的是降低类之间的耦合度,提高模块的相对独立性
缺点:过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性
4.单一职责原则(DIP)
- 类不要承担太多的功能,职责要单一
- 如果承担太多功能,则每个功能的变化都会影响该类
5.接口分离原则(ISP)
- 客户端不应依赖它不需要的接口
- 可以理解为接口要符合单一职责原则
什么是单一职责?
就是该接口他只负责该事情,不负责过多的事情。
6.依赖倒置原则
- 高层模块不应该依赖底层模块,二者都应该依赖抽象
- 抽象不依赖于具体,具体依赖于抽象
- 中心思想是面向接口编程
细节的东西往往是多变的,而越抽象则越稳定
今天的学习就到这里啦,今天主要就是一些java入门基础的一些讲解。