11.Java面向对象基础

一.什么是面向对象编程(OOP)

1.1面向过程编程

要之前的学习中,我们用到的思想叫做面向过程编程(Procedure Orientedprogramming),简称POP
顾名思义该思想是站在过程的角度思考问题,强调的就是功能的执行过程,即先干啥,后干啥。而每一个功能我们都使用函数(类似于方法)把这些步骤一步一步实现,使用的时候依次调用函数就可以了。

1.2面向对象编程

Object-Oriented Programming
思想:物以类聚,分类。
本质:以类的方式组织代码,以对象的方式封装数据
优点:面向对象更加符合我们常规的思维方式,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性。

在我们身边有很多这种思维方式。
例如:
对象解释
这既是我们的面向对象的思维方式,带入到我们的代码中我们会有这样几个名词:

  • 类:一种抽象的数据类型,定义或者描述了某一类事物,类似现实中的人,车。类是对象的模板,关键词class。
  • 对象:抽象概念(类)的具体实例,例如,一个叫张三的人,一两具体的车。
  • 实例化:创建对象的过程,关键字是new。
  • 属性:字段,例如String name=”Lily”中的name。代表类的基础属性。
  • 方法:前面的博文已经讲过,相当于上图中的功能,类似于其他语言的函数

在面向对象中是会有面向过程的。不可以理解为面向对象一定就优于面向过程的设计。面向对象是基于面向过程的,永远不可能取代面向过程.

1.3类与对象的关系

先有类,后有对象。
类是对象的模板,对象是类的实例

二.对象的基本操作

首先我们需要创建一个类

//学生类
public class Student {
    //属性
    String name;
    int age;
    //方法
    public void study(){
        System.out.println(this.name+"在学习");
    }
}

然后对类进行实例化,即创建对象类 对象名 = new 类名();

public class Application {
    public static void main(String[] args) {

        //实例化 类 对象名 = new 类名();
        Student xm = new Student();//类实例化后产生一个自己的对象
        Student xh = new Student();
    }
}
  • 使用new创建到时候,系统会分配空间,并且还会进行默认的初始化(打印上图的xm.name,xm.age会分别出现null,及0)及对类中的构造器的调用(一会会讲到)
  • 一个类可以有多个对象

然后进行赋值对象名.变量 = 值;,取值变量 = 对象名.变量;

public class Application {
    public static void main(String[] args) {

        //实例化 类 对象名 = new 类名();
        Student xm = new Student();
        Student xh = new Student();

        //赋值
        xm.name ="小明";
        xm.age = 21;
        //取值
        String n = xm.name;
        int a = xm.age;
        System.out.println(n);
        System.out.println(a);
    }
}

三.构造器

3.1无参构造

上面提到创建对象会调用构造器,那么什么是构造器?(构造方法,构造函数/构造器/构造子.)

我们首先创建一个Person类,什么都不写。但是在主方法区却依旧可以new一个对象

为什么可以new?这就是构造器作用,下面我们看一下

public class Person {
}
public class Application {
    public static void main(String[] args) {

        //实例化 类 对象名 = new 类名();
        Person zhangsan = new Person();
    }
}

我们运行程序,通过idea找到编译后的目录,找到对应的class文件,并用idea查看
编译文件目录
在这里插入图片描述
我们会发现在编译后出现了一个Person方法,这就是一个构造器

通过以上我们发现这样几点:

  • 一个什么都不写,也会存在一个方法,既构造犯法
  • 方法名与类名相同
  • 无参数,无返回值

3.2有参构造

我们手动写一个构造器

public class Person {
    String name;
    public Person(String na){
        this.name = na;   //this指的是类本身
    }
}

到这里我们会发现一个错误:构造器无法应用
解决办法:当我们定义了有参构造,无参构造就必须显式定义。

public class Person {
    String name;
    public Person(){
        
    }
    public Person(String na){
        this.name = na;

    }
}

这是我们可以进传参,它会调用有参构造(之前讲过的方法重载)

public class Application {
    public static void main(String[] args) {

        //实例化 类 对象名 = new 类名();
        Person zhangsan = new Person("张三");
        System.out.println(zhangsan.name);
    }
}

Tips:在idea中 Alt + inster

3.3构造器小结

  • 构造器:
  1. 与类名相同
  2. 无返回值
  • 作用:
  1. new本质就是在调用构造方法
  2. 初始化对象的值
  • 注意点:
  1. 当我们定义了有参构造,无参构造就必须显式定义。

四.内存分析

创建对象时内存分析(简单)
简单内存分析
1、在方法区加载Application类;

2、main()方法进栈

3、加载Student类

4、在栈内存申请空间,声明变量xm;

5、在堆内存中开辟空间,分配对象地址。在对象空间中,对对象的属性进行默认初始化,并调用类构造器

6、初始化完成后,将堆内存中的地址赋给引用变量

本过程仅为方便理解对象创建过程,并非真实内存变化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不一样的鑫仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值