zoukankan      html  css  js  c++  java
  • 面向对象基础小结

    1.量化:我们最终是要对一个事物进行量化。
         连续型:一个连续的值,数不过来
         离散型:一个可以数的过来的值
        
    2.分类的过程
         1)属性(特征):状态信息
         2)方法(行为):无法量化的一个过程

    3.类:一个抽象的概念,是对事物的划分,不是具体的东西。
         类是具有相同属性和方法的一组对象的集合。
         类是对象的抽象,对象是类的具体。
    4.对象:一个实实在在存在的东西,是一个你看得见摸得着的东西,是一个你能指名道姓的东西,是一个一说你就知道具体是什么的东西。
        
    5.从编程角度来讲:
         类:是一个文件
             一个.java文件
             用class来声明类
             类的首字母必须大写
         对象:程序中的一个数据
             对象也是一种变量,叫引用类型变量
             对象的声明过程,完全符合一般变量的声明过程。【new +构造():真正的对象】
           

    程序中区分不同的个体,或者如何描述个体的特征:
         属性:对象具有的各种特征,静态的。
         方法:描述对象执行的操作。动态的。
         --由一组属性和方法构成,描述客观存在的一个“实体”(对象)
         --具有相同属性和方法的一组对象的集合,类是对象的抽象化描述,对象是类的具体实例。(类)
        
    对象和类是面向对象编程的核心。
         -所有的java程序都是以类class为组织单元,一个Java文件就是一个类。
         真正执行程序时通过类的具体化对象来完成的。
        
    方法调用注意:
         基本数据类型传递变量的值
         引用数据类型传递是地址

    结构化开发:面向过程
         面向功能划分的软件结构
         从上到下,按步执行
         最小的粒度是方法
         步骤繁琐,制约了软件的可维护性和可扩展性
         代码一次成型,后续修改非常麻烦
        
    面向对象开发
         把软件系统看成各种对象的集合
         系统结构稳定
         子系统相对独立
         软件较好的可维护性,可扩展性强
        
    面向过程编程:
         关注点在于每一个细节,每一步的具体操作。
    面向对象:
         关注点在于整个事件的参与对象,将系统中的参与者全部看成模块化的对象。
        
    面向对象程序设计:OOP
         编程思想,思维模式:将程序中的所有参与者模块化为对象,然后通过各种对象之间的相互作用关系来完成程序的需求。
    类:对象的模板,抽象化的对象    如:Scanner工具类
    对象:类的具体实例化

    方法:
            void:关键字
            有值:声明一个类型
            如果返回值不是void,那么在方法当中,必须执行一次,也之恩那个执行一次return
             return执行之后,后面的代码会报错!

    1. 修饰符 返回值类型 方法名(形参列表){方法体}
             形参列表:形参是指,传递给方法的参数类型。
             实参:调用的时候,具体传递值。
             参数传递:
                 实参和形参的个数要对应
                 类型位置要一一对应
                 形参属于局部变量
            
             ***不定长参数:
                 形参的定义方式:类型 ... 变量名
                 实参的传递:类型统一,个数随意(0-n)
                 不定长参数处理,当成一个数组处理。
                 一个参数列表中,不定长参数只能有一个,而且只能放最后
                 一般来说:不定长参数用的不多。--Java中没有默认值!

         2.地址传参******
             什么是地址?           
                 实例化对象后————new(),就是新的对象。
                 如果是对象之间的赋值,那么赋值的是堆内存的地址。
                 在使用引用数据类型之前,请务必做好空值判断。
             引用传参
                
         3.构造方法:
             1.构造方法:描述一个对象的生成过程
             2.虚拟机默认会添加无参构造;如果显示声明过,则会覆盖。

         4.无论是构造方法,还是普通方法,都可以重载。
            
             在方法当中,直接调用变量名,优先取局部变量!
        
        This关键字:-->计算机组成等等底层的重要性!
             这方面未来有希望!!!(突破基础理论+应用)
           
             this:当前对象本身
                 --理解:this.wait()
                       this.notifyAll()
             this()只能写在第一行————只能调用一次构造。
         作用域:
             1.代码块:写在一对花括号中间的。
             2.Java的作用域,叫块级作用域
             3.成员变量:直接卸载类当中,也叫:全局变量,处于犬奴作用域当中。
             4.局部变量:在方法当中(包括构造函数,静态代码块中)
             5.里面可以调用外面的,外面不可以调用里面的,平级之间按相互不干扰。
             6.成员变量会有初值:参考数组
             7.局部变量没有初值,必须初始化!!!
             8.局部变量不可以有访问修饰符*****
             9.局部变量的优先级是高于全局变量的
            

    封装

    封装:将类的某些信息隐藏在类的内部,不允许外部程序直接访问;
             外部只能通过该类提供的特定方法来实现对隐藏信息的操作和访问。
             如何实现封装:
                 1.修改属性的访问权限,设置为private(私有)
                 2.创建共有public的getter和setter方法
                     getter:让外部来获取属性的方法
                     setter:让外部来修改属性的方法
                 3.setter方法中加入属性控制语句,以确保属性的正确性和合理性。


    static修饰符:静态修饰符
             1.成员变量——静态变量,通过类名直接调用
             2.成员方法——静态方法,通过类名直接调用
             3.代码块:写在类中,方法之外,并且用{}包裹起来的一段代码。
                 当程序中访问该类时,自动执行代码块中的语句。
             JVM加载该类时,执行该代码块,只执行一次。
            
             --用static修饰的成员变量也叫做类变量,表示该变量不再属于某个对象,而是属于该类,所有的对象共享该属性。(内存中只有一份)
             实例变量——不用static修饰
            
         静态方法:
             1.不能访问非静态方法、属性
             2.不能使用this关键字(实例化对象)

        ---静态关键字描述的是一种共有的信息,不属于任何一个实例对象,属于类,被所有的实例对象所共用。
         类的构造函数:给成员变量赋值,初始化
         类的静态代码块:给静态变量赋值   

    继承

    protected:同包 和 子类可见
    不写(默认的):同包可见
    private:同类可见

    -最终类,不可被继承
    -最终方法,不可被重写

    继承:子类对父类的继承
         父类:
         子类:使用extends继承父类,除了私有和父类构造以外的所有成员。

    单根继承原则:每个类,只能有一个直接的父类。

    this:对象本身
    super:代表父类对象(包含 继承链上的所有)对象
         -super可以调用父类的构造、属性和方法。
        
         1.默认情况下,子类构造将默认调用父类的空参构造 。
         2.如果父类没有空参构造,则子类需指定(显示)调用某个构造。
         -如果不在同一个包里,默认的成员则无法继承,但是可以继承protected的成员;
         -如果在同一个包里,则除了私有以外,都可以继承。
        
         3.使用this和super可以用来区分:父类和子类当中的成员。
             如果该成员是继承来的,那么也可以使用this来调用。
         4.为了防止父类和子类属性之间的相互污染。【属性】
        
         5.如果说,在子类当中不满足父类的某个方法,需要对该方法进行修改或补充,那么可以通过方法重写来实现。
             -当子类重写了父类的某个方法后,子类调用重写后的方法;父类调用原本的方法。
             -当父类当中有某个成员方法被多次重写,那么子类优先调用最近的那个!
            
             -构造方法不能被重写
             -重写可以理解为“覆盖”
              --访问权限不能严于父类。
              --返回值和父类相同,或者是父类返回值的子类。
              --参数列表相同
              --方法名一样
              --重写是父子之间。
             
         **父类当中的静态方法不能被子类覆盖为非静态;父类中非静态不能被覆盖为静态。
           ---实际应用当中:重写就是子类重写父类当中同样的方法。

    实例化对象问题!
             --初始源头   
             -实例化一个子类对象时,一定会优先实例化其父类对象。
                 并且实例化父类对象的操作是系统自动完成的,不需要我们自己编写代码!
                     --super()默认存在,不需要显示调用,跟无参构造相同。默认存在,不需要显示定义。
                         如果显示调用,super()必须写在第一行,否则语法报错。       
             -在子类中可以使用super调用方法,也可以访问属性,只能访问父类的公有的信息(包括间接父类),私有是无法访问的。


            子类的构造函数中可以通过super来访问父类的所有公有信息(属性、方法、构造方法)
             子类的普通方法中通过super可以访问属性和方法,但是不能调用构造方法。

    Java中的每一个类,都是一个子类(Object除外),但 不是每一个类都是父类。

    super 与 this的区别:
         相同点:super和this都可以访问类中的属性、方法、构造方法
             super、this访问构造方法时,必须写在第一行。
             super、this访问构造方法时,必须写在构造方法中!
         不同点:super时子类访问父类,维护两个类之间的关系。&& this是自己访问自己,维护一个类的关系。
             super 不能访问私有属性和方法,this可以访问私有属性和方法。


    通过无参构造创建子类对象时
         -子类无参构造默认调用父类的无参构造。
         -手动调用父类的有参构造,会将默认的无参构造覆盖
    通过有参构造创建子类对象时
         -子类有参构造默认调用父类的无参构造 ****
         -手动调用父类的有参构造,会将默认的无参构造覆盖

    多态:同一个引用类型,因为实例不同,表现的形式也不同。

    向上转型:父类声明指向子类对象。
         1.向上转型:父类声明
            (1)只能调用子类重写的方法,
             (2)或者本身实现,没有被子类覆盖的方法。

             ---子类特有的方法无法被调用,
             ?强转一下,应该可以?
             (3)向上转型,属于自动类型转换。
             **多个子类实现重写的方法,优先调用距离实现类最近的!
         2.向下转型:强制将父类型变为子类型。
             (1)前提:向上转型后,才能向下转型。
             (2)向下转型之前,一定要判断实例的类型。// class cast exception
             (3)向下转型属于强制类型转换!

    多态——业务需求,频繁更改代码,可维护性、可扩展性比较差的问题
         :一个事物,多种表现形式。
         多态在实际使用中,需要建立继承关系,建立接口和实现类的关系。 *****
        
    继承和方法重写是实现多态的基础。
         1.定义方法形参(形式参数)的数据类型为父类;实际调用为传入子类的实参
         2.定义方法时,返回值类型为父类,外部调用该方法时使用子类接收

    多态衍生:抽象类

    抽象类不能在外部实例化!!!
             --但是可以通过实例化继承子类,自动实现实例化抽象类。

    没有抽象的构造方法,也没有抽象的静态static 方法。
    抽象类中可以包含非抽象的构造方法,    创建子类实例对象时可以调用。


    面向对象编程
         开发期间:类是构成Java程序的单位,Java程序通过类来组织其结构
         运行期间:对象是Java程序在运行时的单位,运行期间的Java程序是通过多个对象之间的相互作用关系来完成需求,动态。
        
    null:空指针,内存地址的一个值,指空,不存在。
    垃圾回收机制GC:是一个独立的巡查线程,GC是一个定时任务,隔一段时间执行一次。

    基本数据类型在栈内存中开辟空间,同时直接将具体数值(而不是地址)保存在栈中
         --int numb = null;报错
    引用类型在栈中开辟空间,同时在堆中开辟空间,创建对象,将对象地址保存在栈中。

    抽象类

    在class前加关键字abstract,用于表示当前类为抽象类。

          
         **在抽象类中,可以有普通方法,也可以有抽象方法。
             -抽象方法之只能在抽象类当中声明。
             -在修饰符和返回值之间,添加关键字 abstract,抽象方法没有方法体。
             -不需要立即实现。
            
         ***没有抽象的属性
         抽象类不可被实例化
         抽象方法必须在子类当中被实现,除非子类也是抽象类。
         ——在抽象类的子类当中,只要有一个子类实现了抽象方法,其后代不必一定实现该抽象方法。
        
         抽象类可以有构造?
         -原理:
             抽象类的构造函数用来初始化抽象类的一些字段,
             而这一切都在抽象类的派生类实例化之前发生。
             不仅如此,抽线类的构造函数还有一种巧妙应用:就是在其内部实现子类必须执行的代码。

    综合应用——面向接口编程

    面向接口编程是常见的一种开发方式。
         -面向接口编程就是将程序的业务逻辑提取出来,以接口的形式去对接不同的业务模块,接口只串联不实现,真正的业务逻辑交给接口
             的实现类来完成,当用户需求发生变更时,只需切换不同的实现类即可。
         (连接松散,低耦合)
        
    “低耦合---高内聚”
         低耦合:降低模块之间的链接的紧密程度,模块之间是一种非常松散的状态,利于维护和扩展。
         高内聚:将相关的业务逻辑尽量集中到一个模块中。
        
    面向接口编程的优点:
         1.能够最大限度地解耦,降低程序地耦合性
         2.使程序易于扩展
         3.有利于程序的后期维护

    如何使用接口:
         默认都是抽象方法,abstract可省略;
         接口中可以定义成员变量,但是有如下要求:
             1.不能定义private、protected的权限修饰符,可以使用public 、默认修饰的成员变量
             2.成员变量必须被初始化(final***)
             3.接口中的成员变量必须是静态static,同时该成员变量还必须是一个常量!
             (static final都可以省略)

    成员变量:定义在类中,方法体外的变量,属性。   
    局部变量:定义在方法提中的变量
    区别:
         1.作用域不同:变量的使用范围
             局部变量仅限于定义它的方法中,方法外无法访问。
             成员变量的作用域在整个类中都是可见的。
        
         2.初始值不同
             属性、成员变量都有一个初始值,初始值根据属性的数据类型来决定。
             基本数据类型:byteintshortlong :0
             char:' '
             boolean:false
             String引用类型:null

    方法重载:(方法允许重名)
         1.同一个类 ***
         2.方法名相同
         3.参数列表不同,个数、数据类型不同
         4.与返回值、访问权限无关。

    == 和 equals()的区别?
         ==:栈内存中的值是否相等
             如果数据是基本数据类型,比较的是数据的值是否相等,
             如果是引用类型,比较的是引用地址(数据的内存地址是否相等)
         equals():Object类中定义的一个方法,默认方法体是通过==进行判断的(只能使用引用数据类型进行调用)
             默认是比较数据的内存地址
             重写,按照实际。(equals()方法经常会被Object的子类进行重写,比较典型,
                 String类中的重写--字符串的值是否相等进行判断,改为判断String的数组内容进行比较)

    switch(num):num为除long型以外的整数+String(jdk>7)+char
         --switch{},为独立的作用域
             --无需依次比较,一次找到目标
         --default:当所有条件都不满足的时候,执行default
             可以有,也可以没有;可放置在任意位置;
                 -习惯放在首位、末尾,如果不在末尾需要加break;

    循环:
         四大要素:
             初始化变量
             判断条件
             循环体
             迭代:无限趋近目标       

  • 相关阅读:
    使用Jenkins自带功能(不用shell)构建Docker镜像并推送到远程仓库
    方法2:使用Jenkins构建Docker镜像 --SpringCloud
    在jenkins中使用shell命令推送当前主机上的docker镜像到远程的Harbor私有仓库
    解决跟Docker私有仓库登陆,推送,拉取镜像出现的报错
    Linux 内存占用大排查
    方法1:使用Jenkins构建Docker镜像 --SpringCloud
    使用Jenkins编译打包SpringCloud微服务中的个别目录
    使用Jenkins的Git Parameter插件来从远程仓库拉取指定目录的内容
    稀疏检出-使用git检索出仓库里的某一个目录文件,而不是整个仓库的所有文件
    通过 Kubeadm 安装 K8S 与高可用,版本1.13.4
  • 原文地址:https://www.cnblogs.com/macro-renzhansheng/p/12539014.html
Copyright © 2011-2022 走看看