美文网首页
Java面向对象笔记

Java面向对象笔记

作者: 1024号 | 来源:发表于2016-12-02 15:03 被阅读0次

    类和对象

    • 对象的概念
    • 什么是面向对象
    • 什么是对象的属性
    • 什么是对象的方法
    • 类与对象的关系/与区别

    什么是对象

    万物皆对象, 客观存在的事物皆为对象  
    

    什么是类

    类是模子, 确定对象将会拥有的特征(属性)和行为(方法)
    类的特点:
          类是对象的类型
          具有相同的属性和方法的一组对象的集合
    其实类在客观世界里是不存在的, 只是用来描述对象信息
    

    什么是对象的属性

    属性--对象具有的各种特征
           每个对象的每个属性都拥有特定的值
    

    类和对象的关系

    类是抽象的概念, 仅仅是模板, 比如说 : "手机";
    对象是一个能看得到, 摸得着的具体实物
    

    定义类

    1.类的重要性 : 所有Java程序都以类class为组织单元
    2.什么是类?
        类是模子, 确定对象将会拥有的特征(属性)和行为(方法)
    3.类的组成 : 属性和方法
    4.定义一个类的步骤 : 
        a. 定义类名
        b. 编写类的属性
        c. 编写类的方法  
    

    Java对象

    使用对象的步骤 : 
        1. 创建对象 : 
              类名 对象名 = new 类名();
              Telephone phone = new Telephone();
          ps: 类是以代码的形式保存在文件中, 当把文件信息放到内存中, 此时,这些信息的集合就叫对象, 这个过程叫做实例化.
        2. 使用对象
              引用对象啊的属性 : 对象名.属性
              phone.screen = 5; // 赋值
              引用对象的方法 : 对象名 . 方法名();
              phone.send(); // 调用send方法
    

    成员变量和局部变量

    1.成员变量
          在类中定义, 用来描述对象将要有什么
          成员变量可以被本类的所有方法使用, 也可以被与本类有关系的其他方法使用
    2.局部变量
          在类的方法中定义, 在方法中临时保存数据
          只能在本方法中使用
    区别 : 
          1.作用域不同
            局部变量的作用域仅限于定义它的方法
            成员变量的作用域在整个类的内部都是可见的
          2.初始值不同
            Java会给成员变量一个初始值
            Java不会给局部变量赋予初始值
          3.在同一个方法中不允许有同名局部变量
            在不同的方法中, 可以有同名局部变量
          4.两类变量同名时, 局部变量具有更高的优先级
    

    构造方法

    1.使用new + 构造方法 创建一个新的对象
    2.构造方法是定义在Java类中的一个用来初始化对象的方法
        构造方法的类名同名且没有返回值
    3.语法格式
    public 构造方法名() {
      // 初始化代码
    }
    无参构造方法 : 当没有指定构造方法时, 系统会自动添加无参的构造方法
    有参构造方法 : 为了初始化成员变量的值, 当有指定构造方法, 无论是有参, 无参的构造方法, 都不会自动添加无参构造方法
    构造方法的重载 : 方法名相同, 但参数不同的多个方法, 调用时会自动根据不同的参数选择相应的方法
    构造方法不但可以给对象的属性赋值, 还可以保证给对象的属性赋一个合理的值
    

    Java中的static使用之----静态变量

    Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。
    静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问~~
    static 可以修饰变量、方法和代码块
    PS : 静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!~~
    

    Java中的static使用之----静态方法

    1.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。
        如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。
    2.在普通成员方法中,则可以直接访问同类的非静态变量和静态变量
    3.静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。
    

    Java中的static使用之----初始化块

    Java 中可以通过初始化块进行数据赋值
    在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块
    PS : 静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
    程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次
    

    面向对象特性

    1. 封装
    2. 继承
    3. 多肽

    封装

    1.概念 : 
      将类的某些信息隐藏在类内部, 不允许外部程序直接访问, 而是通过该类提供的方法来实现对隐藏信息的操作和访问
    2.好处 : 
      a.只能通过规定的方法访问数据
      b.隐藏类的实例细节, 方便修改和实现
    3.封装的实现步骤 : 
      第一步, 修改属性的可见性---设为private
      第二步, 创建getter/setter方法---用于属性读写
      第三步, 在getter/setter方法中加入属性控制语句---对属性值的合法性进行判断
    

    Java中的包

    1. 包的作用:
        管理Java文件
        解决同名文件冲突
    2. 定义包 : package 包名
        注 : 必须放在Java源程序的第一行
              包名可以用"."号隔开
    3. 系统中的包
        java.(功能).(类)
        java.lang.(类)  包含java语言基础的类
        java.util.(类)  包含java语言中各种工具类
        java.io.(类)  包含输入,输出相关功能
    4. 包的使用
        (1),可以通过import关键字, 在某个文件使用其他文件中的类.
        (2),Java中, 包的命名规范全是小写字母拼写
        (3),使用的时候不但可以加载某个包下的所有文件, 也可以加载某个具体子包下的所有文件
    

    Java中的访问修饰符

    访问修饰符 --- 可以修饰属性和方法的访问范围
    访问修饰符  本类  同包  子类  其他
    private     √
    默认         √     √
    protected   √      √    √
    public      √      √    √    √
    

    Java中的this关键字

    1. this关键字代表当前对象
       this.属性  操作当前对象的属性
       this.方法  调用当前对象的方法
    2. 封装对象的属性的时候, 经常会使用this关键字
    

    Java中的内部类

    1. 概念 : 
       内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类
    2. 作用 : 
       1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
       2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
       3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
    3. 种类 : 
       成员内部类
       静态内部类
       方法内部类
       匿名内部类
    PS : 
       1.外部类是不能直接使用内部类的成员和方法的
         可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。
       2.如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法
         如果要访问外部类的成员变量,可以使用 this 关键字。
    Java 中的静态内部类
       静态内部类是 static 修饰的内部类,这种内部类的特点是:
          1.静态内部类不能直接访问外部类的非静态成员,但可以通过new 外部类().成员的方式访问 
          2.如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;
            如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
          3.创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();
    Java 中的方法内部类
       方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。
       ps : 由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。
    

    继承

    1. 继承的概念 : 
       继承是类与类的一种关系, 是一种"is a"的关系
       ps : Java中的继承是单继承
    2. 继承的好处 : 
       1.子类拥有父类所有的属性和方法
         ps : 属性和方法的修饰符不能是"private"
       2.实现代码复用
    3. 语法规则 : 
       class 子类 extends 父类
    

    方法重写

    1. 什么是方法重写?
       如果子类对继承父类的方法不满意, 是可以重写父类继承的方法的, 当调用方法时会优先调用子类的方法
    2. 语法规则 : 
       a. 返回值类型
       b. 方法名
       c. 参数类型及个数
       都要与父类继承的方法相同, 才叫方法重写
    

    继承的初始化顺序

    1. 初始化父类, 再初始化子类
    2. 先执行初始化对象中属性, 再执行构造方法中的初始化
       eg : 父类对象 ---> 属性初始化 ---> 构造方法 ---> 子类对象 ---> 属性初始化 ---> 构造方法
    

    final的使用

    final关键字
       使用final关键字做标识有"最终的"含义
    final可以修饰类, 方法, 属性和变量
       final修饰类, 则该类不允许被继承
       final修饰方法, 则该方法不允许被覆盖(重写)
       final修饰属性
          则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)
          或者在构造方法中赋值(但只能选其一)
       final修饰变量, 则该变量的值只能赋一次值, 即为常量
    

    super关键字

    super关键字 : 在对象的内部使用, 可以代表父类对象
    1. 访问父类的属性
       super.父类属性;
    2. 访问父类方法
       super.父类方法()
    ps : 子类的构造过程当中必须调用其父类的构造方法
         如果子类构造方法中没有显式调用父类的构造方法, 则系统默认调用父类无参构造方法
         如果显式的调用构造方法, 必须在子类的构造方法的第一行
         如果子类构造方法中既没有显式调用父类的构造方法, 而父类又没有无参构造方法, 则编译出错
    

    Object类

    1. toString()方法
       在Object类里面定义toString()方法的时候,返回的对象的哈希code码(对象地址字符串)
       可以通过重写toString() 方法表示出对象的属性
    2. equals()方法
       比较的是对象的引用是否是指向同一块内存地址
    

    多肽

    概念 : 
       对象的多种形态
    1. 引用多肽
       父类的引用可以指向本类的对象
       父类的引用可以指向子类的对象
       (子类的引用不可以指向父类)
    ps : 继承是多肽的实现基础
    2. 方法多肽
       创建本类对象时, 调用的方法为本类的方法
       创建子类对象时, 调用的方法为子类重写的方法或者继承的方法
    

    引用类型转换

    1. 向上类型转换(隐式/自动类型转换), 是小类型到大类型的转换
    2. 向下类型转换(强制类型转换), 是大类型到小类型
       ps : 向上类型转换(无风险), 向下类型转换(有风险)
    3. instanceof运算符, 来解决引用对象的类型, 避免类型转换的安全性问题
    

    抽象类

    1. 语法定义 : 
       抽象类前使用abstract关键字修饰, 则该类为抽象类
    2. 应用场景 : 
       a.在某些情况下, 某个父类只是知道其子类应该包含怎样的方法, 但无法准确知道这些子类如何实现这些方法
         也就是说抽象类是约束子类必须有哪些方法, 而并不关注子类是如何实现的
       b.从多个具有相同特征的类中抽象出一个抽象类, 以这个抽象类作为子类的模板, 从而避免了子类设计的随意性
    3. 作用 : 
       限制规定子类必须实现某些方法, 但不关注实现细节
    4. 使用规则 : 
       a. abstract定义抽象类
       b. abstract定义抽象方法, 只有声明, 不需要实现
       c. 包含抽象方法的类是抽象类
       d. 抽象类中可以包含普通方法, 也可以没有抽象方法
       e. 抽象类不能直接创建, 可以定义引用变量
    

    接口

    1. 接口概念 :  (是一种规范, 是用来约束类的)
       接口可以理解为一种特殊的类, 由全局常量和公共的抽象方法所组成
       类是一种具体的实现体, 而接口定义了某一批类所需要遵守的规范, 接口不关心这些类的内部数据, 
       也不关心这些类里方法的实现细节, 它只规定这些类里必须提供某些方法
    2. 接口定义 
       和类定义不同, 定义接口不再使用class关键字, 而是使用interface关键字
    接口定义的基本语法 : 
       [修饰符] (abstract 此关键字肯定有, 如果没有,系统会默认加上) interface 接口名 [extends 父接口1, 父接口2...]
       {
         零到多个常量定义...
         零到多个抽象方法的定义...  
       }
       接口就是用来被继承, 被实现的, 修饰符一般建议用public
       ps : 不能使用private和protected修饰接口
    3. 常量 : 
       接口中的属性是常量, 即使定义时不添加 public static final 修饰符, 系统也会自动加上
    4. 方法 : 
       接口中的方法只能是抽象方法, 即使定义时不添加public abstract 修饰符, 系统也会自动加上
    5. 使用接口 : 
       一个类可以实现一个或者多个接口, 实现接口可以使用implements关键字. Java中的一个类只能继承一个父类,
       是不够灵活的, 通过实现过个接口可以做补充
       继承父类实现接口的语法为 : 
       [修饰符] class 类名 extends 父类 implements 接口1, 接口2...
       {
          类体部分  // 如果继承了抽象类, 需要实现继承的抽象方法; 要实现接口中的抽象方法
       }
       如果要继承父类, 继承父类必须在实现接口之前
    使用接口 : 
       接口在使用过程当中, 还经常与匿名内部类配合使用
       匿名内部类就是没有名字的内部类
       多用于关注实现而不关注实现类的名称
    语法格式 : 
       Interface i = new Interface(){
         public void method(){
           ...
         }
       }
    

    相关文章

      网友评论

          本文标题:Java面向对象笔记

          本文链接:https://www.haomeiwen.com/subject/leruyttx.html