美文网首页
2023-11-21第06章_面向对象编程(初)

2023-11-21第06章_面向对象编程(初)

作者: 大也 | 来源:发表于2023-11-26 18:23 被阅读0次

    -- ---------------------- 本章概况
    -- ---------------------- 课件
    -- ---------------------- 随堂复习与企业真题
    -- ---------------------- 拓展练习

    -- ---------------------- 本章概况


    image.png
    image.png
    image.png
    image.png

    -- ---------------------- 课件

    1. 面向对象编程概述(1.1 程序设计的思路/1.2 由实际问题考虑如何设计程序/1.3 如何掌握这种思想?)
    2. Java语言的基本元素:类和对象(2.1 引入/2.2 类和对象概述/2.3 类的成员概述/2.4 面向对象完成功能的三步骤(重要)/2.5 匿名对象 (anonymous object))
    class Person{
        //声明属性age
        int age ;
        //声明方法 eat();
        public void eat() {
            System.out.println("人吃饭");
        }
    }
    
    1. 对象的内存解析(3.1 JVM内存结构划分/3.2 对象内存解析/3.3 练习)
    堆 栈 指针
    面试题:对象名中存储的是什么呢?
    答:对象地址
    
    1. 类的成员之一:成员变量(4.1 如何声明成员变量/4.2 成员变量 vs 局部变量)
      成员变量在堆里面 局部变量在栈里面
    2. 类的成员之二:方法(5.1 方法的引入/5.2 方法(method、函数)的理解/5.3 如何声明方法/5.4 如何调用实例方法/5.5 使用的注意点/5.6 关键字return的使用/5.7 方法调用内存分析/5.8 练习)
        public String  eat(String some) {
            System.out.println("人吃"+some);
            String baba = new String();
            baba = "粑粑";
            System.out.println("人拉出"+baba);
            return baba;
        }
        p.eat("米");
    
    方法内的内存也都遵循 弹匣 栈堆效果
    方法没有调用的时候,都在 方法区中的字节码文件(.class)中存储。
    方法被调用的时候,需要进入到栈内存中运行。方法每调用一次就会在栈中有一个 入栈 动作,即 给当前方法开辟一块独立的内存区域,用于存储当前方法的局部变量的值。 
    当方法执行结束后,会释放该内存,称为 出栈 ,如果方法有返回值,就会把结果返回调用处,如 果没有返回值,就直接结束,回到调用处继续执行下一条指令。
    栈结构:先进后出,后进先出。
    
    1. 对象数组 (当元素是引用类型中的类时,我们称为对象数组。)
    对象数组,首先要创建数组对象本身,即确定数组的长度,然后再创建每一个元素对象,如果不创建,
    数组的元素的默认值就是 null ,所以很容易出现 空指针异常NullPointerException 。
    
    1. 再谈方法(7.1 方法的重载(overload)/7.2 可变个数的形参/7.3 方法的参数传递机制/7.4 递归(recursion)方法)
    但是形参的个数不确定,那么可以考虑使用可变个数的形参。
    public static void test(int a ,String...books);
    
    1. 关键字:package、import(8.1 package(包)/8.2 import(导入))
    java.lang ----包含一些Java语言的核心类,如String、Math、Integer、 System和Thread,提供常用功能
    java.net----包含执行与网络相关的操作的类和接口。
    java.io----包含能提供多种输入/输出功能的类。
    java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
    java.text----包含了一些java格式化相关的类
    java.sql----包含了java进行JDBC数据库编程的相关类/接口
    java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
    
    1. 面向对象特征一:封装性(9.1 为什么需要封装?/9.2 何为封装性?/9.3 Java如何实现数据封装/9.4 封装性的体现/9.5 练习)
    权限修饰符: public(全部) 、 protected(子类[本包+本类+其他包子类]) 、 缺省 (本包+本类)、 private (本类)。访问范围
    封装性的体现:
    概述:私有化类的成员变量,提供公共的get和set方法,对外暴露获取和修改属性的功能。
    
    1. 类的成员之三:构造器(10.1 构造器的作用/10.2 构造器的语法格式/10.3 使用说明/10.4 练习)
    public class Student {
    private String name;
    // 无参构造
    public Student() {}
    // 有参构造
    public Student(String n,int a) {
    name = n;
    age = a; }
    }
    
    1. 阶段性知识补充(11.1 类中属性赋值过程/11.2 JavaBean/11.3 UML类图)
    JavaBean 空仓构造器 
    类是公共的 
    有一个无参的公共的构造器 
    有属性,且有对应的get、set方法
    

    UML类图)

    ![image.png](https://img.haomeiwen.com/i2673147/dc724935beb2c7dc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    

    -- ---------------------- 随堂复习与企业真题

    1. (了解)面向过程 vs 面向对象

    • 不管是面向过程、面向对象,都是程序设计的思路。
    • 面向过程:以函数为基本单位,适合解决简单问题。比如:开车
    • 面向对象:以类为基本单位,适合解决复杂问题。比如:造车

    2. 类、对象

    • 类:抽象的,概念上的定义
    • 对象:具体的,类的一个一个的实例。
    • 面向对象完成具体功能的操作的三步流程(非常重要)
    步骤1:创建类,并设计类的内部成员(属性、方法)
    步骤2:创建类的对象。比如:Phone p1 = new Phone();
    步骤3:通过对象,调用其内部声明的属性或方法,完成相关的功能
    
    • 对象的内存解析
      • 创建类的一个对象;创建类的多个对象;方法的调用的内存解析
    • Java中内存结构的划分
      • Java中内存结构划分为:虚拟机栈、堆、方法区;程序计数器、本地方法栈
      • 虚拟机栈:以栈帧为基本单位,有入栈和出栈操作;每个栈帧入栈操作对应一个方法的执行;方法内的局部变量会存储在栈帧中。
      • 堆空间:new 出来的结构(数组、对象):① 数组,数组的元素在堆中 ② 对象的成员变量在堆中。
      • 方法区:加载的类的模板结构。

    3. 类的成员之一:属性(或成员变量)

    • 属性 vs 局部变量
      • 声明的位置
      • 内存中存放的位置
      • 作用域
      • 权限修饰符
      • 初始化值
      • 生命周期
    • 属性 <=> 成员变量 <=>field <=> 字段、域

    4. 类的成员之二:方法

    • 方法的声明:权限修饰符 返回值类型 方法名(形参列表){ // 方法体}
      • 重点:返回值类型、形参列表
    • return关键字的使用

    5. 再谈方法

    5.1 方法的重载(overload)

    • 方法的重载的要求:“两同一不同”
    • 调用方法时,如何确定调用的是某个指定的方法呢?① 方法名 ② 形参列表

    5.2 可变个数形参的方法

    • 格式:(int ... args)

    5.3 方法的参数传递机制:值传递(重点、难点)

    > 如果形参是基本数据类型的变量,则将实参保存的数据值赋给形参。
    > 如果形参是引用数据类型的变量,则将实参保存的地址值赋给形参。
    

    5.4 递归方法

    • 递归方法构成了隐式的循环
    • 对比:相较于循环结构,递归方法效率稍低,内存占用偏高。

    6. 对象数组

    • String[] ;Person[] ; Customer[]

    7. package、import关键字的使用

    • package:指明声明的类所属的包。
    • import:当前类中,如果使用其它包下的类(除java.lang包),原则上就需要导入。

    8. oop的特征之一:封装性

    Java规定了4种权限修饰,分别是:private、缺省、protected、public。
    我们可以使用4种权限修饰来修饰类及类的内部成员。当这些成员被调用时,体现可见性的大小。
    

    举例:

    > 场景1:私有化(private)类的属性,提供公共(public)的get和set方法,对此属性进行获取或修改
    > 场景2:将类中不需要对外暴露的方法,设置为private
    > 场景3:单例模式中构造器private的了,避免在类的外部创建实例。(放到static关键字后讲)
    

    上理论:程序设计的原则之一

    理论上:
      -`高内聚`:类的内部数据操作细节自己完成,不允许外部干涉;
        (Java程序通常以类的形态呈现,相关的功能封装到方法中。)
      -`低耦合`:仅暴露少量的方法给外部使用,尽量方便外部调用。
        (给相关的类、方法设置权限,把该隐藏的隐藏起来,该暴露的暴露出去)
    

    9. 类的成员之三:构造器

    • 如何定义:权限修饰符 类名(形参列表){}
    • 构造器的作用:① 搭配上new,用来创建对象 ② 初始化对象的成员变量

    10. 三个小知识

    10.1 类的实例变量的赋值过程(重要)

    1. 在类的属性中,可以有哪些位置给属性赋值?
    ① 默认初始化;
    ② 显式初始化;
    ③ 构造器中初始化;
    **********************************
    ④ 通过"对象.方法"的方式赋值;
    ⑤ 通过"对象.属性"的方式赋值;
    
    2. 这些位置执行的先后顺序是怎样?
    ① - ② - ③ - ④/⑤
    

    10.2 JavaBean

    所谓JavaBean,是指符合如下标准的Java类:
    
    - 类是公共的
    - 有一个无参的公共的构造器
    - 有属性,且有对应的get、set方法
    

    10.3 UML类图

    熟悉。

    二、企业真题

    2.1 类与对象

    1. 面向对象,面向过程的理解?(平金服、英*达)

    略。

    2. Java 的引用类型有哪几种(阿*校招)

    类、数组、接口;枚举、注解、记录

    3. 类和对象的区别(凡*科技、上*银行)

    略。

    4. 面向对象,你解释一下,项目中哪些地方用到面向对象?(燕*金融)

    “万事万物皆对象”。

    2.2 Java内存结构

    1. Java虚拟机中内存划分为哪些区域,详细介绍一下(神**岳、数*互融)

    略。

    2. 对象存在Java内存的哪块区域里面?(阿*)

    堆空间。

    2.3 权限修饰符(封装性)

    1. private 、缺省、protected、public的表格化作用区域(爱*信、拓*思、中*瑞飞)

    2. main方法的public能不能换成private?为什么?(凡*科技、顺*)

    能。但是改以后就不能作为程序的入口了,就只是一个普通的方法。

    2.4 构造器

    1. 构造方法和普通方法的区别(凡*科技、软*动力、中*软)

    编写代码的角度:没有共同点。声明格式、作用都不同。

    字节码文件的角度:构造器会以<init>()方法的形态呈现,用以初始化对象。

    2. 构造器Constructor是否可被overload?(鸿*网络)

    可以。

    3. 无参构造器和有参构造器的的作用和应用(北京楚*龙)

    2.5 属性及属性赋值顺序

    1. 成员变量与局部变量的区别(艾*软件)

    6个点。

    2. 变量赋值和构造方法加载的优先级问题(凡*科技、博*软件)

    变量显式赋值先于构造器中的赋值。

    如何证明?我看的字节码文件。

    相关文章

      网友评论

          本文标题:2023-11-21第06章_面向对象编程(初)

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