从零开始的Java学习教程——六:面向对象编程(一)

本文介绍了面向对象编程的基础概念,如OOP思想、类与对象的关系、方法定义与静态与非静态的区别,以及构造器的使用。通过实例演示了内存管理和对象创建过程。重点关注了Java中的类加载机制和值传递与引用传递。
摘要由CSDN通过智能技术生成

初识面向对象

面向过程&面向对象

面向过程思想
  1. 步骤清晰简单,第一步做什么,第二步做什么
  2. 面对过程适合处理一些较为简单的问题
面向对象思想
  1. 分类的思维模式,思考问题首先解决需要哪些分类的问题,然后对分类进行单独思考,最后,才对某个分类下的细节进行面向过程的思考
  2. .面向对象适合处理复杂的问题,适合处理需要多人协作的问题

对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统,但是,具体到微观操作,任然需要面向过程的思路去处理。

什么是面向对象

  1. 面向对象编程,即Object-Oriented Programming,OOP
  2. 面向对象编程的本质就是:以类的方式组织代码,以对象的方式封装数据
  3. 面向对象是抽象的
  4. 面向对象三大特性(这些我们会在后面的学习中慢慢总结)
    • 封装
    • 继承
    • 多态
  5. 从认识论角度考虑是先有对象后有类。对象,是具体的事物,类,是抽象的,是对对象的抽象
  6. 从代码运行角度考虑是先有类后有对象,类是对象的模板。

方法的回顾和加深

方法的定义

修饰符
  1. public:表示公共的,可以被本包和其他包使用
  2. static:静态的,使方法与类一同加载
返回类型

及方法体执行后的返回值的类型
如果无返回值,可以写为return;或者不写return 语句

方法名
  1. 以驼峰原则命名
  2. 要求见名知意
参数列表

即参数类型、个数、顺序等

异常抛出

这个问题我们会在以后讲
先看一下格式就行

public void readfile(String file) throws IOException{
}

(目前我们已经遇到过数组下标越界的问题)

方法的调用

非静态方法

先实例化再调用
在这里插入图片描述

静态方法

在这里插入图片描述
你们会不会好奇我这个界面是怎么弄的,这么方便,其实很容易,上图:
在这里插入图片描述
在这里插入图片描述

两者的差别

先看几段代码
该代码在idea中未报错

public class Demo01 {
    public static void main(String[] args) {
    }
    public void a(){
        b();
    }
    public void b(){       
    }
}

该代码在idea中也未报错

public class Demo01 {
    public static void main(String[] args) {
    }
    public static void a(){
        b();
    }
    public static void b(){
    }
}

这个代码确报错了

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

    }
    public static void a(){
        b();
    }
    public  void b(){

    }
}

为什么呢?
因为static修饰的方法是和类一起加载的,而无static修饰的方法是在实例化之后才存在的

形参和实参

我们在代码中分析形参和实参

public class Demo01 {
    public static void main(String[] args) {
         int add=Demo01.add(1,2);
    }
    public static int add(int a,int b){
        return a+b;
    }
}

在这段代码中,a,b起到接收1,2两个值的作用,并不是实际存在的变量,叫做形参

public class Demo01 {
    public static void main(String[] args) {
         int a=1;
        System.out.println(a);//输出1
        change(a);
        System.out.println(a);//输出1
    }
    //无返回值
    public static void change(int a){
        a=10;
    }
}

两个输出皆为1,因为change方法中的a不是实际的参数

值传递和引用传递

上面的那段代码就是值传递的示例
而对引用传递:
注意:一个Java文件里可以有多个class,但只能有一个public class

import java.sql.SQLOutput;
//引用传递:对象,本质还是值传递
public class Demo01 {
    public static void main(String[] args) {
        Person person=new Person();
        System.out.println(person.name);//null
        change(person);
        System.out.println(person.name);//wqy
    }
    public static void change(Person person){
        person.name="wqy";
    }
    定义了一个Person类,有一个name属性
    static class Person{
        String name;//null
    }
}
this关键字
//学生类
public class Student {
    //属性:字段
    String name;//null
    int age;//0
    //方法
    public void study(){
        System.out.println(this.name+"在学习");//这里的this.name指向值为null的name
    }
}

以后还会更深入的讲解this

对象的创建分析

类与对象的关系

  1. 类是一种抽象的数据类型,它是对某一事物的整体描述/定义,但是不能代表某一个具体的事物。
    1. 动物、植物、手机、电脑…
    2. Person类,Pet类,Car类,这些类都可以定义、描述某一类具体的事物具有的特点和行为
  2. 对象是抽象概念的具体实例
    1. 张三就是人的一个具体实例
    2. 能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念

创建与初始化对象

  1. 使用new关键字创建对象
  2. 使用new创建对象时,除了分配内存空间外,还会给创建的对象进行默认的初始化以及对类中构造器的使用
  3. 类中的构造器也称为构造方法,是创建对象时必须要调用的,并且构造器有以下两个特点:
    1. 必须和类的名字相同
    2. 必须没有返回值,也不能写void

代码演示

注意:一个项目中应该只有一个main方法。且在Student类中不能初始化name,age的值,否则该类中所有对象的值都将被规定

在这里插入图片描述

构造器

首先,我们先观察一个现象:
图中的Person是我们创建的一个类
在这里插入图片描述
打开项目结构:
在这里插入图片描述
添加内容根:
在这里插入图片描述
选择与我们创建的项目同级的out目录:
在这里插入图片描述
找到反编译生成的Person文件:
在这里插入图片描述
与原来的class文件对比,发现反编译形成的多了一段代码:
public Person(){}
它其实就是一个构造器
这告诉我们:一个类即使什么都不写,也会存在一个方法
我们也可以自己定义一个构造器:
在这里插入图片描述
这里也能用到this关键字:
在这里插入图片描述
还有一种有参数的构造器:
在这里插入图片描述
也可以定义有多个参数的构造器哦

构造器总结
  1. 特点
    1. 和类名相同
    2. 无返回值
  2. 作用
    1. new 本质在调用构造方法
    2. 初始化对象的值
  3. 快捷键:alt+insert新建构造器
    选择生成构造函数在这里插入图片描述
    他会让你选择参数类型:
    在这里插入图片描述
    当然,你也可以点击无选择来新建无参数的构造器
    注意点:定义有参构造器之后,如果使用无参构造,要显示无参构造的定义

Java中的内存讲解

推荐一篇文章:https://blog.csdn.net/qq906627950/article/details/81324825
因为很多东西我们还没学,可以以后慢慢看。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_bxzzy_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值