Java 面向对象编程基础详解(一)

目录

一、面向对象编程概述

(一)面向对象编程的特点

(二)Java 中的面向对象编程元素

二、类和对象

(一)类的设计

(二)类的实例化

(三)面向对象完成具体功能的操作三步骤

三、内存解析

(一)对象在内存中的分配

(二)类中对象的内存解析

四、成员变量和局部变量

(一)变量的分类

(二)相同点

(三)不同点

五、方法

(一)使用方法的好处

(二)使用举例

(三)声明举例

(四)方法声明的细节

(五)形参和实参

六、补充知识点和案例

(一)面向对象编程的优势

(二)案例:汽车类的设计


一、面向对象编程概述

面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,与面向过程编程(Procedure-Oriented Programming,POP)相对。Java 是一种完全面向对象的编程语言,其核心是类和对象。

(一)面向对象编程的特点

  1. 封装:将数据和操作封装在类中,通过访问修饰符控制对数据的访问。
  2. 继承:子类继承父类的属性和方法,实现代码复用。
  3. 多态:同一操作作用于不同的对象可以有不同的表现形式。

(二)Java 中的面向对象编程元素

  1. 类及类的成员:属性(成员变量)、方法、构造器、代码块、内部类。
  2. 关键字:this、super、package、import、static、final、interface 等。

二、类和对象

类是属性和行为的集合,对象是类的实例化。

(一)类的设计

  1. 属性:该类事物的状态信息,对应类中的成员变量。
  2. 行为:该类事物要做的操作,对应类中的成员方法。

(二)类的实例化

格式:类类型 对象名 = new 创建的对象实体。例如:Phone p1 = new Phone();

(三)面向对象完成具体功能的操作三步骤

  1. 创建类,设计类的内部成员(属性和方法)。
  2. 创建类的对象。
  3. 通过对象,调用其内部声明的属性和方法,完成相关的功能。

三、内存解析

(一)对象在内存中的分配

涉及到的内存结构有栈、堆和方法区。

  1. 栈:存储方法内定义的变量。
  2. 堆:存储 new 出来的对象实体,包括对象的属性。
  3. 方法区:存放类的模板。

(二)类中对象的内存解析

  1. 创建一个类的对象:只要没有 new 就是没有开创内存空间。
  2. 创建多个对象:每个对象都在堆中占据独立的空间,拥有自己的属性副本。

四、成员变量和局部变量

(一)变量的分类

  1. 按照数据类型:基本数据类型和引用数据类型。
  2. 按照在类中声明的位置:成员变量(属性)和局部变量(方法内声明的变量)。

(二)相同点

  1. 声明的格式相同:数据类型 变量名 = 变量值。
  2. 变量都有其作用域。
  3. 变量必须先声明再赋值后使用。

(三)不同点

  1. 类中声明的位置不同:
    • 属性:声明在类内,方法外的变量。
    • 局部变量:声明在方法、构造器内部的变量。
  2. 在内存中分配的位置不同:
    • 属性:随着对象的创建,存储在堆中。
    • 局部变量:存储在栈空间中。
  3. 生命周期不同:
    • 属性:随着对象的创建而创建,随着对象的消失而消失。
    • 局部变量:随着方法对应的栈帧入栈,局部变量会在栈中分配。随着方法对应的栈帧出栈,局部变量消亡。
  4. 作用域不同:
    • 属性:在整个类中有效。
    • 局部变量:仅仅限于局部变量所在的方法中。
  5. 是否可以有权限修饰符进行修饰:
    • 属性是可以的,局部变量是不可以的。
  6. 是否有默认值:
    • 属性都有默认值。
    • 局部变量都没有默认初始化值。

五、方法

(一)使用方法的好处

方法是类或对象行为特征的抽象,用来完成某个功能操作。将功能封装为方法的目的是可以实现代码重用,减少代码冗余。

(二)使用举例

Math.random()中的random()方法和System.out.println()中的println()方法。

(三)声明举例

class Person{
    //属性
    String name;
    int age;
    char gender;
    //方法
    public void eat(){
        System.out.println("人吃饭");    
    }
}

方法声明的格式:权限修饰符【其他修饰符】返回值类型 方法名(形参列表){// 方法体}。

(四)方法声明的细节

  1. 权限修饰符:Java 规定了 private、缺省、protected、public 等权限修饰符。
  2. 返回值类型:
    • 无返回值类型:void,比如System.out.println()中的println()方法。
    • 有返回值类型:可以是基本数据类型,也可以是引用数据类型。需要在方法内配合使用 return + 返回值类型的变量或常量。
    • return 的作用:
      • 结束一个方法。
      • 结束一个方法的同时可以返回数据给方法的调用者。
  3. 方法名:属于标识符,需要满足标识符的规定和规范,见名知意。
  4. 形参列表:形参属于局部变量,可以声明多个。
    • 无形参列表:不能省略()。
    • 有形参列表:根据方法调用时需要的形参个数,确定形参的类型和个数。

注意:Java 里的方法不能独立存在,所有的方法必须定义在类中。Java 中的方法不调用不执行,调用一次执行一次。方法内可以调用本类中的其他方法或属性,方法内不能定义方法。

(五)形参和实参

  1. 形参:方法在声明时,一对()内声明的一个或多个形式参数。
  2. 实参:方法在调用时,实际传递给形参的变量或常量,就是实参。

六、补充知识点和案例

(一)面向对象编程的优势

  1. 提高代码的可维护性:封装使得代码的修改更加集中,减少了对其他部分的影响。
  2. 增强代码的可扩展性:通过继承和多态,可以方便地扩展现有代码。
  3. 提高代码的复用性:将通用的功能封装成方法,减少重复代码。

(二)案例:汽车类的设计

  1. 定义汽车类Car,包含属性如品牌、颜色、速度等,以及方法如加速、减速、停车等。
class Car {
    String brand;
    String color;
    int speed;

    public void accelerate() {
        speed++;
        System.out.println("汽车加速,当前速度为:" + speed);
    }

    public void decelerate() {
        if (speed > 0) {
            speed--;
            System.out.println("汽车减速,当前速度为:" + speed);
        }
    }

    public void stop() {
        speed = 0;
        System.out.println("汽车停车");
    }
}
  1. 使用汽车类创建对象并调用方法。
public class Main {
    public static void main(String[] args) {
        Car myCar = new Car();
        myCar.brand = "丰田";
        myCar.color = "黑色";
        myCar.accelerate();
        myCar.accelerate();
        myCar.decelerate();
        myCar.stop();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值