|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的),鉴于上回写的一点感受人人不厌弃,都勉励小弟持续写下往,十分困难比及国庆黄金周,练习总算有一个歇息的阶段,因而这就入手下手写第二篇了。但愿此次写的仍旧对同舟共济的伴侣们有所匡助。上回讲了Java静态加载机制、classLoader道理和关于jdk和jre三个成绩。此次持续着讲一些详细的类库——
1.关于汇合框架类
信任学过Java的列位对这个名词其实不生疏,对java.util.*这个package一定也不生疏。不晓得人人查询API的时分怎样往审阅大概剖析个中的一个package,每一个包最主要的两个部分就是interfaces和classes,接口代表了它能做甚么,完成类则代表了它怎样往做。存眷完成类之前,我们应当先了解分明它的来历接口,不论在j2se仍是j2ee中,都应当是如许。那末我们先看这三个接口:List、Set、Map。
大概有些人不太熟习这三个名字,但信任年夜部分人都熟习ArrayList,LinkedList,TreeSet,HashSet,HashMap,Hashtable等完成类的名字。它们的区分也是满简单了解的,List放能够反复的对象汇合,Set放不成反复的对象组合,而Map则放<Key,Value>如许的名值对,Key不成反复,Value能够。这里有几个简单搅浑的成绩:
究竟Vector和ArrayList,Hashtable和HashMap有甚么区分?
良多口试官喜好问这个成绩,实在更专业一点应当如许问:新汇合框架和旧汇合框架有哪些区分?新汇合框架人人能够在这些包中找sincejdk1.2的,之前的如vector和Hashtable都是旧的汇合框架包含的类。那末区分是?
a.新汇合框架的定名加倍迷信公道。比方List下的ArrayList和LinkedList
b.新汇合框架下全体都长短线程平安的。倡议往jdk内里包括的源代码内里本人往亲身看看vector和ArrayList的区分吧。固然假如是jdk5.0以后的会对照丢脸一点,由于又到场了泛型的语法,相似c++的template语法。
那末人人是不是想过为何要从旧汇合框架默许全体加锁避免多线程会见更新到新汇合框架全体作废锁,默许体例撑持多线程?(固然必要的时分可使用collections的静态办法加锁到达线程平安)
笔者的概念是任何手艺的开展都一定是遵守它们的初志的,良多严重改动是遭到客不雅情况的影响的。人人晓得Java的初志是为何而开辟的麽?是为嵌进式程序开辟的。记得上一篇讲到classLoader机制麽?那恰是为了勤俭嵌进式开辟情况下内存而计划的。而走到明天,Java成了人们心中为互联网出生的言语。互联网意味着甚么?多线程是一定的趋向。客不雅情况在变,Java手艺也跟着飞速开展,招致愈来愈离开它的初志。听说Sun公司实在主打的是J2se,了局又是因为客不雅情况影响,J2se几近忘记,留在人人议论核心的一向是j2ee。
手艺的细节这里就未几说了,只要用了才干真正了解。注释这些恰是为了匡助人人了解正在学的和将要学的任何手艺。以后讲j2ee的时分还会再会商。
多扯句题外话:几十年前的IT伟人是IBM,Mainframe市场无人可比。微软怎样打败IBM?恰是因为硬件飞速开展,对团体PC的需求这个客不雅情况,让微软经由过程OS称为了第二个伟人。下一个打败微软的呢?Google。怎样做到的?假如微软其实不和IBM争年夜型机,Google借着互联网飞速开展这个客不雅情况作为决意性要素,避开跟微软争OS,而是走搜刮引擎这条路,称为第3个伟人。那末第4个伟人是谁呢?良多专家预言将在亚洲大概中国呈现,Whatever,客不雅情况变更趋向才是决意小气向的关头。固然笔者也但愿会呈现在中国,^_^~~
2.关于Java计划形式
身旁的良多在看GOF的23种计划形式,仿佛进修它不管在黉舍仍是退职场,都成了一种盛行习尚。我不想枚举注释这23种DesignPattern,我写这些的初志一向都是谈本人的履历和意见,但愿能匡助人人了解。
起首我以为计划形式只是对一类成绩的一种通用办理举措,只需是面向对象的编程预言都能够用得上这23种。了解它们最好的办法就是亲身往写每种,哪怕是一个复杂的使用就充足了。假如代码完成也记不住的话,影象它们对应的UML图会是一个对照好的举措,固然条件是必需懂得UML。
同时最好能使用Java本身的类库匡助影象,比方对照经常使用的察看者形式,在java.util.*有现成的Observer接口和Observable这个完成类,看看源代码信任就充足了解察看者形式了。再好比粉饰器形式,人人只需写几个关于java.io.*的程序就能够完整了解甚么是粉饰器形式了。有良多人以为刚进门的时分不应打仗计划形式,好比图灵计划丛书系列很着名的那本《Java计划形式》,作者:StevenJohnMetsker,年夜部分例子厚道说令如今的我也很利诱。但我仍旧分歧意进门跟进修计划形式有任何抵触,只是我们必要晓得每种形式的观点的和典范的使用,如许我们在第一次编写FileOutputStream、BufferedReader、PrintWriter的时分就可以感到到本来计划形式离我们云云之近,并且并非何等奥秘的工具。
别的,在进修某些形式的同时,反而更能匡助我们了解java类库的某些特性。比方当你编写原型(Prototype)形式的时分,你必需懂得的是java.lang.Cloneable这个接口和一切类的基类Object的clone()这个办法。即深copy和浅copy的区分:
Object.clone()默许完成的是浅copy,也就是复制一份对象拷贝,但假如对象包括其他对象的援用,不会复制援用,以是原对象和拷贝共用谁人援用的对象。
深copy固然就是包含对象的援用都一同复制啦。如许原对象和拷贝对象,都分离具有一份援用对象。假如要完成深copy就必需起首完成java.lang.Cloneable接口,然后重写clone()办法。由于在Object中的clone()办法是protected署名的,而Cloneable接口的感化就是把protected缩小到public,如许clone()才干被重写。
那末又有个成绩了?假如援用的对象又援用了其他对象呢?如许一向判别并复制下往,是否是显得很贫苦?已经有位先辈告知我的办法是重写clone办法的时分间接把原对象序列化到磁盘上再反序列化返来,如许不必判别就能够失掉一个深copy的了局。假如人人不懂得序列化的作法倡议看一看ObjectOutputStream和ObjectInputStream
归根结柢,形式只是头脑上的工具,把它当做后人总结的履历实在一点都不为过。勉励人人下手本人往写,比方代办署理形式,能够复杂的写一个Child类,Adult类。Child要买任何工具由Adult来代办署理完成。复杂来讲就是Adult里的buy()外部实践挪用的是Child的buy(),但是表露在main函数的倒是Adult.buy()。如许一个复杂的程序就充足了解代办署理形式的基础寄义了。
来自:http://topic.csdn.net/u/20070924/21/18482496-082f-4907-8751-b80ab5d56622.html?seed=1386683868
恰恰证明了java的简单,要不怎么没有通过c/c++来搞个这种框架? |
|