类和对象概述

面向过程与面向对象区别、类和对象的概念、对象的创建和使用、对象的内存解析的简要介绍。

Author: Msuenb

Date: 2023-02-07


面向过程与面向对象

面向过程和面向对象都是一种编程思想,基于不同的思想会产生不同的程序设计方法。

  1. 面向过程程序设计思想(Process Oriented Programing),简称POP

    面向过程,强调的是功能行为,以函数为组织单位,考虑怎么做

  2. 面向对象程序设计思想(Object Oriented Programing),简称OOP

    面向对象,将功能封装到对象中,强调具备了对象的功能,以类为组织单位,考虑谁来做

面向过程:

  • 优点是性能比面向对象高,因为类调用时需要实例化,开销比较大。
  • 缺点是没有面向对象易维护、易复用、易扩展。可维护性差,不易修改。

面向过程:

  • 优点是易维护、易复用、易扩展。
  • 缺点是性能比面向过程低。

类和对象

  1. 是具有相同特性的事物的抽象描述,是一组相关属性行为的集合。

    • 属性:该事物的状态信息。对应成员变量

    • 行为:对事物的状态信息做什么操作,或基于事物的状态信息能做声明。对应成员方法

  2. 对象是一类事物的一个具体的个体。即对象是类的一个实例,必然具备该类事物的属性和行为。

    • 例如,类:人,对象:麻花藤。
  3. 类与对象的关系

    • 类是对一类事物的描述,是抽象的;对象是一类事物的实例,是具体的。

    • 类是对象的模板,对象是类的实体。

  4. 类的成员

    类的成员有属性、方法、构造器、代码块、内部类。详见 类的成员

类和对象的创建和使用

  1. 类的定义格式

    【修饰符】 class 类名 { }
    

    示例:

    public class Student { }
    
  2. 对象的创建

    new 类名();	// 创建匿名对象 只能使用一次
    
    类名 对象名 = new 类名(); // 创建有名字的对象 可以反复使用
    

    示例:

    public class Test {
        public static void main(String[] args) {
            new Student();	// 创建Student类的匿名对象
            
            Student stu = new Student();
            
            Student[] stu = new Student[5];	// 创建Student对象数组
        }
    }
    
  3. 属性和方法的声明

    【修饰符】 class 类名 {
    	【修饰符】 数据类型 成员变量名;		// 属性
        
        【修饰符】 返回值类型 方法名(【形参列表】) 【throws 异常列表】 {
            方法体代码
        }
    }
    

    声明方法的位置:必须声明在类中 方法外,即不能在一个方法中直接定义另一个方法。

    错误示例

    类 {
        方法1() {
            方法2() { }	// 错误
        }
    }
    
  4. 对象的使用演示

    public class Student {
        public String name;
        public int age;
        
        public void learn() {
            System.out.println("learning");
        }
    }
    

    使用对象.对象成员的方式访问对象成员(包括属性和方法)

    public class Test {
        public static void main(String[] args) {
            
            // 创建对象
            Student stu = new Student();
            
            stu.name = "Tom";	// 访问对象属性
            stu.age = 18;
            
            stu.learn();	// 访问对象方法
        }
    }
    

对象的内存解析

内存是用于暂存 CPU 中的运算数据,以及与硬盘等外部存储设备交换的数据。

JVM的内存划分

Java 虚拟机要运行程序,必须对内存空间进行分配和管理。为了提高效率,就对空间进行了不同区域的划分,每一片区域都有特定的处理数据的方式和内存管理的方式。

区域名称 作用
程序计数器 程序计数器是CPU中的寄存器,它包含每一个线程下一条要执行的指令的地址
本地方法栈 当程序中调用了native的本地方法时,本地方法执行期间的内存区域
方法区 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
堆内存 存储对象(包括数组对象),new来创建的,都存储在堆内存。
虚拟机栈 用于存储正在执行的每个Java方法的局部变量表等。
局部变量表存放了编译期可知长度的各种基本数据类型对象引用,方法执行完,自动释放。

针对上面的代码,画出对象stu的内存图。在使用new Student()建对象时,会加载Student类的信息(属性信息,方法信息)到方法区。

posted @ 2023-02-12 17:49  msuenb  阅读(35)  评论(0编辑  收藏  举报