Java中类和对象的概念

最近要开始投简历了,所以我闲着把Java基础复习一遍。


首先说说类和对象。

今天心情不错,来复习复习Java基础:类和对象。

Java是什么?Java是一门面向对象的编程语言(OOP),想要理解Java,首先要理解类(Class)和对象(Object)这两个概念。


Java中的类可以看成C语言的结构体的升级版。结构体是一种构造数据类型,可以包含不同的成员(变量),每个成员的数据类型可以不一样,可以通过结构体来定义结构体变量,每个结构体拥有相同的性质,举个栗子:

#include <stdio.h>
int main(){
    // 定义结构体 Student
    struct Student{
        // 结构体包含的变量
        char *name;
        int age;
        float score;
    };

    // 通过结构体来定义变量
    struct Student stu1;
    // 操作结构体的成员
    stu1.name = "小明";
    stu1.age = 15;
    stu1.score = 92.5;
 
    printf("%s的年龄是 %d,成绩是 %f\n", stu1.name, stu1.age, stu1.score);

    return 0;
}

运行结果:


小明的年龄是15,成绩是92.500000

Java中的类也是一种构造数据类型,但是对C语言中的结构体有所升级,进行了一些扩展,类的成员不但可以是变量,还可以是函数(方法),通过类定义出来的变量也有特定的称,叫做“对象”,例如:

public class Demo {
    public static void main(String[] args){
        // 定义类Student
        class Student{  // 通过class关键字类定义类
            // 类包含的变量
            String name;
            int age;
            float score;

            // 类包含的函数
            void say(){
                System.out.println( name + "的年龄是 " + age + ",成绩是 " + score );
            }
        }

        // 通过类来定义变量,即创建对象
        Student stu1 = new Student();  // 必须使用new关键字
        // 操作类的成员
        stu1.name = "小明";
        stu1.age = 15;
        stu1.score = 92.5f;
        stu1.say();
    }
}

运行结果:


小明的年龄是15,成绩是92.5

在C语言中,通过结构体名称就可以完成结构体变量的定义,并分配内存空间:C语言Struct Student stu1这样不但定义了结构体变量,并且也分配了内存空间。

但是在Java中,仅仅通过类来定义变量不会分配内存空间的,必须使用new关键字来完成内存空间的分配:Student stu=new Student()。(实际上这条语句相当于Student stu;stu=new Student;这两句代码,第一句代码的意思是创建stu这样一个变量,第二条语句是给stu分配内存空间)。

可以将类比喻成图纸,对象比喻成零件,图纸说明了零件的参数;一张图纸可以生产出具有相同性质的零件,不同图纸可以生产不同类型的零件。

在Java中,使用new关键字就能创建一个对象,即将图纸生产成零,这个过程叫做类的实例化,因此也称为对象是类的一个实例。

注意:类只是一张图纸,起到说明的作用,不占用内存空间;对象才是具体的零件,要有地方来放,才会占用内存空间。

类所包含的变量和函数都有特定的称呼,变量被称为属性,函数被称为方法,属性和方法统称为类的成员。

面向对象编程(Object Oriented Programming, OOP)

类是一个通用的概念,Java,C++,C#,PHP等很多编程语言中都有类,都可以通过类创建对象,可以将类看做结构体的升级版。

因为Java,C++等语言都支持类和对象,所以使用这些语言编写程序被称为面向对象编程(OOP),这些语言也被称为面向对象的编程语言。C语言因为不支持类和对象的概念,被称为面向过程的编程语言。

实际上,面向对象只是面向过程的升级。

面向对象编程在代码执行效率上没有任何优势,相反面向过程编程的代码执行效率要高与面向对象编程。

面向对象编程的主要目的是方便程序组织和管理代码,快速梳理编程思路。

猜你喜欢

转载自blog.csdn.net/xkfanhua/article/details/80543672