Java 基础:面向对象

作者: 千面娇你妹的娃 | 来源:发表于2018-06-10 21:13 被阅读3次

    目录:
    一、 面向对象和面向过程
    二、 类和对象的关系
    三、 成员变量和局部变量
    四、 引用类型的兼容性
    五、 单一职责原则
    六、 代码块
    七、 类的访问控制权限
    八、 Packaging Classes


    一、 面向对象和面向过程

    1. 概述
    • 什么是面向对象?:关注现实存在的事物的各方面的信息,从对象的角度出发,根据事物的特征进行程序设计
    • 面向过程,是遇到一件事时,思考 我该怎么做 ,然后一步步实现的过程
    • 面向对象,是遇到一件事时,思考 我该让谁来做 ,然后那个“谁”就是对象,他要怎么做这件事是他自己的事,反正最后一群对象合力能把事就好就行了

    • 总结

      • 面向过程:自己该怎么做
      • 面向对象:找人帮我们做
    • 对象:用来描述客观事物的一个实体

    • :具有 相同属性和方法 的一组对象的集合

      • 是一个模子,用以确定对象将会拥有的特征和
      • 这里的特征和行为可以称之为属性和方法
    • 属性:就是对象所具有的各种静态特征,通俗理解为对象有什么特点

    • 方法:就是对象具有的各种动态行为,通俗理解为对象能做什么

    • 总结类是对象的类型、对象是类的实例化表现

    2. 面向对象的一般步骤:
    • 先按照名词提炼问题领域中的对象
    • 对象 进行描述,其实就是在明确对象中应该具备的属性和行为
    • 通过 new 的方式,创建该事物的具体对象(对象实例化)
    • 通过该对象调用它以后的功能
      面向对象
    • 创建对象的内存图:
      创建对象

    二、 类和对象的关系

    1. 概述
    • ,用于描述多个对象的共同特征,它是对象的模板
    • 对象,用于描述现实中的个体,它是类的实例
    • 比如:可以将玩具模型看作是一个类,将一个个玩具看作对象,从玩具模型和玩具之间的关系便可以看出类与对象之间的关系
    2. 对象的内存图:
    对象的内存图

    三、 成员变量和局部变量

    1. 变量的作用域 {}:
    • 一对大括号,就是一个作用域
    • 同一作用域中,不能出现同名变量
    2. 成员变量和局部变量的区别
    • 定义的位置不同
      • 定义在类中的变量是成员变量
      • 定义在方法中或者{}语句里面的变量是局部变量
    • 在内存中的位置不同
      • 成员变量存储在堆内存的对象中
      • 局部变量存储在栈内存的方法中
    • 声明周期不同
      • 成员变量随着对象的出现而出现中,随着对象的消失而从堆中消失
      • 局部变量随着方法的运行而出现中,随着方法的弹栈而消失
    • 初始化不同
      • 成员变量因为在堆内存中,所以有默认的初始化值,还可以用构造方法初始化
      • 局部变量没有默认的初始化值,必须手动的给其赋值才可以使用,不赋值不能使用
        成员属性的初始值
    3. 对象数组:存储对象
    • 数组中可以存储基本数据类型的变量,同时我们的数组中还可以存储对象
    public class Demo {
        public static void main(String[] args) {
            //这个数组就是一个用来存储Obj类型的对象的数组
            Obj[] b = new Obj[2]; //声明一个存储对象的数组
    
            b[0] = new Obj();
            b[1] = new Obj();
    
            b[0].show();
        }
    }
    
    class Obj {
        public void show() {
            System.out.println("show");
        }
    }
    
    
    • 对象数组内存图:
      对象数组
    4. 方法参数
    • 对于基本类型形式参数改变不会影响到实际参数
    • 对于引用类型形式参数改变会影响到实际参数
    • 方法参数内存图:
      方法参数

    四、 引用类型的兼容性

    赋值兼容性规则:
    • 对引用类型的变量进行赋值操作时,赋值号 右边 的表达式的类型必须与赋值号 左边 的对象引用类型 相同或是其子类型 (陪同赋值赋值类型兼容)
    • 方法的** return **语句返回的结果的类型,必须与方法声明中的返回类型 相同 或是其子类型 (返回值的类型兼容)
    • null 值与所有的引用类型兼容,所有引用类型的变量都可被赋值为 null

    五、 单一职责原则

    • 也叫:单一功能原则
    • 定义:一个类有且只有一个引起功能变化的原因,即一个类有且只有一个功能
      • 如果在一个类中,承载的功能越多,交融和耦合性会越高,被复用的可能性越低;
      • 同时,因为耦合性较高,当类中其中一个职责发生变化时,有可能引发同类中其他职责的变化,进而影响整个程序的运行。

    六、 代码块

    1. 概述
    • 在Java中,使用 {} 括起来的代码被称为代码块
    • 根据其 位置和声明 的不同,可以分为局部代码块构造代码块静态代码块同步代码块(多线程讲解)。
    2. 局部代码块
    • 局部代码块是定义在 方法或语句中,方法和类都是以代码块的方式划定边界的
    • 优点:在方法中出现,限定变量生命周期,及早释放,提高内存利用率
    • 缺点:会使得代码可读性很差,实际开发中不会用
    3. 构造代码块
    • 定义在类中 成员位置,方法之外 的代码块
    • 特点:
      • 优先于 构造方法执行,构造代码块用于执行 所有对象 均需要的初始化动作
      • 每创建一个对象均会执行一次构造代码块
    4. 静态代码块
    • 静态代码块是定义在成员位置,方法之外,使用 static 修饰的代码块。
    • 特点
      • 优先于 主方法执行、优先于 构造代码块执行,在 类加载时 执行。
      • 该类不管创建多少对象,静态代码块 只执行一次
      • 可用于给 静态变量 赋值,用来给类进行初始化。

    七、 类的访问控制权限

    1. 概述
    • 通过访问控制修饰符 (access modifiers)可以限制 成员 在类或对象外部的可见性
    • 对于类而言,只有两种权限修饰符:
      • public
      • 不写,默认
    2. 公有的: public
    • 访问限定范围最大,可以在 任何位置 被访问
    • 只要能正确加载 public 成员所在的类型,就可以通过类型访问 public 成员。
    3. 私有的: private
    • 访问限定范围最小,只允许在 本类中 进行访问
    4. 受保护的: protected
    • 只允许 当前类同包任意类跨包子类 可以访问
    5. 默认 (不加任何访问修饰符)
    • 只允许 当前类同包任意类 可以访问

    注意:如果类用 public 修饰,则 类名必须与文件名相同。一个文件中 只能有一个 public 修饰的类。

    6. 访问权限图:
    访问权限

    八、 Packaging Classes

    1. 类的完全限定名(全类名)
    • 类的完全限定名(全类名):在类名前面加上类所属的包名,中间用句点“.”分隔,称为类的完全限定名(Full Qualified Name),简称类的限定名
    2. 我们如何唯一确定操作系统上的文件呢?
    • 通过文件在操作系统上的 绝对路径,来唯一的确定一个文件
    3. java 类比于 操作系统唯一确定一个文件的方式,如何唯一确定java中的一个类呢?
    • 通过一个类的所属包的包名 + 类名 唯一确定 java 中的一个类
      ImportDemo: 简单类名 --> 全类名 com.cskaoyan.packages.ImportDemo;
    4. 当在类体中使用了与当前类不同包的类名时,编译器编译时因为无法找到该类的定义而失败,有两个解决办法:
    • 使用不同包类的完全限定名
    • 使用 import 声明,为编译器提供该类的定义信息 (简单来讲,就是,将其他包的类型导入到当期的Java文件)
    5. import 关键字
    • import 声明一般紧跟在 package 声明之后,必须在类声明之前,其基本语法如下:
      import <类的完全限定名>;
    • Java语言核心包 java.lang 包中的类将被隐式导入,可以直接使用其中的类
    • import <包名>.*; 含义就是在当前java文件中,导入某个包下的 所有类(没有嵌套导入的功能)
    6. package
    • 在Java源程序文件的第一行使用 package 声明: 可以使文件中定义的类成为指定包的成员(java类是由包组织起来的)
      • package声明的语法如下:
        package <包名>; 常规的命名的方式,域名反转的形式
    • 包名通常由多个名字字符串构成,中间用句点“.”分隔,每个名字表示的包称为其前面的名字表示的包的子包,
      • 通常以组织机构的域名反转形式作为其所有包的通用前缀,如

    com.cskaoyan.packages
    com.cskaoyan.packages 称之为 com.cskaoyan子包

    7. 包的用途:
    • 将相关的类和接口分组,包名通常表示包中各个类和接口的 用途 (分类组织java代码,方便管理我们的代码)
    • 包创建了不同的 命名空间(Namespace),从而有效地解决了 类型命名 冲突问题
    • 包提供了对应用程序内部实现机制的保护域 default 权限修饰符 protected 权限修饰符
    • 如果有一个java文件,没有写 package 关键字,这些类都被认为,属于java中的默认包的成员

    相关文章

      网友评论

        本文标题:Java 基础:面向对象

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