什么是对象?

Java是面向对象的语言,而面向对象编程主要体现了继承、封装、多态三个特性,那么什么是对象?

其实翻译已经做得很好了,只要理解了这个汉字——象。

《易·系辞》:在天成象。

【疏】謂懸象日月星辰也。

《易·系辞》:象也者,像此者也。

【疏】言象此物之形狀也。

什么是“象”?象,万物之形,万物之状,万物之况,万物之相也。

天地万事万物都是一个个存在,一个个实体,然而这个实体虽然存在,若是没有人能看到它,没有某个意识能够察觉到它,它便等于不存在,没有存在的意义,没有存在的价值。因此,象并不真正指那个实际存在,一切象形只不过是我们人类所看,所觉,所观测到的而已,而每个人所看到的都不会真正相同;一切都在变化中,没有真正永恒的实体;人绝难真正、彻底了解一个事物的本来面目,正如佛学所说:“色即是空,空即是色;色不亦空,空不亦色”,“一切有为法,如梦幻泡影,如露亦如电,应作如是观”。(这种哲学问题还可以参考量子学的观察者模式)

说的抽象了,哈,什么又是抽象呢?抽出某个存在的“象”,就是抽象了。象是概念,是人对事物的理解,是事物的特性集合,可以代表那个事物,虽然无法真正意义上的表述。所以,抽象,实际意思是获取某个事物的“象”的过程,由于这个过程不好理解,于是抽象还具有了难以理解,很陌生化的意思。

编程语言是计算机世界语言,相当于现实世界的规则,真正掌握了规则的人就可以成为造物主。当然,计算机世界也是我们真实世界的一部分;而计算机世界的造物主就是程序员了,造物主创造出来的一个个东西就可以描述为“对象”。同样,这也可以用其他词语称呼,不用执着,老子也说过:“道可道,非恒道也;名可名,非恒名也”,“吾不知其名,强谓之曰’道‘”,一切名相只是事物的描述,只要一描述就不是那个事物。

那么具体怎么“造物”?在不同的编程语言中有所不同。在java中,“造物”的过程就是实例化对象,具体的代码表现为:

new 类名();

于是问题又出来了,在编程语言中,什么是类?

类就是所要描述事物的各个属性、功能的集合。当然类作为一个存在,无论是概念上的存在,还是作为承载具体代码的文件的存在,还是其他的形式,这当然也是一种对象。

作为概念上的存在来说,类只不过是我们用编程语言描述某个事物的”象“的集合,是不真正具有实体的,不像一本书,一个椅子那样,而是人的意识划分出来的。

作为承载代码的存在,它便具有了”身体“,它的身体就是电脑上某个xxx.java或xxx.cpp这样的文件,”开膛破肚“后,可以看到”public xxx“等器官或细胞。

那么,代码造物的具体形式是什么样的?以Java语言来编写,选取现实世界不存在的一个人物——孙悟空,作为描述的对象。代码如下:

public class 孙悟空{
    private String name;//名字
    private double height;//身高,悟空的身高是可变的
    private double weight;//体重,悟空的体重同样是可变的
    private static final String racist = "灵明石猴"; //种族,悟空是灵明石猴,还在娘胎里就确定了。由于作者已经作古,于是不能更改了。改的是同人小说。
    /**
    *设置名字,菩提老祖取的
    */
    public void setName(String name){
        this.name = name;
    }
    /**
    *获取名字
    */
    public String getName(){
        return name;
    }
    /**
    *设置身高
    */
    public void setHeight(double height){
        this.height = height;
    }
    /**
    *获得身高
    */
    public double getHeight(){
        return height;
    }
    /**
    *设置体重
    */
    public void setWeight(double weight){
        this.weight = weight;
    }
    /**
    *获取体重
    */
    public double getWeight(){
        return weight;
    }
    /**
    *获取种族名称
    */
    public String getRecist(){
        return racist;
    }
    }

当《西游记》开播后:

public class 西游记 {

    public static void main(String[] args) throws InterruptedException {
        System.out.println("《西游记》开始了\n");
        Thread.sleep(1000);
        System.out.println("……女娲补天结束了...在花果山留下一块五彩石\n");
        Thread.sleep(1000);
        System.out.println("五彩石每天吸收日月精华...\n");
        Thread.sleep(3000);//五彩石继续吸收中
        System.out.println("过了n多万年,终于五彩石内孕仙胎...\n");
        Thread.sleep(1000);

        孙悟空 wuKong = new 孙悟空();//创建对象
        wuKong.setHeight(1.6);//悟空大概1.6米高
        wuKong.setWeight(70);//悟空大概70斤,虽然是石头

        System.out.println("石破天惊,花果山天产石猴出世了,目射金光,直冲牛斗,玉帝命千里眼顺风耳查探……\n");
        Thread.sleep(1000);

        System.out.println("石猴种族:"+wuKong.getRecist());
        System.out.println("千里眼顺风耳报告:石猴身高大概"+wuKong.getHeight());
        System.out.println("石猴体重大概:"+wuKong.getWeight());
        Thread.sleep(1000);

        System.out.println("\n……石猴当上猴王,因感生老病死,出海遍寻真师……\n");
        Thread.sleep(3000);//石猴继续寻找中...

        System.out.println("过了数年……到了“灵台方寸山,斜月三星洞”……拜师菩提老祖\n");
        wuKong.setName("孙悟空");
        System.out.println("菩提老祖为石猴取名:"+wuKong.getName());
        Thread.sleep(1000);

        System.out.println("\n……悟空得授法术……");
        Thread.sleep(1000);

        System.out.println("悟空施展法天相地……\n");
        wuKong.setHeight(999);
        wuKong.setWeight(999);
        Thread.sleep(1000);

        System.out.println("于是悟空身高:"+wuKong.getHeight());
        System.out.println("体重:"+wuKong.getWeight());

        System.out.println("\n…………………………………………");
        System.out.println("……取经大业开始……");
        Thread.sleep(3000);
        System.out.println("……功德圆满……");
        System.out.println("--西游记完--");
    }

}

运行效果:

《西游记》开始了

……女娲补天结束了…在花果山留下一块五彩石

五彩石每天吸收日月精华…

过了n多万年,终于五彩石内孕仙胎…

石破天惊,花果山天产石猴出世了,目射金光,直冲牛斗,玉帝命千里眼顺风耳查探……

石猴种族:灵明石猴

千里眼顺风耳报告:石猴身高大概1.6

石猴体重大概:70.0

……石猴当上猴王,因感生老病死,出海遍寻真师……

过了数年……到了“灵台方寸山,斜月三星洞”……拜师菩提老祖

菩提老祖为石猴取名:孙悟空

……悟空得授法术……

悟空施展法天相地……

于是悟空身高:999.0

体重:999.0

…………………………………………

……取经大业开始……

……功德圆满……

–西游记完–

时间: 2024-11-02 06:15:31

什么是对象?的相关文章

通过jQuery Ajax使用FormData对象上传文件

转自:http://www.cnblogs.com/labnizejuly/p/5588444.html FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". <form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file"

对象序列化和反序列--Hibernate的查询和新增极其相似

Hibernate几个关键字持久化,ORM(关系对象映射)(数据库中关系称作是一张表) 应用在项目中,刘一从写的查询代码,每次都挂掉,想要弄出测试数据,自己想着把查询出来的复杂数据弄到文件里自己要是去造那些复杂数据很麻烦public class Object1 { public static void main(String args[]){ HashMap<String, Object> obj=new HashMap<String,Object>(); obj.put(&quo

C#中XML与对象之间的序列化、反序列化

using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Xml.Utility { public static class XmlUtil { /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列化

菜鸟学python之对象类型及运算

Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型. 等号(=)用来给变量赋值. 1 变量赋值 1.1 单个变量赋值 >>> name="python" >>> print(name) python 1.2 多个变量赋值 >>> name=names="python&

java 类对象使用

在学习反射机制时,总结一下获得类对象方式: 第一种方式:通过类本身来获得对象 Class<?> classname = this.getClass(); 或者this.class 第二种方式:通过子类的实例获取父类对象 ClassName cn = new ClassName(); UserClass = cn.getClass(); Class<?> SubUserClass = UserClass.getSuperclass(); 第三种方式:通过类名加.class获取对象 C

dbutils封装对象,单列,一行一列(用)

基本用法:查找并封装对象与对象集合 public User findUserByNamePassword(String name,String password){ QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "select * from user where name='"+name+"' and password = '"+password

Class类 获取Class对象

阅读API的Class类得知,Class 没有公共构造方法.Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的 获取Class对象的三种方式(实例采用Person类) 方式1:通过Object类的getObject()方法 Person p = new Person(); Class c = p.getClass(); 方式2: 通过 类名.class 获取到字节码文件对象(任意数据类型都具备一个class静态属性,看上去要比第一种方

Linux共享对象之编译参数fPIC(转)

最近在看Linux编程的基础知识,打算对一些比较有趣的知识做一些汇总备忘,本文围绕fPIC展开,学习参考见文末. 在Linux系统中,动态链接文件称为动态共享对象(DSO,Dynamic Shared Objects),简称共享对象,一般是以.so为扩展名的文件.在Windows系统中,则称为动态链接库(Dynamic Linking Library),很多以.dll为扩展名.这里只备忘Linux的共享对象. 在实现一共享对象时,最一般的编译链接命令行为: g++ -fPIC -shared t

JavaScript 对象

JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 此外,JavaScript 允许自定义对象. JavaScript 对象 JavaScript 提供多个内建对象,比如 String.Date.Array 等等. 对象只是带有属性和方法的特殊数据类型. 建 JavaScript 对象 通过 JavaScript,您能够定义并创建自己的对象. 创建新对象有两种不同的方法: 定义并创建对象的实例 使用函数来定义对象,然后创建新的对象实例

hibernate载入持久化对象的两种方式——get、load

一.get与load对照 在hibernate中get和load方法是依据id取得持久化对象的两种方法.但在实际使用的过程中总会把两者混淆,不知道什么情况下使用get好,什么时候使用load方法效率更高.下边具体说一下get和load的不同,有些时候为了对照也会把find加进来. 1.从返回结果上对照: load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常 get方法检索不到的话会返回null 2.从检索运行机制上对照: get方法和fin