你找下对象了吗?

如果没有那是你方法不对。

当你掌握了逻辑思维,并有一些哲学思想的时候,对象指日可待!

我们今天还是从面向对象的哲学问题来思考如何去找个对象

生活中的面向对象(你知道你为什么不懂面向对象吗)(1)

引言

我们学面向对象,都是学什么叫对象,再到类的封装,继承,抽象,多态等去分析我们的面向对象这四个字。但是呢,我这里为什么说“你不懂面向对象其实是因为你不懂哲学”?难道我们懂了哲学就理解了面向对象爱吗?当然不是这么去理解得的。

生活中的面向对象(你知道你为什么不懂面向对象吗)(2)

其实,在面向对象里面,的确包含了哲学的思想在里面,大家可以去搜面向对象与哲学,我相信一定会有很多,因为我搜索过。我们需要先来明确几点内容:

系统中一切事物皆为对象;

对象是属性(成员变量)和方法的封装体;

类是一类具有相同性质的对象的集合,对象是这个类的实例;

消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;

方法是消息传递的一个基本序列。

生活中的面向对象(你知道你为什么不懂面向对象吗)(3)

面向对象的世界观

说起哲学,笔者首先想到的是人生观,价值观,爱情观,世界观等观念,这里我们讲世界观。世界观是指处在什么样的位置、用什么样的时间段的眼光去看待与分析事物,它是人对事物的判断的反应。它是人们对世界的基本看法和观点。面向对象的哲学中,世界是由具有不同运动规律和不同状态的对象组成,而不同对象之间的相互作用和联系构成了世界。可以看下,这难道不是哲学中对我们现实世界的一个基本描述吗?

聊到世界观,就会聊到方法论。方法论是如何去证明世界观的学说,也就是 “why” 的问题。这个问题其实我们在之前已经讨论过了,对象的四大特性(本人遵循阿里标准,认为抽象是对象的特性之一。)就是他的方法论的最好的体现。

从Object看哲学

说道对象,我们不得不说Java中隐藏祖先,Object。在Java中,所有的类都会继承Object,而在Object中,我们又可以很好的去解释一些哲学性问题。我们先来看Object:(当然,如果你看不懂,不要紧我们跳过这个话题,去下一阶段

public class Object { private static native void registerNatives(); static { registerNatives(); } public final native Class<?> getClass(); public native int hashCode(); public boolean equals(Object obj) { return (this == obj); } protected native Object clone() throwsCloneNotSupportedException; public String toString() { return getClass().getName() "@" Integer.toHexString(hashCode()); } public final native void notify(); public final native void notifyAll(); public final native void wait(long timeout) throwsInterruptedException; public final void wait(long timeout, int nanos) throwsInterruptedException { if (timeout < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (nanos < 0 || nanos > 999999) { throw new IllegalArgumentException( "nanosecond timeout value out of range"); } if (nanos > 0) { timeout ; } wait(timeout); } public final void wait() throws InterruptedException { wait(0); } protected void finalize() throws Throwable { } }

生活中的面向对象(你知道你为什么不懂面向对象吗)(4)

我是谁

万物三问第一问,我是谁。我们知道,Java的程序运行会有一个可执行文件 .class ,这是一个Java程序能够执行的必要条件,随后我们的 JVM 的 ClassLoad 会去加载这个 .class 文件得到里面的一切。

在Object 中,getClass()就是在告诉我们,“我”是谁。而里面的 toString() 则是 “我” 在世界中的名片,展示自己。

道理都是一样,不介绍自己,别人怎么知道你是谁?我们怎么知道我们是谁?

我从哪里来

有人问你,你从何处来?要到何处去?你回答,贫僧从东土大唐而来,要往西天而去。佛家也会去究其本源。更何况于我们的Object呢?

我们使用 new ClassName() 去创建一个对象,之所以能这么做,是因为在我们的 类中有一个构造器: ClassName()的方法,这是我们创建对象的必要条件,但是我们的 ClassName 类中又看不到,默认自带空的构造器。在Object中也是如此。

同样,我们可以看到在Object中,还存在一个方法,clone() , 这是它的一种繁殖的方式,得到的 克隆体 与本体无二,但不是同一个个体。这是对象的唯一性。

生活中的面向对象(你知道你为什么不懂面向对象吗)(5)

你是谁?

我要去哪里

有人问你,你从何处来?要到何处去?你回答,贫僧从来处来,要到去处去。在我们的Java中,一个对象最后的归宿是在哪?Object回答了你。finalize(),是的,销毁了。

你要是问,能不销毁吗?答案,不能。一定要销毁。我们知道,对象在使用完之后,也就是去了它存在的意义,换句话说,它已经到达了它的生命周期,在它有限的生命中,它将它自己点燃,投入到无限的为系统服务中去,现在它的生命走到了尽头,自然要归于世界之中。就像我们人一样,死后,化做一抔黄土,归于天地之间。

生活中的面向对象(你知道你为什么不懂面向对象吗)(6)

世界因我的不同而精彩

世界的多姿多彩,是因为世界中的每个对象都是独一无二的,在这个世界上,你找不到两片相同的树叶。同样,在面向对象中,你找不到两个一样的对象。

每个人都会有自己的标签,对像也一样,hashCode() ,为你的对象打上一个标签,告诉你,她是你的唯一,而你,就是她的全世界。

也许,你们现在还不知道对方在何处,但当你们相遇之时,确认过眼神,你发现她就是那个对的人,这时候,equals() 告诉你,别再擦肩而过了,你找的人就在眼前。世界就是这么奇妙,只因为一个回眸,我就找到自己的那个你。

生活中的面向对象(你知道你为什么不懂面向对象吗)(7)

世界因联系而变得紧密

人生中,我们总会遇到那个人,从相遇到相知,再到相爱。在面向对象中也是如此。当你们相遇了,你需要告诉她,跟她说:“我在等你,你跟我走吧”。这时候,notify()在你和她之间充当一条通信的介质,可是她还在想要不要和你走呢?wait()让你静静的等待着她的点头。她笑着跟你说,除非你让全世界都知道。所以,为了她,notifyAll()在你和世界间搭建了一条通道,终于,你和你的对象双双归去,过上了幸福快乐的生活,直到finalize() 。

到这里,你还会觉得,面向对象不是一个哲学问题吗?

,