面向对象编程(基础)

本文详细介绍了Java中的面向对象编程基础,包括类与对象的概念、对象在内存中的存储方式、属性与方法、构造器、this关键字以及递归等核心概念。通过实例解析了对象创建流程、方法的调用机制、成员方法的定义与使用、参数传递机制,以及如何通过构造器初始化对象。此外,还讨论了方法重载、可变参数和作用域等关键知识点。
摘要由CSDN通过智能技术生成

面向对象编程(基础)

类与对象

public class Object01 {
   

    public static void main(String[] args) {
   

        //单独变量来解决  => 不利于数据的管理(把一只猫的信息拆解了)
        //定义两个变量
        //第一只猫的信息

        String cat1Name = "小白";
        int  cat1Age = 8;
        String cat1Color = "white";

        //第二只猫的信息
        String cat2Name = "小黑";
        int  cat2Age = 9;
        String cat2Color = "black";

        //  数组 =》 1、数据类型体现不出来 2、cat1[1] 只能通过下标获取信息,
        //  造成变量名字和内容的对应关系不明确
        //  3、不能体现猫的行为
        //第一只猫的信息
        String[] cat1 = {
   "小白","3","white"};

        //第二只猫的信息
        String[] cat2 = {
   "小黑","4","black"};
        
        //现有技术的缺点分析
        //不利于数据管理  效率低
        // ====> 引出我们的新知识点  类与对象
        
        //java的设计者  引入类与对象 (OOP)
        // 根本原因 现有的技术 不能完美的解决新的需求
    }
}

一个程序就是一个世界 ,有很多事物 (对象[属性,行为])

  • 类与对象的关系示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hayHLdiC-1634096105647)(C:\Users\cxt\AppData\Roaming\Typora\typora-user-images\image-20210925204051672.png)]

在这里插入图片描述

  • 类与对象的快速入门
public class Object01 {
   

    public static void main(String[] args) {
   

        //单独变量来解决  => 不利于数据的管理(把一只猫的信息拆解了)
        //定义两个变量
        //第一只猫的信息

        String cat1Name = "小白";
        int  cat1Age = 8;
        String cat1Color = "white";

        //第二只猫的信息
        String cat2Name = "小黑";
        int  cat2Age = 9;
        String cat2Color = "black";

        //  数组 =》 1、数据类型体现不出来 2、cat1[1] 只能通过下标获取信息,
        //  造成变量名字和内容的对应关系不明确
        //  3、不能体现猫的行为
        //第一只猫的信息
//        String[] cat1 = {"小白","3","white"};

        //第二只猫的信息
//        String[] cat2 = {"小黑","4","black"};

        //现有技术的缺点分析
        //不利于数据管理  效率低
        // ====> 引出我们的新知识点  类与对象

        //java的设计者  引入类与对象 (OOP)
        // 根本原因 现有的技术 不能完美的解决新的需求

        //使用OOP 面向对象解决
        //实例化一只猫【创建一只猫对象】
        //  Cat cat1 = new Cat();
        Cat cat1 = new Cat();
        cat1.name="小白";
        cat1.age=100;
        cat1.color="白色";
        cat1.weight = 10;

        Cat cat2 = new Cat();
        cat2.name="小花";
        cat2.age=101;
        cat2.color="花色";
        cat2.weight=20

        //怎么访问对象的属性
        System.out.println("第一只猫的信息" + cat1.name+cat1.age
                +cat1.color + cat1.weight);

        System.out.println("第二只猫的信息" + cat2.name+cat2.age
                +cat2.color + cat2.weight);
    }
}


//使用 面向对象的方式来解决养猫问题
//定义一个猫类 Cat  --> 类  自定义的数据类型
class  Cat {
   
    //属性
    String name;
    int age;
    String color;
    double weight;
}
  1. 类是抽象的,概念的,代表一类事物,比如人类 ,猫类 即它是数据类型
  2. 对象是具体的,实际的 代表一个具体的事物 即,是实例
  3. 类是对象的模板,对象是类的一个个体 对应一个实例
对象在内存中的存在形式

在这里插入图片描述

属性的概念(成员变量)
  • 属性/成员变量

    • 基本介绍

      从概念或叫法:成员变量 = 属性 成员变量是用来表示属性的

    • 属性是类的一个组成部分,一般是基本数据类型,也可以是引用类型[对象 、数组]

  • 属性的注意事项和字节

    • 属性的定义语法同变量 示例:访问修饰符 属性类型 属性名

      • 访问修饰符1 控制属性的访问范围

        修饰符有四种:public ,proctected, 默认, private

    • 属性可以是基本数据类型,也可以是引用类型[对象 、数组]

    • 属性如果不复制,有默认值,规则和数组一致 如果没有赋值,有默认值 int 0 short 0 byte 0 long 0 float 0.0 double 0.0

如何创建对象
  • 先声明在创建

    Cat cat ;//声明对象

    cat = new Cat()//创建

  • 直接创建

    Cat cat = new Cat()

如何访问属性
  • 基本语法

对象名.属性名;

示例:

cat.name;

cat1.age;

类与对象的内存分配机制(重点)
public class Object03 {
   

    public static void main(String[] args) {
   

        Person01 p1 = new Person01();
        p1.age = 10;
        p1.name = "小明";
        Person01 p2 = p1; //把p1 赋给了p2 让 p2指向 p1
        System.out.println(p2.age);
    }
}
class  Person01{
   

    int age;
    String name;
}

在这里插入图片描述

  • 类与对象的内存分配机制

    • -java的内存的结构分析

      1.栈:一般存放基本的数据类型(局部变量)

      2.堆:存放对象、数组 (引用类型)

      3.方法去:常量池(常量,比如字符串),类加载信息

      4.示意图

  • java创建对象的流程简单分析

    Person01 p1 = new Person01();
    p1.age = 10;
    p1.name = "小明";
    

    1.先加载Person的类信息在方法区

    2.在堆中分配空间 ,进行默认初始化(有默认值 int 0 short 0 byte 0 long 0 float 0.0 double 0.0 ,String null)

    3.把地址赋给 p1;p1就指向对象了

    4.进行指定的初始化

    比如: p1.age = 10;
    p1.name = “小明”;

在这里插入图片描述

方法

成员方法

​ 在某些情况下,我们需要定义成员方法(简称方法)。比如 人类:除了有一些属性外,我们人类还有一些行为,比如,可以说话,跑步…学习,还可以做算术题,这时要用成员方法才能完成。

  • 成员方法的快速入门
  1. 添加speak成员方法 输出 我是一个好人
  2. 添加cal01成员方法,可以计算1+…+n的结果
  3. 添加cal02成员方法,该方法可以接收一个数n,可以计算1+…+n的结果
  4. 添加getSum成员方法,可以计算两个数的和
import java.util.Scanner;
public class Method01 {
   

    public static void main(String[] args) {
   

        //创建一个对象 类的实例化
        Person02 person02 = new Person02();

        //方法的使用
        // 方法写好了 如果不去调用 ,不会输出
        // 先创建 一个对象 ,然后调用方法即可
        person02.speak();//调用方法

        person02.cal01();

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要计算的数字");
        int n = scanner.nextInt();
        person02.cal02(n);

        System.out.println("请输入第一个要计算的数字");
        int n1= scanner.nextInt();
        System.out.println("请输入第二个要计算的数字");
        int n2= scanner.nextInt();

        //调用getSum方法 
        //把 getSum方法返回的值 赋给 returnRes
        int returnRes = person02.getSum(n1,n2);
        System.out.println("returnRes="+returnRes);
    }
}

class Person02 {
   

    String name;
    int age;

    //方法
    //添加speak成员方法 输出 我是一个好人
    //public 表示方法是公开的
    //void 表示方法没有返回值
    // speak 方法名  ()形参列表
    // { } 方法体  ,可以写我们要执行的代码
    //  System.out.println("我是一个好人"); 表示我们的方法输出一句话
    public  void  speak(){
   </
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值