你能用几句话解释面向对象?(上)

简介: 一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是我该让谁来。面向对象最小的程序单元是类,必须先存在类的定义,再有对象,而具备某种功能的实体,称为对象。

1.JPG


一、面向过程和面向对象

1.1、面向过程


强调的是我该怎么去做。即功能的执行过程,即先干啥,后干啥。在面向过程中,我们会写很多的函数,每一个函数负责完成某一个功能。


2.JPG


而一个主函数里面有多个小函数,需要完成某个功能的时候依次调用即可


3.JPG


由此我们发现面向过程的设计思想存在以下几个缺陷:系统软件适应性差,可拓展性差,维护性低。


1.2、面向对象


一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是我该让谁来做

面向对象最小的程序单元是类,必须先存在类的定义,再有对象,而具备某种功能的实体,称为对象


面向过程和面向对象的差别如下:


4.JPG


面向过程和面向对象各有千秋,面向对象更符合我们常规的思维方式,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性,它拥有三大特征:


  1. 封装
  2. 继承
  3. 多态


二、变量


2.1、变量的分类


根据变量定义的位置的不同,我们大致可以把变量分为两大类:


  1. 成员变量:直接定义在类中,方法的外面,又称之为字段,不是属性
  2. 局部变量:除了成员变量外,其他变量都是局部变量,仅仅存在于方法内、代码块、方法的形式参数中


2.2、变量的初始值


变量的初始化表示在内存中开辟一个存储空间进行存储,只有初始化后才可以使用,不同的变量类型初始值不同


成员变量

默认是有初始值的,不同类型的初始值不同


数据类型 初始的默认值
byte、short、int、long 0
float、double 0.0
char 一个空字符(空格) "\u0000"
boolean false
引用数据类型 null(表示不引用任何对象

局部变量


局部变量没有初始值,必须手动初始化才可以使用


2.3、变量的作用域


变量根据定义的位置不同,也决定了各自的作用域是不同的,关键是看变量所在的花括号的位置


成员变量

在所定义的类中都有效


局部变量

从开始定义的位置到花括号内有效,花括号外就无效了


2.4、变量的生命周期


变量的生命周期,通俗的来说就是变量在内存中可以存活多久


成员变量

成员变量是属于对象的,对象在堆内存中,所以成员变量也是存储在堆内存中的,随着对象的1消亡而消亡


局部变量

局部变量是存储在栈内存的,随着方法的调用的结束而消亡

局部变量是存储在方法中的,每次调用方法都会在栈空间开辟一个内存空间,我们成为栈帧,方法1调用结束,栈帧就被销毁了,内存中存储的变量数据也就销毁了


三、类


3.1、类的定义


类是拥有相同特性(状态)和行为(功能)的多个对象的抽象

  • 使用成员变量来表示状态
  • 使用成员方法来表示行为


格式

public class 类名{
    //可编写0到N个成员变量
   修饰符 数据类型 变量名1;
   修饰符 数据类型 变量名2;
    //可编写0到N个成员方法
    修饰符 返回值类型 方法名称(参数){
        //方法体
    }
}
复制代码


注意:

  1. 成员方法和变量都不可以用static修饰,修饰符不是必须的
  2. 在描述对象的类中,不需要定义main方法,main方法在专门的测试类中编写,切测试类和描述对象的类是分开编写的


四、对象


4.1、对象的创建


类名 对象遍历名 = new 类名();
复制代码


如果我们直接打印对象的话,打印的是类似数组地址的hashCode值


4.2、匿名对象


创建对象之后没有赋值给某个遍历,只能使用一次


new 类名();
复制代码


4.3、给字段设置数据


对象变量名.字段名 = 值;
复制代码


4.4、获取字段的数据


数据类型 变量 = 对象变量.字段名;
复制代码


4.5、对象调用方法


对象变量名.方法(参数);
复制代码


4.6、对象实例化的内存分析


以下面简单地Cat类进行分析


public class Cat(){
    String name;
    int age;
}
复制代码

创建对象

Cat cat = new Cat();
复制代码


5.JPG


此时如果通过查看对象的name和age属性可以发现分别为初始值null和0


给对象赋值

cat.name="xiaolin";
cat.age=18;
复制代码




6.JPG

对象调用方法

public class Cat(){
    String name;
    int age;
    public void say(){
        System.out.println("我们一起学猫叫");
    }
}
复制代码


7.JPG


五、构造器(构造方法)


5.1、构造器的定义


构造器,也称之为构造方法(Constructor),作用是用来创建对象和给对象做初始化操作,只能在创建对象的时候使用一次


构造器的语法

public 类名(参数){
    //方法体
}
//示范:
public class Cat {
  public Cat() {
  }
    //省略其他代码
}
复制代码


构造器的特点

  1. 构造器名称和类名相同
  2. 不能定义返回类型
  3. 构造器中不能出现return语句


5.2、默认构造器


我们在创建类的时候,没有手动写构造器,而没有报错,原因是因为如果我们在编写对象的时候,如果没有写构造器的话,编译器会在编译源文件的时候,自动创建一个默认构造器,默认构造器的特点:无参数、无方法体。

如果类使用了public修饰,那么他默认的构造器也会使用public修饰,反之亦然


5.3、构造器的使用


没有构造器之前

之前,我们是先通过一个默认参数构造器,先创建出一个对象再初始化(给字段设置值)


Cat cat = new Cat();
c.name = "xialin";
c.age = 18;
复制代码


有了构造器之后

有了构造器之后,可以直接通过构造器同时完成对象创建和初始化操作


public class Cat {
  String name;
  int age;
  public Cat(String name, int age) {
    this,name = name;
    this.age = age;
  }
  void say() {
    System.out.println("我是" + name + ",今年" + age + "岁");
  }
}
复制代码
Cat cat = new Cat("zs", 19);
cat.say();
Cat cat = new Cat();  //  此行报错
复制代码


当自己定义出构造器之后,编译器不再创建默认的构造器了,所以就不再自动有无参构造器,我们一般在开发中无参构造器和有参构造器会同时编写,他们构成重载关系


public class Cat {
  String name;
  int age;
    //无参数构造器
  public Cat() {
  }
    //带参数构造器
  public Cat(String name, int age) {
    this,name = name;
    this.age = age;
  }
    //其他代码
}
复制代码


相关文章
|
1月前
|
人工智能 算法 物联网
代码之禅:从功能实现到艺术表达
在数字世界的无限编织中,技术并非僵化的工具,而是承载创造力与哲思的容器。本文将探讨编程不仅仅是逻辑与算法的堆砌,更是一场思维与美学的交响。我们将透过编程语言的框架,捕捉那些在字符间跳跃的灵感火花,从而揭示编程艺术的深层价值。
8 0
|
1月前
|
人工智能 算法
【算法】深入理解 Prolog:逻辑编程的奇妙世界
【算法】深入理解 Prolog:逻辑编程的奇妙世界
24 0
|
8月前
|
程序员 测试技术 开发工具
高端的程序员通常具有以下一些朴素的编程方式
高端的程序员通常具有以下一些朴素的编程方式
80 2
|
8月前
|
缓存 NoSQL 关系型数据库
高端的程序员,都有哪些朴素的编程方式?
在当今互联网时代,程序员已经成为了一类备受关注的职业。而高端的程序员往往有化代码为神奇的能力,那么今天就邀请大家,一起分享下都有哪些朴素的编程方式?
86 1
|
8月前
|
Java 程序员 C语言
用最通俗易懂的方法解释什么是面向对象
用最通俗易懂的方法解释什么是面向对象
53 0
|
10月前
|
存储 C++
C++ Primer Plus 第十一章答案 使用类
只有聪明人才能看见的摘要~( ̄▽ ̄~)~
53 0
|
设计模式 存储 算法
理论:第七章:用生活的案例解释23种设计模式
理论:第七章:用生活的案例解释23种设计模式
105 0
理论:第七章:用生活的案例解释23种设计模式
|
安全 前端开发 数据库
并发编程常用术语通俗解释
并发编程常用术语通俗解释
|
JavaScript 前端开发 API
【重温基础】14.元编程
【重温基础】14.元编程
224 0
|
XML Java 数据格式
你能用几句话解释面向对象?(下)
一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是我该让谁来。面向对象最小的程序单元是类,必须先存在类的定义,再有对象,而具备某种功能的实体,称为对象。
110 0
你能用几句话解释面向对象?(下)