java复习笔记

什么是面向对象

  1. 面向过程有什么缺点?(耦合度高,扩展力差。)

              面向过程最主要是每一步与每一步的因果关系,其中A步骤因果关系到B步骤,              A和 B联合起来形成一个子模块,子模块和子模块之间又因为因果关系结合                在一起,假设其中任何一个因果关系出现问题(错误),此时整个系统的运转               都会出现问题。(代码 和代码之间的耦合度太高,扩展力太差。)

              螺栓螺母拧在一起:耦合度高吗?

              这是耦合度低的,因为螺栓螺母可以再拧开。(它们之间是有接口的。)

              螺栓螺母拧在一起之后,再用焊条焊接在一起,耦合度高吗?

              这个耦合度就很高了。耦合度就是黏连程度。

              往往耦合度高的扩展力就差。

                           

              耦合度高导致扩展力差。(集成显卡:计算机显卡不是独立的,是集成到主上的)

              耦合度低导致扩展力强。(灯泡和灯口关系,螺栓螺母关系)

                    

  1. 采用面向过程的方式开发一台计算机会是怎样?

              这台计算机将没有任何一个部件,所有的都是融合在一起的。

              你的这台计算机是一个实心儿的,没有部件的。一体机。

              假设这台一体机的任何一个“部位”出问题,整个计算机就不能用了,

              必须扔掉了。(没有对象的概念。)

  1. 向过程有什么优点?(快速开发)

              对于小型项目(功能),采用面向过程的方式进行开发,效率较高。

              不需要前期进行对象的提取,模型的建立,采用面向过程

              方式可以直接开始干活。一上来直接写代码,编写因果关系。

              从而实现功能。

  1. 什么是面向对象的开发方式?

              采用面向对象的方式进行开发,更符合人类的思维方式。(面向对象成为主流的原              因)

              人类就是以“对象”的方式去认识世界的。

              所以面向对象更容易让我们接受。

              面向对象就是将现实世界分割成不同的单元,然后每一个单元都实现成对象,然              后给一个环境驱动一下,让各个对象之间协作起来形成一个系统。

  1. 当我们采用面向对象的方式贯穿整个系统的话,涉及到三个术语:

             OOA:面向对象分析

              OOD:面向对象设计

              OOP:面向对象编程

              整个软件开发的过程,都是采用OO进行贯穿的。

  1. 实现一个软件的过程:

              分析(A) --> 设计(D) --> 编程(P)

  1. 面向对象当中最主要“一词”是:对象。
  2. 什么是类?

        类实际上在现实世界当中是不存在的,是一个抽象的概念。

        是一个模板。是我们人类大脑进行“思考、总结、抽象”的一个

        结果。(主要是因为人类的大脑不一般才有了类的概念。)

        类本质上是现实世界当中某些事物具有共同特征,将这些共同

        特征提取出来形成的概念就是一个“类”,“类”就是一个模板。

        明星是一个类

  1. 什么是对象?

        对象是实际存在的个体。(真实存在的个体)

        宋小宝就是一个对象

        姚明就是一个对象

        刘德华就是一个对象

        ....

        宋小宝、姚明、刘德华这3个对象都属于“明星”这个类。

   

  1. 在java语言中,要想得到“对象”,必须先定义“类”,“对象”是通过“类”这个模板创造出来的。

        类就是一个模板:类中描述的是所有对象的“共同特征信息”

        对象就是通过类创建出的个体。

   

  1. 这几个术语你需要自己能够阐述出来:

        类:不存在的,人类大脑思考总结一个模板(这个模板当中描述了共同特征。)

        对象:实际存在的个体。

        实例:对象还有另一个名字叫做实例。

        实例化:通过类这个模板创建对象的过程,叫做:实例化。

        抽象:多个对象具有共同特征,进行思考总结抽取共同特征的过程。

  1. 为什么属性是“以”变量的形式存在的?

        假设我们要描述一个学生:

            学生包括哪些属性:

                学号: 110

                姓名:"张三"

                性别:'男' (true/false)

                住址:"深圳宝安区"

        答案:是因为属性对应的是“数据”,数据在程序中只能放到变量中。

        结论:属性其实就是变量。

  1. 变量的分类还记得吗?

        变量根据出现位置进行划分:

        方法体当中声明的变量:局部变量。

        方法体外声明的变量:成员变量。(这里的成员变量就是“属性”)

在语法级别上是怎么完成对象创建的呢?

       类名 变量名 = new 类名();

       这样就完成了对象的创建。

  1. 什么是实例变量?

              对象又被称为实例。

              实例变量实际上就是:对象级别的变量。

              public class 明星类{

              double height;

              }

       身高这个属性所有的明星对象都有,但是每一个对象都有“自己的身高值”。

       假设创建10个明星对象,height变量应该有10份。

       所以这种变量被称为对象级别的变量。属于实例变量。

       实例变量在访问的时候,是不是必须先创建对象?

  1. 对象和引用的区别?

              对象是通过new出来的,在堆内存中存储。

              引用是:但凡是变量,并且该变量中保存了内存地址指向了堆内存当中的对象的。

 this extend

  1. this

    1.1、this是一个关键字,是一个引用,保存内存地址指向自身。

    1.2、this可以使用在实例方法中,也可以使用在构造方法中。

    1.3、this出现在实例方法中其实代表的是当前对象。

    1.4、this不能使用在静态方法中。

    1.5、this. 大部分情况下可以省略,但是用来区分局部变量和实例变量的时候不能省略。

    1.6、this() 这种语法只能出现在构造方法第一行,表示当前构造方法调用本类其他的

    构造方法,目的是代码复用。

  1. 总结所有的变量怎么访问,总结所有的方法怎么访问!!!!

总结一下到目前为止我们在一个类中都接触过什么了。

  1. 继承extends

    3.1、什么是继承,有什么用?

        继承:在现实世界当中也是存在的,例如:父亲很有钱,儿子不用努力也很有钱。

        继承的作用:

            基本作用:子类继承父类,代码可以得到复用。(这个不是重要的作用,是基本作用。)

            主要(重要)作用:因为有了继承关系,才有了后期的方法覆盖和多态机制。

   

    3.2、继承的相关特性

        ① B类继承A类,则称A类为超类(superclass)、父类、基类,

        B类则称为子类(subclass)、派生类、扩展类。

            class A{}

            class B extends A{}

            我们平时聊天说的比较多的是:父类和子类。

            superclass 父类

            subclass 子类

        ② java 中的继承只支持单继承,不支持多继承,C++中支持多继承,

        这也是 java 体现简单性的一点,换句话说,java 中不允许这样写代码:

            class B extends A,C{ } 这是错误的。

        ③ 虽然 java 中不支持多继承,但有的时候会产生间接继承的效果,

        例如:class C extends B,class B extends A,也就是说,C 直接继承 B,

        其实 C 还间接继承 A。

        ④ java 中规定,子类继承父类,除构造方法不能继承之外,剩下都可以继承。

        但是私有的属性无法在子类中直接访问。(父类中private修饰的不能在子类中

        直接访问。可以通过间接的手段来访问。)

        ⑤ java 中的类没有显示的继承任何类,则默认继承 Object类,Object类是

        java 语言提供的根类(老祖宗类),也就是说,一个对象与生俱来就有

        Object类型中所有的特征。

        ⑥ 继承也存在一些缺点,例如:CreditAccount 类继承 Account 类会导致它

        们之间的耦合度非常高,Account 类发生改变之后会马上影响到 CreditAccount 类

  1. 使用static关键字可以定义:静态代码块
  2. 什么是静态代码块,语法是什么?

              static {

                     java语句;

                     java语句;

              }

  1. static静态代码块在什么时候执行呢?

              类加载时执行。并且只执行一次。

              静态代码块有这样的特征/特点。

  1. 注意:静态代码块在类加载时执行,并且在main方法执行之前执行。

  1. 静态代码块一般是按照自上而下的顺序执行。

  1. 静态代码块有啥作用,有什么用?

       第一:静态代码块不是那么常用。(不是每一个类当中都要写的东西。)

       第二:静态代码块这种语法机制实际上是SUN公司给我们java程序员的一个特殊的时刻/时机。

       这个时机叫做:类加载时机。

       具体的业务:

              项目经理说了:大家注意了,所有我们编写的程序中,只要是类加载了,请记录一下

              类加载的日志信息(在哪年哪月哪日几时几分几秒,哪个类加载到JVM当中了)。

              思考:这些记录日志的代码写到哪里呢?

                     写到静态代码块当中。

  1. 回顾一下方法重载!!!

              什么时候考虑使用方法重载overload?

              当在一个类当中,如果功能相似的话,建议将名字定义的一样,这样

              代码美观,并且方便编程。

             

              什么条件满足之后能够构成方法重载overload?

                     条件一:在同一个类当中

                     条件二:方法名相同

                     条件三:参数列表不同(个数、顺序、类型)

               Public void test(string i)

              Public void test(int i)

              构成重载

  1. 重要的结论:

              当一个构造方法第一行:

                     既没有this()又没有super()的话,默认会有一个super();

                     表示通过当前子类的构造方法调用父类的无参数构造方法。

                     所以必须保证父类的无参数构造方法是存在的。

       在父和子中有同名的属性,或者说有相同的方法,

       如果此时想在子类中访问父中的数据,必须使用“super.”加以区分。

       super.属性名    【访问父类的属性】

       super.方法名(实参) 【访问父类的方法】

       super(实参)  【调用父类的构造方法】

 多态向下转型

  1. 在实际开发中,满足什么条件的时候,我可以使用继承呢?

        凡是采用“is a”能描述的,都可以继承。

        例如:

            Cat is a Animal:猫是一个动物

            Dog is a Animal:狗是一个动物

            CreditAccount is a Account:信用卡账户是一个银行账户

            ....

       

        假设以后的开发中有一个A类,有一个B类,A类和B类确实也有重复的代码,

        那么他们两个之间就可以继承吗?不一定,还是要看一看它们之间是否能够

        使用is a来描述。

  1. 方法覆盖

   

    2.1、什么时候考虑使用方法覆盖?

        父类中的方法无法满足子类的业务需求,子类有必要对继承过来的方法进行覆盖。

    2.2、什么条件满足的时候构成方法覆盖?

        第一:有继承关系的两个类

        第二:具有相同方法名、返回值类型、形式参数列表

        第三:访问权限不能更低。

        第四:抛出异常不能更多。

    2.3、关于Object类中toString()方法的覆盖?

        toString()方法存在的作用就是:将java对象转换成字符串形式。

        大多数的java类toString()方法都是需要覆盖的。因为Object类中提供的toString()

        方法输出的是一个java对象的内存地址。

        至于toString()方法具体怎么进行覆盖?

            格式可以自己定义,或者听需求的。(听项目要求的。)

    2.4、方法重载和方法覆盖有什么区别?

        方法重载发生在同一个类当中。

        方法覆盖是发生在具有继承关系的父子类之间。

        方法重载是一个类中,方法名相同,参数列表不同。

        方法覆盖是具有继承关系的父子类,并且重写之后的方法必须和之前的方法一致:

            方法名一致、参数列表一致、返回值类型一致。

  1. 多态的基础语法

   

    3.1、向上转型和向下转型的概念。

        向上转型:子--->父 (upcasting)

            又被称为自动类型转换:Animal a = new Cat();

        向下转型:父--->子 (downcasting)

            又被称为强制类型转换:Cat c = (Cat)a; 需要添加强制类型转换符。

            什么时候需要向下转型?

                需要调用或者执行子类对象中特有的方法。

                必须进行向下转型,才可以调用。

            向下转型有风险吗?

                容易出现ClassCastException(类型转换异常)

            怎么避免这个风险?

                instanceof运算符,可以在程序运行阶段动态的判断某个引用指向的对象

                是否为某一种类型。

                养成好习惯,向下转型之前一定要使用instanceof运算符进行判断。

       

        不管是向上转型还是向下转型,首先他们之间必须有继承关系,这样编译器就不会报错。

3.2、什么是多态。

        多种形态,多种状态,编译和运行有两个不同的状态。

        编译期叫做静态绑定。

        运行期叫做动态绑定。

        Animal a = new Cat();

        // 编译的时候编译器发现a的类型是Animal,所以编译器会去Animal类中找move()方法

        // 找到了,绑定,编译通过。但是运行的时候和底层堆内存当中的实际对象有关

        // 真正执行的时候会自动调用“堆内存中真实对象”的相关方法。

        a.move();

        多态的典型代码:父类型的引用指向子类型的对象。(java中允许这样写代码!!!)

    3.3、什么时候必须进行向下转型?

        调用子类对象上特有的方法时。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值