类与对象

Java中的- -类 与 对象

①序言:

Java的学习过程中,必须认知的两个思维:⑴ 类是模板,对象才是实例。写类的目的,是为了生成对象。⑵ Java中,一切皆是对象。

⑴为什么说:类是模板,对象才是实例。

第一:在Java中,类是一种对象的描述文件。而我们平常写的,后缀为 .java的类,其实是Sun公司提供给开发者的一种可视化编程方式。也就是说,任何一个类,都是在Java规范下写的一些描述性的语句。可以这么说,如果一个类不创建出实例,它就像一张设计图纸,并没有任何意义。

第二:我们知道,程序最终都是要在真实设备上运行的。从所周知,运行Java程序的是Java虚拟机(简称:jvm)。JVM虽然只是一个虚拟机(其实也只是一个软件而已),但是,可以这么说:jvm是一种构建在系统上的真实设备。虽然你看不到,但它却是真实存在的。(这个不用深究,你就把它想象成一个处理程序的CPU就可以了)

第三:虽然运行Java程序的是JVM,但是大家不要忘记,所有程序的最终载体都是计算机!而计算机的核心是CPU,CPU只跟内存中的数据打交道。因此,所有能使用的数据,都必须先在内存中存在,而能在内存中存在的,唯有二进制数据 。

而类是由很多java语句组成的抽象事物的描述文件,并不是实例。所以要在JVM中使用一个类。则它的实例,必须先在内存中存在:即要先new出该对象。而 new 出一个对象的工作由Java虚拟机来完成。

综上三个原因:类只是一个模板。其实这跟C语言中的 .c 文件一样,.c文件也只是模板。两者的不同在于:

1、.c文件编译的时候,生成的是二进制文件。而.java文件编译生成的是字节码(JVM专用的,因为执行程序的是JVM)。
2、.c文件生成的二进制文件是由系统去逐条解析每一行指令的意思。而Java的字节码的解析是由Java虚拟机来完成。
3、虽然两者的解析工具不同。但是不要忘了,JVM是在系统的基础上构建出来的虚拟机。当我们的Java程序想操作计算机上的硬件设备的时候。必须通过与底层系统的交互来完成。

⑵为什么说:Java中,一切皆是对象。

从上面,我们知道,运行Java程序的是JVM。在JVM中运行的,都必须是在内存中真实存在的数据。而每一个类在new出对象的时候(其实就是创建数据),Java把这些数据关联了起来,封装成了一个对象(其实就是把这些有关联的数据:统称为一个对象)。至于jvm是怎么实现的,就不得而知了。

所以说:Java中,一切皆对象的思想。通过上面的分析,我们还得出另外一个结论:学习编程的重点不是怎么写代码,而更多考虑的是程序的运行!


②类的三要素

学习一门编程语言,都是先从语法开始学起。Java中通常最先接触的是——类。什么是类呢?这个不是本文的重点。本文的重点是:当我们由一个类,new它的对象时,这个对象与它内部的属性的关系。

任何一个类,一定会有这三要素:属性、构造器、方法。我们来看一个简单的例子:

package parents;  

public class Person {
//没有定义构造器

// 下面定义了两个成员变量
public Dog dog;
public int age;
//下面定义了一个say方法            
public void say(String content) {
    System.out.println(content);
    }
}

1、构造器

构造器,又称之为构造方法。有时候我们写一个类,没有定义构造器,系统将为它提供一个默认的构造器,系统提供的构造器总是没有参数的。

2、属性
属性,又称之为成员变量。首先我们要知道,任何一个类,它的方法都是有限的。如果要使用一些它本身并没有的功能。则必须借助于其他的类。例如:上面的例子中:Person类中,声明了一个Dog类型的成员变量dog 。

当你在写一个类的时候,你要思考这么个问题:这个Persion类与dog是一种什么关系?

在回答这问题之前,我们先来思考一个问题。我们都知道,程序的入口都是从main方法开始。当我们的程序被不断执行的时候,会new出各种各样的对象!我们来看以下这个例子:

package parents;  

public class Person {
//没有定义构造器

// 下面定义了两个成员变量
public Dog dog=new Dog();//添加的代码
public int age;
//下面定义了一个say方法            
public void say(String content) {
    System.out.println(content);
    }
}

注意:上面的代码中,我们给成员变量dog指向了一个实例。那么请问new dog() 这个对象是属于这个Person类的呢?还是Person类的实例呢?都不是。

任何对象(实例)都属于JVM的,对象的创建也是由JVM来完成的。它并不是属于任何一个对象。
对象与对象之间是一种平等的关系。并不会谁从属与谁。他们都只属于JVM。上面的dog只是一个引用变量,它指向的是new Dog()这个对象。因此,由Person类生成的对象 与 new Dog() 之间只是一种 引用的持有。即Person类的实例,持有另一个实例的引用,这样Person对象就能使用另一个对象的方法和属性了。

上面的问题中,对于第一个问题很好实现。然而对于第二个问题,这就涉及到了this的使用了。对象可以通过方法把自己的引用传送给一方。

3、方法

类的方法没有什么好讲的。我们在使用一个类的时候,千万不要想着看完每一个方法。我们只要看自己用到的方法就可以了。因为一个类可能会由于各种功能,需要很多类的支持。如果我们只是使用它的某一个方法,并不需要那么多类的支持。其次,方法与方法之间并不会牵连太多。每个方法都是比较独立的,除非是一些复用性较高的方法,才可能牵涉的比较多。

反正我们只要关注我们要用的方法就可以了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值