27

类Object中包含的方法

类Object中包含一下方法: clone(); equals(); finalize(); getClass();[align=left][/align] notify(),notifyAll(); hashCode(); toString(); wait(); 我们知道所有的类都是继承于Object,所以我们编写的类默认都具有这些方法,究竟这些方法做什么用,需要让所有的对象都拥有,我将一一来解释。 首先大家要明白回调(callback)方法,所谓回调方法就是程序在运行特定功能时JVM会自动调动这些方法,假设你使用System.out.print(obj)打印出对象obj信息,则运行时JVM会自动调用obj对象的toString()方法,toString()方法就是回调方法。理解回调方法后,下面我们来看这些方法: [list] clone():clone方法主要用于克隆当前对象,制作本地对象,这肯定需要在所有对象中所拥有,在讲解参数按值传递和按引用传递时再讲解它的用法; [*]equals()、toString()和hashCode():这两个方法主要用于比较两个对象是否相等,查看Object源代码(要多查看源代码便于自己理解)知道,默认的equals()是: Java代码 boolean equals(Object obj){ return this == obj; } boolean equals(Object obj){ return this == obj; } , ==只有当两个对象地址相同时才返回true,所以默认的equals()方法根本没什么用,因为对象在内存中的地址(基本类型不同)肯定不同的;所以我们编写类时最好覆盖默认的equals()、hashCode()和toString()方法(查看JDK中的类也大部分覆盖了这些方法),默认的hashCode()返回的值就是对象在内存中的地址,而默认的toString()方法就是打印出对象的地址,toString()和equals()方法内部是通过hashCode()的返回值来实现的,hashCode()是本地(native)方法,所谓本地方法就是使用其他语言(C或C++)编写的,我们可以通过本地接口(JNI)编写本地方法; finalize():这是GC清理对象之前所调用的清理方法,是回调方法,我们可以覆盖这个方法写一些清理的代码,GC会自动扫描没有引用的对象,即对象赋值为null;可以通过调用System.runFinalization()或System.runFinalizersOnExit()强制GC清理该对象前调用finalize()方法,GC有时不会调用对象的finalize()方法(由JVM决定); getClass():返回当前对象的Class类的对象引用,用于取得类名等(方法查看API); notify()、notifyAll()和wait():这三个方法主要用于多线程中,讲解多线程时再具体解释。 [/list] 这是我个人对Object中方法的理解,有失误之处望大虾们指出。

26

北京,北京

纽约,上海,重庆,北京 习惯了的空旷街道变为充满了熙熙攘攘的人群,这就是重回帝都的第一感觉。 端午节间找好房子,约了面试,我的北漂之旅就这样开始了。 住自己好运:)

15

unix shell learning-Unixfor Poets

Those problem below are interesting and useful, if you are a newbie of unix shell programming you should read them : ) ===================================================================================================================================================== – 1 -Unixfor Poets Kenneth Ward Church AT&T Bell Laboratories kwc@research.att.com • Text is available like never before • … Continue reading

25

解决Django没有环境变量的错误

环境变量错误: <code>ImportError(“Settings cannot be imported, because environment variable %s is undefined.” % ENVIRONMENT_VARIABLE)     ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.</code> <code>——————————————————————————————————————-</code> __author__ = ‘Mars’ import os #在这里直接设置环境变量 #just setting var here os.environ['DJANGO_SETTINGS_MODULE'] = “dj.settings” … Continue reading

21

视频:南加大枪击事件

视频:南加大枪击事件 同是留学生,也是即将毕业,看了这个视频,不禁感慨。 其实留学这个事情,是如鱼在水冷暖自知,没有经历,很难了解其中滋味。 枪击事件后网上的一些言论只能代表少数脑残,但即使脑残也有资格活下去。 至于对脑残的谴责,谩骂大可不必,他们也是可怜人,也许只能借着网络发泄一下。 世界上无知,愚昧是永恒的存在,所以我们才需要不断的学习,探索,求知。 争取让自己不变成他们中的一员。 逝者已逝,望生者坚强,祝福两人的父母,亲人,朋友早日从悲痛中走出来。          

18

unix IPC 汇总

写unix作业,找了下参考资料,汇总在这方便查询~ ========================================================================= 共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区。在/proc/sys/kernel/目录下,记录着共享内存的一些限制,如一个共享内存区的最大字节数shmmax,系统范围内最大共享内存区标识符数shmmni等,可以手工对其调整,但不推荐这样做。 一、应用 共享内存的使用,主要有以下几个API:ftok()、shmget()、shmat()、shmdt()及shmctl()。 1)用ftok()函数获得一个ID号. 应用说明: 在IPC中,我们经常用用key_t的值来创建或者打开信号量,共享内存和消息队列。 函数原型: key_t ftok(const char *pathname, int proj_id); Keys: 1)pathname一定要在系统中存在并且进程能够访问的 3)proj_id是一个1-255之间的一个整数值,典型的值是一个ASCII值。 当成功执行的时候,一个key_t值将会被返回,否则-1被返回。我们可以使用strerror(errno)来确定具体的错误信息。 考虑到应用系统可能在不同的主机上应用,可以直接定义一个key,而不用ftok获得: #define IPCKEY 0×344378 2)shmget()用来开辟/指向一块共享内存的函数 应用说明: shmget()用来获得共享内存区域的ID,如果不存在指定的共享区域就创建相应的区域。 函数原型: int shmget(key_t key, size_t size, int shmflg); key_t key 是这块共享内存的标识符。如果是父子关系的进程间通信的话,这个标识符用IPC_PRIVATE来代替。如果两个进程没有任何关系,所以就用ftok()算出来一个标识符(或者自己定义一个)使用了。 int size 是这块内存的大小. … Continue reading

15

SQLite Tutorial

A very good tutorial for sqlite3~ ====================================================================================================== Copyright (c) 2004 by Mike Chirico mchirico@users.sourceforge.net This material may be distributed only subject to the terms and conditions set forth in the Open Publication License v1.0, 8 June 1999 or later. The … Continue reading

14

hashmap,linkedlist,arraylist

Hash 集合的性能比任何 List 的性能都要高,但每条目的成本也要更高。由于访问性能方面的原因,如果您正在创建大集合(例如,用于实现缓存),那么最好使用基于 Hash 的集合,而不必考虑额外的开销。 对于并不那么注重访问性能的较小集合而言,List 则是合理的选择。ArrayList 和 LinkedList 集合的性能大体相同,但其内存占用完全不同:ArrayList 的每条目大小要比 LinkedList 小得多,但它不是准确设置大小的。List 要使用的正确实现是 ArrayList 还是 LinkedList 取决于 List 长度的可预测性。如果长度未知,那么正确的选择可能是 LinkedList,因为集合包含的空白空间更少。如果大小已知,那么 ArrayList 的内存开销会更低一些。 选择正确的集合类型使您能够在集合性能与内存占用之间达到合理的平衡。除此之外,您可以通过正确调整集合大小来最大化填充率、最小化未得到利用的空间,从而最大限度地减少内存占用。   HashMap、Hashtable、LinkedHashMap、和TreeMap介绍和区别 2012年5月28日 Kathyrani 发表评论 阅读评论 映射表(map)用来存放键/值对,如果提供了键,就能够找到对应的值。一个映射不能包含重复的键;每个键最多只能映射一个值,因为如果key相同,新的value将取代旧的 java类库为映射定义了一个接口java.util.Map,它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap 1.hashmap中元素的排列顺序是随机的 TreeMap按键值排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。散列或比较函数只能作用于键,与键关联的值不能进行散列或 比较 … Continue reading