Java 对象和类

  1. 初识面向对象

  2. 对象的创建

一、初识面向对象

面向对象这个概念,可以和面向过程概念对比着来理解。

  • 面向过程思想:

    • 执行者角度,线性思维。步骤清晰简单,第一步,第二步……

    • 适合处理较为简单的问题。

  • 面向对象思想:

    • 指挥者角度,分类思维。解决问题时,首先思考的是将问题分类,把它们分配给不同的对象来完成。
    • 适合处理复杂的问题,适合处理需要多人协作的问题。
  • 两个概念的关系:

    • 面对复杂的事物时,我们首先需要使用面向对象的思想,从宏观上分析整个系统。但具体到微观操作时,则仍然需要用面向过程的思路去处理。
    • 面向对象和面向过程不是对立的,而是相辅相成的。面向对象离不开面向过程。

面向对象编程的本质就是:以类的方式组织代码,以对象的方式封装数据

从代码运行角度而言,先有类,后有对象。类是对象的模板。

二、对象的创建

1. 类与对象的关系
  • 类是一种抽象的数据类型,是对某一类事物的整体描述(定义),但是并不能代表一个具体的事物。

    • 人、动物、植物、手机、电脑……
  • 对象是抽象概念的具体实例。

    • 张三就是人的一个具体实例,张三饲养的旺财就是狗的一个具体实例。
2.创建与初始化对象

首先,我们定义一个 Student类 :

public class Student {

    //属性
    String name; //默认值:null
    int age;     //默认值:0

    //方法
    public void study(){
        System.out.println(this.name+"在学习");
    }
}

使用new关键字创建对象:

//一个项目应该只存在一个main方法
public class Application {

    public static void main(String[] args) {

        //类是抽象的,需要实例化
        //类实例化后会返回一个自己的对象(new之后,Ctrl+Alt+V,或者 alt+enter 自动返回)
        //student对象就是一个Student类的具体实例
        //(我们可以将student改为xiaoming,xiaohong,等等,它们都是Student类的具体实例)
        Student student = new Student();
    }
}

使用new关键字创建对象的时候,除了分配空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。

如下所示,我们创建一个新的对象,并输出它的属性值,可以得到该属性的默认值。

        Student xiaoming = new Student();

        System.out.println(xiaoming.name); //输出name值
        System.out.println(xiaoming.age);  //输出age值

运行结果如下:

null
0

我们通过下面的语句对其进行赋值,并输出赋值结果:

        xiaoming.name = "小明";
        xiaoming.age = 8;
        
        System.out.println(xiaoming.name);
        System.out.println(xiaoming.age);

运行结果如下:

小明
8
3.构造方法(构造器)

每个类都有构造方法,构造方法的规则如下:

  • 定义:

    • 构造器名称必须与类同名,一个类可以有多个构造方法。
    • 构造器没有返回值。
  • 作用:

    • 使用new关键字,本质是在调用构造器。
    • 构造器可以初始化类的对象,并返回对象的地址
  • 注意点:

    • 若没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造器。(即定义在 .class 文件中)
    • 构造器分为有参构造器和无参构造器,.class 文件提供的默认构造器是无参的。
    • 一旦定义了有参构造器,那么无参构造器就必须显式定义。

下面是两个构造方法实例,分别为无参构造有参构造

(IntelliJ IDEA 可以 Alt + Insert 自动生成构造器,具体参考这个链接:IDEA自动创建构造器

public class Person {

    String name;
    int age;

    //无参构造器
    public Person() {
    }

    //有参构造器
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

在main方法中调用构造方法:

        //调用无参构造器
        Person person = new Person();
        System.out.println("无参构造器的name属性:"+person.name);
        
        //调用有参构造器
        Person xiaoming = new Person("xiaoming", 8);
        System.out.println("有参构造器的name属性:"+xiaoming.name);

运行结果如下:

无参构造器的name属性:null
有参构造器的name属性:xiaoming
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐