第一篇:java程序员
如何迅速成为java高手[tomjava原创]
很多网友问我学习java有没有什么捷径,我说“无他,唯手熟尔”。但是我却很愿意将自己学习的一些经验写出来,以便后来者少走弯路,帮助别人是最大的快乐嘛!
要想学好java,首先要知道java的大致分类。我们知道,自从sun推出java以来,就力图使之无所不包,所以java发展到现在,按应用来分主要分为三大块:j2se,j2me和j2ee,这也就是sun one(open net environment)体系。j2se就是java2的标准版,主要用于桌面应用软件的编程;j2me主要应用于嵌入是系统开发,如手机和pda的编程;j2ee是java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和erp系统。j2se开发桌面应用软件比起vc,vb,dephi这些传统开发语言来说,优势好象并不明显。j2me对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。所以现在应用最广泛又最好学的就是j2ee了。j2ee又包括许多组件,如jsp,servlet,javabean,ejb,jdbc,javamail等。要学习起来可不是一两天的事。
那么又该如何学习j2ee呢?当然java语法得先看一看的,i/o包,util包,lang包你都熟悉了吗?然后再从jsp学起。如果你学过html,那么事情要好办的多,如果没有,那你快去补一补html基础吧。其实jsp中的java语法也不多,它更象一个脚本语言,有点象asp。然后你就该学一学servlet了。servlet就是服务器端小程序,他负责生成发送给客户端的html文件。jsp在执行时,也是先转换成servlet再运行的。虽说jsp理论上可以完全取代servlet,这也是sun推出jsp的本意,可是servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下javabean了,可能你早就看不管jsp在html中嵌java代码的混乱方式了,这种方式跟asp又有什么区别呢?还好,sun提供了javabean可以把你的jsp中的java代码封装起来,便于调用也便于重用。接着就是ejb了,ejb就是enterprise javabean,看名字好象它是javabean,可是它和javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的weblogic,websphere这些j2ee服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。至于jdbc,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用java编发送电子邮件的程序,你就得看看javamail了。
好了,对java和j2ee有了一些基本概念之后,你就应该编一些程序了,千万不要纸上谈兵哦。最好找一些有实例且带光盘的书来看,这样看到好的程序就可以直接ctrl+c再ctrl+v,也不用劳您老大架再亲自把它再输一遍吧,再说直接复制还不用怕出错,何乐而不为呢!还有就是要经常上一些好的java编程文章,有好的文章要cut下来,有问题尽管问,只要问题不是太傻,一般高手都会回答你的。下面介绍几个好的java方面的编程网站:
csdn论坛 http:///那里java资料比较全;
java.com.cnhttp://.cn/看这域名就知道有多牛,注册用户快接近一万了,同时在线人数也在一千左右,人气很旺的;
ibm的开发者网络http://www-900.ibm.com/developerworks/cn/java/index.shtmlibm永远的蓝色巨人;
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!你现在最缺的是实际的工作经验,而不是书本上那些
凭空想出来的程序。所以你快去找一份java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他还愿意不厌其烦地教你,这样好象有点难哦!
还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。学java必读的两个开源程序就是jive和pet store.。jive是国外一个非常著名的bbs程序,完全开放源码。论坛的设计采用了很多先进的技术,如cache、用户认证、filter、xml等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的jive版本—j道。jive(j道版)是由中国java界大名鼎鼎的banq在jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站http:///去下载,或到同济技术论坛的服务器上ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。pet store.(宠物店)是sun公司为了演示其j2ee编程规范而推出的开放源码的程序,应该很具有权威性,想学j2ee和ejb的朋友不要错过了。
你一定会高兴地说,哈哈,原来成为java高手就这么简单啊!记得tomjava也曾碰到过一个项目经理,号称java很简单,只要三个月就可以学会。其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是tomjava泼你冷水,你现在只是学到了java的骨架,却还没有学到java的精髓。接下来你得研究设计模式了。设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧,让你能够真正掌握接口或抽象类的应用,从而在原来的java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你 ……此处隐藏2874个字……ontainskey。因为contains方法容易让人引起误解。
hashtable继承自dictionary类,而hashmap是java1.2引进的map interface的一个实现。
最大的不同是,hashtable的方法是synchronize的,而hashmap不是,在多个线程访问hashtable时,不需要自己为它的方法实现同步,而hashmap 就必须为之提供外同步。
hashtable和hashmap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
2. 同步和异步有何异同,在什么情况下分别使用他们?举例说明。
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
3. final, finally, finalize的区别是什么?
final修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载 finally再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize方法名。java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
4. & 和&& 的区别
& 是位运算符。&& 是布尔逻辑运算符。
5. collection 和 collections的区别
co(更多精彩文章请关注好 范文网www.)llections是个java.util下的类,它包含有各种有关集合操作的静态方法。 collection是个java.util下的接口,它是各种集合结构的父接口。
6. gc是什么? 为什么要有gc? (基础)
gc是垃圾收集器。java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: system.gc() runtime.getruntime().gc()
7. string s = new string("xyz");创建了几个string object?
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s
8. math.round(11.5)等於多少? math.round(-11.5)等於多少?
math.round(11.5)返回(long)12,math.round(-11.5)返回(long)-11;
9. java有没有goto?
goto是java中的保留字,现在没有在java中使用
10. 数组有没有length()这个方法? string有没有length()这个方法?
数组没有length()这个方法,有length的属性。 string有length()这个方法.
11. sleep() 和 wait() 有什么区别? 搞线程的最爱
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。 wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
12. error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
13. int和integer有什么区别
int是基本数据类型,而integer是java提供的类(包装类)。因为java是运用堆栈结构的,int基本类型放在栈里,而integer类是放在堆里的,这是他俩的本质区别。从生命周期上想。int的生命周期短相对于integer。
14. 面向对象的特征有哪些方面 ?
1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
15.swtich是否能作用在byte上,是否能作用在long上,是否能作用在string上?
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
文档为doc格式