Javase学习7---Java中的类和对象

 

1.   对象和类的抽象形容

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;
}

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();
    }
}

 2.  类和对象的使用

2.1 类的使用方法:

 

类定义完成之后,肯定无法直接使用。如果要使用,必须依靠对象,那么由于类属于引用数据类型,所以对象的产生格式(两种格式)如下:

2.2 对象的使用方法:

对象的创建

1.  声明并实例化对象

     

2.先声明对象,然后实例化对象:

引用数据类型与基本数据类型最大的不同在于:引用数据类型需要内存的分配和使用。所以,关键字new的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字new来分配内存空间。

对象的属性赋值和对象的方法调用

我们把给对象赋值叫做类的实例化;问题来了,以上两种不同的实例化方式有什么区别呢? 
我们从内存的角度分析。首先,给出两种内存空间的概念: 
(1)堆内存:保存对象的属性内容。堆内存需要用new关键字来分配空间; 
(2)栈内存:保存的是堆内存的地址(在这里为了分析方便,可以简单理解为栈内存保存的是对象的名字)。

任何情况下,只要看见关键字new,都表示要分配新的堆内存空间,一旦堆内存空间分配了,里面就会有类中定义的属性,并且属性内容都是其对应数据类型的默认值。

于是,上面两种对象实例化对象方式内存表示如下: 
这里写图片描述

两种方式的区别在于①②,第一种声明并实例化的方式实际就是①②组合在一起,而第二种先声明然后实例化是把①和②分步骤来。

另外,如果使用了没有实例化的对象,结果如何? 、

则程序在编译的时候不会出现任何的错误,但是在执行的时候出现了上面的错误信息。这个错误信息表示的是“NullPointerException(空指向异常)”,这种异常只要是应用数据类型都有可能出现。

对象引用传递初步分析

引用传递的精髓:同一块堆内存空间,可以同时被多个栈内存所指向,不同的栈可以修改同一块堆内存的内容。就是用同一个类可以生成对个对象,同一个对象进行复制之后2.0版本的对象也可以修改1.0对象的内容,因为复制实际上只是地址复制了,堆中的位置复制而已;

1,

11

2.

12

垃圾:指的是在程序开发之中没有任何对象所指向的一块堆内存空间,这块空间就成为垃圾,所有的垃圾将等待GC(垃圾收集器)不定期的进行回收与空间的释放。

 

在面向对象定义之中,也规定了一些基本的特征: 
(1)封装:保护内部的操作不被破坏; 
(2)继承:在原本的基础之上继续进行扩充; 
(3)多态:在一个指定的范围之内进行概念的转换。

总结:

在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语言因为不支持类和对象的概念,被称为面向过程的编程语言。

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值