【JavaSE】面向对象之类和对象

面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP)等新的系统开发方式模型的研究。

对 Java 语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序开发。

一、认识类

在面向对象中,类和对象是最基本、最重要的组成单元。类实际上是表示一个客观世界某类群体的一些基本特征抽象。对象就是表示一个个具体的东西。所以说类是对象的抽象,对象是类的具体。
每个人都有身高、体重、年龄、血型等属性,人会劳动、会直立行走、会用自己的头脑去创造工具等方法。人之所以能区别于其他类型的动物,是因为每个人都具有“人”这个群体的属性与方法。


人-类

由此可见,类是描述了一组有相同特性(属性)和相同行为(方法)的一组对象的集合。

二、认识对象

对象或实体所拥有的特征在类中表示时称为类的属性。例如,每个人都有具体的姓名、年龄和体重,这是所有人共有的特征。但是每一个对象实例的属性值又各不相同。
对象执行的操作称为类的方法。比如,“人”这个对象都具有的行为是“吃饭”,因此,吃饭就是“人”类的一个方法。


人-实例

三、类和对象的区别

类:对一系列相同事物的抽象
对象:是一个具体的事物
类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象。

对象和类的关系是特殊到一般,具体到抽象。
类:我们叫做 class
对象:我们叫做 Object , instance (实例)。以后我们说某个类的 对象 ,某个类的实例 。是一样的意思。

四、类的创建

4.1语法:

class 类名{
  //属性
  修饰符 数据类型 变量名
  ....
  
  //方法
  修饰符 数据类型 方法名(){
    ....
  }
}

示例:

public class Student {
    public String name;
    public int age;
    public String numid;
    public String major;
  
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

4.2 属性(field,成员变量)

属性用于定义该类或该类对象包含的数据或者说静态属性
属性作用范围是整个类体
属性定义格式:在类中,所有方法和代码块之外
[修饰符] 属性类型 属性名 [= 默认值] ;
在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。(数值:0,0.0,char:\u0000, boolean:false, 所有引用类型:null)

4.3应用类型

Java 语言中除基本类型之外的变量类型都称之为引用类
型。
Java中的对象是通过引用对其操作的。

4.4内存分析

栈:

  1. 每个线程私有,不能实现线程间的共享!
  2. 局部变量放置于栈中。
  3. 栈是由系统自动分配,速度快!栈是一个连续的内存空间!

堆:

  1. 放置new出来的对象!
  2. 堆是一个不连续的内存空间,分配灵活,速度慢!
  3. 存储状态无序

方法区:

  1. 被所有线程共享!
  2. 用来存放程序中永远是不变或唯一的内容。(类代码信息、静态变量、字符串常量)

4.5类方法

方法则用于定义该类或该类的实例的行为特征和功能实现。方法是类和对象行为特征的抽象。面向对象中,整个程序的基本单位是类,方法是从属于类的。

[修饰符] 方法返回值类型 方法名(形参列表) {
   方法体; 
}

五、对象的创建和使用

5.1 对象创建

必须通过new关键字创建对象。
Person p = new Person();
调用对象属性:使用 对象(引用)。 成员变量来引用对象的成员变量。
p.name;
调用对象方法:使用 对象(引用) 。方法(参数列表)来调用对象的方法。
p.run();
同一类的每个对象有不同的成员变量存储空间。
同一类的每个对象共享该类的方法。
注意:
new 的作用:

  1. 在堆中为对象开辟空间,成员变量会跟随被创建的对象进入堆内存中并赋默认值
  2. 调用构造器为对象初始化信息
  3. 将地址返回给引用

5.2构造器(构造方法,一种特殊的方法)

使用:必须跟随new使用,是创建对象的一步
作用:初始化对象信息
注意:

  • 通过new关键字调用!!
  • 构造器虽然有返回值,但是不能定义返回类型(返回值的类型肯定是本类),不能在构造器里使用带数据的return语句。(return;
  • 如果我们没有定义构造器,则系统会自动定义一个无参的构造函数。如果已定义则编译器不会添加!
  • 构造器的方法名必须和类名一致!

5.3 构造器重载

构造方法也是方法,只是稍微特殊一点而已,方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。 调用时,会根据不同的参数表选择对应的方法。

public class Student {
    public String name;
    public int age;
    public String numid;
    public String major;

    public Student(){
    }

    public Student(String name, int age, String numid, String major) { //方法重载
        this.name = name;
        this.age = age;
        this.numid = numid;
        this.major = major;
    }
}

你可能感兴趣的:(【JavaSE】面向对象之类和对象)