Java学习思路

文章描述:-2022年4月13日发(作者:邬宝恒)一、JDK(JavaDevelopmentKit)1、JDK的下载和安装...2、JDK的命令工具...二、JDKDocumentation.三、应用服务器(AppServer)AppServer是运行Java企业组件的平台,构成了应用软件的主要运行环境。当前主流的AppServer是BEA公司的WeblogicServer和IBM公司的Websphere

-

Java学习思路
2022年4月13日发
(作者:邬宝恒)

一、JDK(JavaDevelopmentKit)1、JDK的下载和安装...2、JDK的命令工具...

二、JDKDocumentation.

三、应用服务器(AppServer)AppServer是运行Java企业组件的平台,构成了应用软件的主要运

行环境。当前主流的AppServer是BEA公司的WeblogicServer和IBM

公司的Websphere以及免费的Jboss,选择其中一个进行学习就可以了,

个人推荐Weblogic,因为它的体系结构更加干净,开发和部署更加方便,

是Java企业软件开发人员首选的开发平台。下面简要介绍几种常用的App

Server:1、Tomcat2、BEAWeblogic.3、IBMWebshpere

四、Java应用的运行环境Java的应用可以简单分为以下几个方面:1、Java的桌面应用桌面应用一般仅仅需要JRE的支持就足够了。2、JavaWeb应用Java的Web应用至少需要安装JDK和一个web容器(例如Tomcat),

以及一个多用户数据库,Web应用至少分为三层:Browser层:浏览器显示用户页面Web层:运行Servlet/JSPDB层:后端数据库,向Java程序提供数据访问服务3、Java企业级应用企业级应用比较复杂,可以扩展到n层,最简单情况会分为4层:Browser层:浏览器显示用户页面Client层:Java客户端图形程序(或者嵌入式设备的程序)直接和

Web层或者EJB层交互Web层:运行Servlet/JSPEJB层:运行EJB,完成业务逻辑运算DB层:后端数据库,向Java程序提供数据访问服务4、Java嵌入式应用Java嵌入式应用是一个方兴未艾的领域,从事嵌入式开发,需要从

Sun下载J2ME开发包,J2ME包含了嵌入式设备专用虚拟机KVM,和普通

的JDK中包含的JVM有所不同。另外还需要到特定的嵌入式厂商那里下载

模拟器。学习一门新的知识,不可能指望只看一本,或者两本书就能够完全掌

握。需要有一个循序渐进的阅读过程。我推荐Oreilly出版的Java系列

书籍。在这里我只想补充一点看法,很多人学习Java是从《Thinkingin

Java》这本书入手的,但是我认为这本书是不适合初学者的。我认为正确

的使用这本书的方法应该是作为辅助的读物。《ThinkinginJava》并不

是在完整的介绍Java的整个体系,而是一种跳跃式的写作方法,是一种

类似tips的方法来对Java很多知识点进行了深入的分析和解释。对于初学者来说,最好是一本Java入门的书籍,但是比较完整的

循序的介绍Java的语法,面向对象的特性,核心类库等等,在看这本书

的同时,可以同步来看《ThinkinginJava》,来加深对Java的理解和

原理的运用,同时又可以完整的了解Java的整个体系。对于Java的入门书籍,蔡学镛推荐的是Oreilly的《ExploringJava,

2ndEdition》或者《Javainautshell,2ndEdition(针对C++背景)》,

我并没有看过这两本书。其实我觉得电子工业出版社的《Java2编程详

解》或者《Java2从入门到精通》就很不错。在所有的Java书籍当中,其实最最有用的,并不是O'reilly的Java

Serials,真正最最有用处是JDK的Documentation!几乎你想获得的所

有的知识在Documentation里面全部都有,其中最主要的部分当然是Java

基础类库的API文档,是按照package来组织的,对于每一个class都有

详细的解释,它的继承关系,是否实现了某个接口,通常用在哪些场合,

还可以查到它所有的public的属性和方法,每个属性的解释,意义,每

个方法的用途,调用的参数,参数的意义,返回值的类型,以及方法可能

抛出的异常等等。可以这样来说,所有关于Java编程方面的书籍其实都

不过是在用比较通俗易懂的语言,和良好的组织方式来介绍

Documentation里面的某个package里面包含的一些类的用法而已。所以

万变不离其宗,如果你有足够的能力来直接通过Documentation来学习

Java的类库,那么基本上就不需要看其他的书籍了。除此之外,

Documentation也是编程必备的手册,我的桌面上有三个Documentation

的快捷方式,分别是J2SDK1.4.1的Documentation,Servlet2.3的

Documentation和J2SDKEE1.3.1的Documentation。有了Documentation,

什么其他的书籍都不需要了。对于JavaWeb编程来说,最核心的是要熟悉和掌握HTTP协议,这

个就和Java无关了,在熟悉HTTP协议之后,就需要熟悉Java的实现HTTP

协议的类库,也就是ServletAPI,所以最重要的东西就是ServletAPI。

当然对于初学者而言,直接通过ServletAPI来学习Web编程有很大的难

度,我推荐O'reilly的《JavaServerPages》这本书来学习Web编程。EJB的书籍当中,《EnterpriseJavaBeans,2ndEdition》是一本

很不错的书,EJB的学习门槛是比较高,入门很难,但是这本书完全降

低了学习的难度,特别重要的一点是,EJB的学习需要结合一种AppServer

的具体实现,所以在学习EJB的同时,必须同步的学习某种AppServer,

而这本书相关的出了三本书,分别是Weblogic6.1,Websphere4.0和

JBoss3.0上面部署书中例子的实做。真是既有理论,又有实践。在学习

EJB的同时,可以边看边做,EJB的学习会变得很轻松。但是这本书也有一个问题,就是版本比较旧,主要讲EJB1.1规范和

部分EJB2.0的规范。而EdRoman写的《MasteringEJB2.0》这本书完

全是根据EJB2.0规范写的,深入浅出,覆盖了EJB编程的各个方面,并

且还有很多编程经验tips,也是学习EJB非常推荐的书籍之一。如果是结合Weblogic来学习J2EE的话,《J2EE应用与BEAWeblogic

Server》绝对是首选读物,虽然是讲述的Weblogic6.0,仍然值得购买,

这本书是BEA官方推荐的教材,作者也是BEA公司的工程师。现在中文版

已经随处可见了。这本书结合Weblogic介绍了J2EE各个方面的技术在

Weblogic平台上的开发和部署,实践指导意义非常强。在掌握了Java平台基础知识和J2EE方面的知识以后,更进一步的是

学习如何运用OO的方法进行软件的设计,那么就一定要学习“设计模

式”。Sun公司出版了一本《J2EE核心模式》,是每个开发Java企业平

台软件的架构师必备的书籍。这本书全面的介绍了J2EE体系架构的各种

设计模式,是设计师的必读书籍。

JavaLearningPath

(三)过程篇每个人的学习方法是不同的,一个人的方法不见得适合另一个人,我

只能是谈自己的学习方法。因为我学习Java是完全自学的,从来没有问

过别人,所以学习的过程基本上完全是自己摸索出来的。我也不知道这种

方法是否是比较好的方法,只能给大家提供一点参考了。学习Java的第一步是安装好JDK,写一个Hello其实JDK的学习没

有那么简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:

一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的

ClassLoader是如何加载Class的;另一个问题是package和import问

题,如何来寻类的路径问题。把这两个问题摸索清楚了,就扫除了学习

Java和使用JDK的最大障碍。推荐看一下王森的《Java深度历险》,对

这两个问题进行了深入的探讨。World,此外JavaWeb编程学习的重点要放在WebApplication的设计模式

上,如何进行业务逻辑的分析,并且进行合理的设计,按照MVC设计模式

的要求,运用Servlet和JSP分别完成不同的逻辑层,掌握如何在Servlet

和JSP之间进行流程的控制和数据的共享,以及WebApplication应该如

何配置和部署。第七步,J2EE编程以上的学习过程如果是比较顺利的话,进行到这一步,难度又陡然提

高。因为上面的知识内容都是只涉及一个方面,而像EJB,JMS,JTA等核

心的J2EE规范往往是几种Java技术的综合运用的结晶,所以掌握起来难

度比较大。首先一定要学习好JDI,JDI是AppServer定位服务器资源(EJB

组件,Datasouce,JMS)查方法,如果对JDI不熟悉的话,EJB,JMS

这些东西几乎学不下去。JDI其实就是.*这个包,运用起

来很简单。难点在于服务器资源文件的配置。对于服务器资源文件的配置,

就需要看看专门的文档规范了,比如的写法,的写

法等等。针对每种不同的AppServer,还有自己的服务资源配置文件,

也是需要熟悉的。然后可以学习JTA,主要是要理解JTA对于事务的控制的方法,以及

该在什么场合使用JTA。这里可以简单的举个例子,我们知道一般情况可

以对于一个数据库连接进行事务控制

(oCommit(false),....,()),做为一个原子操

作,但是假设我的业务需求是要把对两个不同数据库的操作做为一个原子

操作,你能做的到吗?这时候只能用JTA了。假设操作过程是先往A数据

库插一条记录,然后删除B数据库另一个记录,我们自己写代码是控制不

了把整个操作做为一个原子操作的。用JTA的话,由AppServer来完成

控制。在学习EJB之前要学习对象序列化和RMI,RMI是EJB的基础。接着

学习JMS和EJB,对于EJB来说,最关键是要理解EJB是如何通过RMI来

实现对远端对象的调用的,以及在什么情况下要用到EJB。在学习完EJB,JMS这些东西之后,你可能会意识到要急不可待学习

两个领域的知识,一个是UML,另一个是DesignPattern。Java企业软

件的设计非常重视框架(Framework)的设计,一个好的软件框架是软件开

发成功的必要条件。在这个时候,应该开始把学习的重点放在设计模式和

框架的学习上,通过学习和实际的编程经验来掌握EJB的设计模式和J2EE

的核心模式。J2EE规范里面,除了EJB,JMS,JTA,Servlet/JSP,JDBC之外还有

很多很多的企业技术,这里不一一进行介绍了。另外还有一个最新领域WebServices。WebServices也完全没有任

何新东西,它像是一种黏合剂,可以把不同的服务统一起来提供一个统一

的调用接口,作为使用者来说,我只要获得服务提供者给我的WSDL(对

服务的描述),就够了,我完全不知道服务器提供者提供的服务究竟是

EJB组件,还是.et组件,还是什么CORBA组件,还是其他的什么实现,

我也不需要知道。WebServices最伟大的地方就在于通过统一的服务提

供方式和调用方式,实现了整个Internet服务的共享,是一个非常令人

激动的技术领域。WebServices好像目前还没有什么很好的书籍,但是

可以通过在网络上面查资料的方式来学习。第二步是学习Java的语法。Java的语法是类C++的,基本上主流的

编程语言不是类C,就是类C++的,没有什么新东西,所以语法的学习,

大概就是半天的时间足够了。唯一需要注意的是有几个不容易搞清楚的关

键字的用法,public,protected,private,static,什么时候用,为什

么要用,怎么用,这可能需要有人来指点一下,我当初是完全自己琢磨出

来的,花了很久的时间。不过后来我看到《ThinkinginJava》这本书上

面是讲了这些概念的。第三步是学习Java的面向对象的编程语言的特性的地方。比如继承,

构造器,抽象类,接口,方法的多态,重载,覆盖,Java的异常处理机

制。对于一个没有面向对象语言背景的人来说,我觉得这个过程需要花很

长很长时间,因为学习Java之前没有C++的经验,只有C的经验,我是

大概花了一个月左右吧,才彻底把这些概念都搞清楚,把书上面的例子反

复的揣摩,修改,尝试,把那几章内容反复的看过来,看过去,看了不下

5遍,才彻底领悟了。不过我想如果有C++经验的话,应该一两天时间足

够了。那么在这个过程中,可以多看看《ThinkinginJava》这本书,对

面向对象的讲解非常透彻。可惜的是我学习的时候,并没有看到这本书,

所以自己花了大量的时间,通过自己的尝试和揣摩来学会的。第四步就是开始熟悉Java的类库。Java的基础类库其实就是JDK安

装目录下面jrelib这个包。学习基础类库就是学习。基

础类库里面的类非常非常多。据说有3000多个,我没有统计过。但是真

正对于我们来说最核心的只有4个,分别是.*;.*;.*;.*;这四个包的学习,每个包的学习都可以写成一本厚厚的教材,而

O'reilly也确实是这样做的。我觉得如果时间比较紧,是不可能通过读

四本书来学习。我觉得比较好的学习方法是这样的:首先要通读整个package的框架,了解整个package的class,

interface,exception的构成,最好是能够到介绍整个包框架的文章。

这些专门介绍包的书籍的前几章应该就是这些总体的框架内容介绍。对包整体框架的把握并不是要熟悉每个类的用法,记住它有哪些属

性,方法。想记也记不住的。而是要知道包有哪些方面的类构成的,这些

类的用途是什么,最核心的几个类分别是完成什么功能的。我在给人培训

的时候一般是一次课讲一个包,所以不可能详细的介绍每个类的用法,但

是我反复强调,我给你们讲这些包的不是要告诉你们类的方法是怎么调用

的,也不要求你们记住类的方法调用,而是要你们了解,Java给我们提

供了哪些类,每个类是用在什么场合,当我遇到问题的时候,我知道哪个

类,或者哪几个类的组合可以解决我的问题,That'all!,当我们具体写

程序的时候,只要你知道该用哪个类来完成你的工作就足够了。编码的时

候,具体的方法调用,是边写代码,边查Documentation

,所有的东西都

在Documentation里面,不要求你一定记住,实际你也记不住3000多个

类的总共将近10万个方法调用。所以对每个包的总体框架的把握就变得

极为重要。第五步,通过上面的学习,如果学的比较扎实的话,就打好了Java

的基础了,剩下要做的工作是扫清Documentation里面除了上面4个包之

外的其他一些比较有用处的类。相信进展到这一步,Java的自学能力已

经被培养出来了,可以到了直接学习Documentation的水平了。除了要做

GUI编程之外,JDK里面其他会有用处的包是这些:.*;.*;.*;这些包里面真正用的比较多的类其实很少,只有几个,所以不需要花

很多时间。第六步,JavaWeb编程Web编程的核心是HTTP协议,HTTP协议和Java无关,如果不熟悉

HTTP协议的话,虽然也可以学好Servlet/JSP编程,但是达不到举一反

三,一通百通的境界。所以HTTP协议的学习是必备的。如果熟悉了HTTP

协议的话,又有了Java编程的良好的基础,学习Servlet/JSP简直易如

反掌,我学习Servlet/JSP就用了不到一周的时间,然后就开始用JSP

来做项目了。在Servlet/JSP的学习中,重头仍然是ServletDocumentation。

ServletAPI最常用的类很少,花比较少的时间就可以掌握了。把这些类

都看一遍,多写几个例子试试。Servlet/JSP编程本质就是在反复调用这

些类来通过HTTP协议在WebServer和Brower之间交谈。另外对JSP,

还需要熟悉几个常用JSP的标记,具体的写法记不住的话,临时查就是了。

此外JavaWeb编程学习的重点要放在WebApplication的设计模式上,

如何进行业务逻辑的分析,并且进行合理的设计,按照MVC设计模式的要

求,运用Servlet和JSP分别完成不同的逻辑层,掌握如何在Servlet

和JSP之间进行流程的控制和数据的共享,以及WebApplication应该如

何配置和部署。第七步,J2EE编程以上的学习过程如果是比较顺利的话,进行到这一步,难度又陡然提

高。因为上面的知识内容都是只涉及一个方面,而像EJB,JMS,JTA等核

心的J2EE规范往往是几种Java技术的综合运用的结晶,所以掌握起来难

度比较大。首先一定要学习好JDI,JDI是AppServer定位服务器资源(EJB

组件,Datasouce,JMS)查方法,如果对JDI不熟悉的话,EJB,JMS

这些东西几乎学不下去。JDI其实就是.*这个包,运用起

来很简单。难点在于服务器资源文件的配置。对于服务器资源文件的配置,

就需要看看专门的文档规范了,比如的写法,的写

法等等。针对每种不同的AppServer,还有自己的服务资源配置文件,

也是需要熟悉的。然后可以学习JTA,主要是要理解JTA对于事务的控制的方法,以及

该在什么场合使用JTA。这里可以简单的举个例子,我们知道一般情况可

以对于一个数据库连接进行事务控制

(oCommit(false),....,()),做为一个原子操

作,但是假设我的业务需求是要把对两个不同数据库的操作做为一个原子

操作,你能做的到吗?这时候只能用JTA了。假设操作过程是先往A数据

库插一条记录,然后删除B数据库另一个记录,我们自己写代码是控制不

了把整个操作做为一个原子操作的。用JTA的话,由AppServer来完成

控制。在学习EJB之前要学习对象序列化和RMI,RMI是EJB的基础。接着

学习JMS和EJB,对于EJB来说,最关键是要理解EJB是如何通过RMI来

实现对远端对象的调用的,以及在什么情况下要用到EJB。在学习完EJB,JMS这些东西之后,你可能会意识到要急不可待学习

两个领域的知识,一个是UML,另一个是DesignPattern。Java企业软

件的设计非常重视框架(Framework)的设计,一个好的软件框架是软件开

发成功的必要条件。在这个时候,应该开始把学习的重点放在设计模式和

框架的学习上,通过学习和实际的编程经验来掌握EJB的设计模式和J2EE

的核心模式。J2EE规范里面,除了EJB,JMS,JTA,Servlet/JSP,JDBC之外还有

很多很多的企业技术,这里不一一进行介绍了。另外还有一个最新领域WebServices。WebServices也完全没有任

何新东西,它像是一种黏合剂,可以把不同的服务统一起来提供一个统一

的调用接口,作为使用者来说,我只要获得服务提供者给我的WSDL(对

服务的描述),就够了,我完全不知道服务器提供者提供的服务究竟是

EJB组件,还是.et组件,还是什么CORBA组件,还是其他的什么实现,

我也不需要知道。WebServices最伟大的地方就在于通过统一的服务提

供方式和调用方式,实现了整个Internet服务的共享,是一个非常令人

激动的技术领域。WebServices好像目前还没有什么很好的书籍,但是

可以通过在网络上面查资料的方式来学习。

(四)方法篇Java作为一门编程语言,最好的学习方法就是写代码。当你学习一个

类以后,你就可以自己写个简单的例子程序来运行一下,看看有什么结果,

然后再多调用几个类的方法,看看运行结果,这样非常直观的把类给学会

了,而且记忆非常深刻。然后不应该满足把代码调通,你应该想想看如果

我不这样写,换个方式,再试试行不行。记得哪个高人说过学习编程就是

个破坏的过程,把书上的例子,自己学习Documentation编写的例子在运

行通过以后,不断的尝试着用不同的方法实现,不断的尝试破坏代码的结

构,看看它会有什么结果。通过这样的方式,你会很彻底的很精通的掌握

Java。

举个例子,我们都编过HelloWorld

publicclassHelloWorld{

publicstaticvoidmain(String[]args){

n("HelloWorld");

}

}很多初学者不是很理解为什么main方法一定要这样来定义public

staticvoidmain(String[]args),能不能不这样写?包括我刚学习Java

的时候也有这样的疑问。想知道答案吗?很简单,你把main改个名字运

行一下,看看报什么错误,然后根据出错信息进行分析;把main的public

取掉,在试试看,报什么错误;static去掉还能不能运行;不知道main

方法是否一定要传一个String[]数组的,把String[]改掉,改成int[],

或者String试试看;不知道是否必须写args参数名称的,也可以把args

改成别的名字,看看运行结果如何。我当初学习Java的时候就是这样做的,把HelloWorld程序反复改

了七八次,不断运行,分析运行结果,最后就彻底明白为什么了main方

法是这样定义的了。此外,我对于staic,public,private,Exception,try{}catch

{}finally{}等等等等一开始都不是很懂,都是把参考书上面的例子运行

成功,然后就开始破坏它,不断的根据自己心里面的疑问来重新改写程序,

看看能不能运行,运行出来是个什么样子,是否可以得到预期的结果。这

样虽然比较费时间,不过一个例子程序这样反复破坏几次之后。我就对这

个相关的知识彻底学通了。有时候甚至故意写一些错误的代码来运行,看

看能否得到预期的运行错误。这样对于编程的掌握是及其深刻的。

JavaLearningPath(一)工具篇-JavaLearningPath(二)书籍篇-Java

LearningPath(三)过程篇-JavaLearningPath(四)方法篇-Java

LearningPath(五)资源篇-java入门与加深FAQ:一、准备篇-java入

门与加深FAQ:三、I/O篇-java入门与加深FAQ:四、关键字篇-java入

门与加深FAQ:五、面向对象篇-java入门与加深FAQ:六、篇-其别值得一提的是JDK有一个非常棒的调试功能,-verbose,

javac–verbose以及其它很多JDK工具都有这个选项,-verbose可以

显示在命令执行的过程中,JVM都依次加载哪里Class,通过这些宝贵的

调试信息,可以帮助我们分析出JVM在执行的过程中都干了些什么。另外,自己在学习过程中,写的很多的这种破坏例程,应该有意识的

分门别类的保存下来,在工作中积累的典型例程也应该定期整理,日积月

累,自己就有了一个代码库了。遇到类似的问题,到代码库里面Copy&

Paste,Search&Replace,就好了,极大提高了开发速度。最理想的情

况是把一些通用的例程自己再抽象一层,形成一个通用的类库,封装好。

那么可复用性就更强了。所以我觉得其实不是特别需要例程的,自己写的破坏例程就是最好的

例子,如果你实在对自己写的代码不放心的话,我强烈推荐你看看JDK

基础类库的Java源代码。在JDK安装目录下面会有一个,解开

来就可以完整的看到整个JDK基础类库,也就是的Java源代码,

你可以参考一下Sun是怎么写Java程序的,规范是什么样子的。我自己

在学习Java的类库的时候,当有些地方理解的不是很清楚的时候,或者

想更加清晰的理解运作的细节的时候,往往会打开相应的类的源代码,通

过看源代码,所有的问题都会一扫而空。

JavaLearningPath(五)资源篇/(英文)Sun的Java网站,是一个应该经常去看的地方。不用多说。/developerWorks/cn/IBM的developerWorks网站,英语好的直接去英文主站点看。这里

不但是一个极好的面向对象的分析设计网站,也是WebServices,Java,

Linux极好的网站。强烈推荐!!!/(英文)关于Java很多新技术的讨论和新闻。想多了解Java的方方面面的应

用,这里比较好。/的开发者园地,BEA作为最重要的AppServer厂商,有很多独到

的技术,在Weblogic上做开发的朋友不容错过。/home/(英文)TheServerSide是一个著名的专门面向JavaServer端应用的网站。/JSP技术网站,有相当多的Java方面的文章和资源。/SourgeForge是一个开放源代码软件的大本营,其中也有非常非常丰

富的Java的开放源代码的著名的软件。

一、准备篇....

二、命令篇

7我写了第一个Java程序,应该如何编译/运行?答:首先请将程序保存为文件,然后在dos窗口下使用javac

命令,你会发现该目录下多了一个文件,再使用java

xxx命令,你的java程序就开始运行了。

8我照你说的做了,但是出现什么"磈avac不是内部或外部命令,也不

是可运行的程序或批处理文件。"。答:你遇到了path问题。操作系统在一定的范围(path)内搜索

,但是没能到。请编辑你的操作系统环境变量,新增一个

JAVA_HOME变量,设为你JDK的安装目录,再编辑Path变量,加上一

项%JAVA_HOME%bin。然后关掉并新开一个dos窗口,你就可以使用javac

和java命令了。

9环境变量怎么设置?答:请向身边会设的人咨询。

顺利通过了,但是javaxxx的时候显示什么

“oClassDefFoundError”。答:你遇到了classpath问题。java命令在一定的范围(classpath)内

搜索你要用的class文件,但是未能到。首先请确认你没有错敲成java

,其实你并不需要设置该变量,但如果你设置了该变量又没有

包含.(代表当前目录)的项,你就会遇到这个问题。请在你的CLASSPATH

环境变量中加入一项.或干脆删掉这个变量。如果你使用了并非JDK自带

的标准包,比如t.*包,也会遇到这个问题,请将相应的jar

文件加入classpath。如果你在java源文件中定义了package,请参见

15。

11我在javaxxx的时候显示"Exceptioninthread"main"

MethodError:main"。答:首先,在你的程序中每个java文件有且只能有一个public类,这

个类的类名必须和文件名的大小写完全一样。其次,在你要运行的类中有

且只能有一个publicstaticvoidmain(String[]args)方法,这个方

法就是你的主程序。

1kage是什么意思?怎么用?答:为了唯一标识每个类并分组,java使用了package的概念。每个

类都有一个全名,例如String的全名是,其中

是包名,String是短名。这样,如果你也定义了String,你

可以把它放在mypackage中,通过使用全名和

来区分这两个类。同时,将逻辑上相关的类放在同一

个包中,可以使程序结构更为清楚。你要做的就是在java文件开头加一行"packagemypackage;"。注意包

没有嵌套或包含关系,A包和A.B包对java命令来说是并列的两个包。

13我没有声明任何package会怎么样?答:你的类被认为放在默认包中。这时全名和短名是一致的。

14在一个类中怎么使用其他类?答:如果你使用包中的类,不用做任何事。如果你使用其他

包中的类,使用1;或importpackage2.*;这

里.*表示引入这个包中的所有类。然后在程序中你可以使用其他类的短

名。如果短名有冲突,使用全名来区分。

15我用了package的时候显示"oClassDefFoundError",但是我把所有

package去掉的时候能正常运行。答:将你的java文件按包名存放。比如你的工作目录是/work,你的类是1,那么将它存

放为/work/package1/。如果没有声明包,那么直接放在/work

下。在/work下执行javacpackage1/,再执行java

1,你会发现一切正常。另外,你可以考虑开始使用IDE。

16我想把java编译成exe文件,该怎么做?答:JDK只能将java源文件编译为class文件。class文件是一种跨平

台的字节码,必须依赖平台相关的JRE来运行。Java以此来实现跨平台,

有些开发工具可以将java文件编译为exe文件。作者反对这种做法,因

为这样就取消了跨平台性。如果你确信你的软件只在Windows平台上运

行,你可以考虑使用C++/C#来编程。

17我在编译的时候遇到什么"deprecatedAPI",是什么意思?答:所谓deprecated是指已经?时,但是为了向前兼容起见仍然保留的

方法,这些方法可能会在以后取消支持。你应当改用较新的方法。一般在

API里面会说明你应当用什么方法来代替之。

三、I/O篇

18我怎么给java程序加启动参数,就像dir/p/w那样?答:还记得publicstaticvoidmain(String[]args)吗?这里的args

就是你的启动参数。在运行时你输入1-arg1-arg2,args中就会有

两个String,一个是arg1,另一个是arg2。

19我怎么从键盘输入一个int/double/字符串?答:java的I/O操作比C++要复杂一点。如果要从键盘输入,样例代码

如下:BufferedReadercin=newBufferedReader(new

InputStreamReader());Strings=ne();这样你就获得了一个字符串,如果你需要数字的话再加上:intn=nt(s);或者doubled=ouble(s);

20我怎么输出一个int/double/字符串?答:在程序开始写:PrintWritercout=newPrintWriter();需要时写:(n);或者n("hello")等等。

21我发现有些书上直接用和输入输出,比你要简

单得多。答:java使用unicode,是双字节。而和是单

字节的stream。如果你要输入输出双字节文字比如中文,请使用作者的

做法。

22我怎么从文件输入一个int/double/字符串?答:类似于从键盘输入,只不过换成BufferedReaderfin=newBufferedReader(newFileReader("

myFileame"));PrintWriterfout=newPrintWriter(newFileWriter("myFileame

"));另外如果你还没下载API,请开始下载并阅读包中的内容。

23我想读写文件的指定位置,该怎么办?答:你肯定没有认真看API。AccessFile可以满足你的

需要。

24怎么判断要读的文件已经到了尽头?答:你肯定没有认真看API。在Reaer的read方法中明确说明返回-1

表示流的结尾。

四、关键字篇

25java里面怎么定义宏?答:java不支持宏,因为宏代换不能保证类型安全。如果你需要定义

常量,可以将它定义为某个类的staticfinal成员。参见26和30。

26java里面没法用ct。答:你可以用final关键字。例如finalintm=9。被声明为final

的变量不能被再次赋值。也可以用于声明方法或类,被声明为final的方

法或类不能被继承。注意ct是java的保留字以备扩充。

27java里面也不能用goto。答:甚至在面向过程的语言中你也可以完全不用goto。请检查你的程

序流程是否合理。如果你需要从多层循环中迅速跳出,java增强了(和

C++相比)break和continue的功能。例如:outer:while(...){inner:for(...){

...breakinner;...

...continueouter;...

}

}和ct一样,goto也是java的保留字以备扩充。

28java里面能不能重载操作符?答:不能。String的+号是唯一一个内置的重载操作符。你可以通过定

义接口和方法来实现类似功能。

29我new了一个对象,但是没法delete掉它。答:java有自动内存回收机制,即所谓GarbargeCollector。你再也

不用担心指针错误。

30我想知道为什么main方法必须被声明为publicstatic?答:声明为public是为了这个方法可以被外部调用,详情见面向对象

篇37。static是为了将某个成员变量/方法关联到类(class)而非实例

(instance)。你不需要创建一个对象就可以直接使用这个类的static

成员,在A类中调用B类的static成员可以使用Member的写法。

注意一个类的static成员变量是唯一的,被所有该类对象所共享的。

31throw和throws有什么不同?答:throws用于声明一个方法会抛出哪些异常。而throw是在方法体

中实际执行抛出异常的动作。如果你在方法中throw一个异常,却没有在

方法声明中声明之,编译器会报错。注意Error和RuntimeException的

子类是例外,无需特别声明。

32什么是异常?答:异常最早在Ada语言中引入,用于在程序中动态处理错误并恢复。

你可以在方法中拦截底层异常并处理之,也可以抛给更高层的模块去处

理。你也可以抛出自己的异常指示发生了某些不正常情况。常见的拦截处

理代码如下:try{......//以下是可能发生异常的代码......//异常被抛出,执行流程中断并转向拦截代码。......}catch(Exception1e)//如果Exception1是Exception2的子类并要做

特别处理,应排在前面{//发生Exception1时被该段拦截

}

catch(Exception2e)

{

//发生Exception2时被该段拦截

}

finally//这是可选的

{

//无论异常是否发生,均执行此段代码

}

33final和finally有什么不同?答:final请见26。finally用于异常机制,参见32。

五、面向对象篇

34extends和implements有什么不同?答:extends用于(单)继承一个类(class),而implements用于实

现一个接口(interface)。interface的引入是为了部分地提供多继承

的功能。

在interface中只需声明方法头,而将方法体留给实现的class来做。这

些实现的class的实例完全可以当作interface的实例来对待。有趣的是

在interface之间也可以声明为extends(单继承)的关系。

35java怎么实现多继承?答:java不支持显式的多继承。因为在显式多继承的语言例如c++中,

会出现子类被迫声明祖先虚基类构造函数的问题,而这是违反面向对象的

封装性原则的。java提供了interface和implements关键字来部分地实

现多继承。参见34。

36abstract是什么?答:被声明为abstract的方法无需给出方法体,留给子类来实现。而

如果一个类中有abstract方法,那么这个类也必须声明为abstract。被

声明为abstract的类无法实例化,尽管它可以定义构造方法供子类使用。

37public,protected,private有什么不同?答:这些关键字用于声明类和成员的可见性。public成员可以被任何类访问,protected成员限于自己和子类访问,private成员限于自己访问。Java还提供了第四种的默认可见性,一般称为packageprivate,当没

有任何public,protected,private修饰符时,成员是同一包内可见。类

可以用public或默认来修饰。

38Override和Overload有什么不同?答:Override是指父类和子类之间方法的继承关系,这些方法有着相

同的名称和参数类型。Overload是指同一个类中不同方法(可以在子类

也可以在父类中定义)间的关系,这些方法有着相同的名称和不同的参数

类型。

39我继承了一个方法,但现在我想调用在父类中定义的方法。答:用()可以在子类中调用父类方法。

40我想在子类的构造方法中调用父类的构造方法,该怎么办?答:在子类构造方法的第一行调用super(...)即可。

41我在同一个类中定义了好几个构造方法并且想在一个构造方法中调用

另一个。答:在构造方法第一行调用this(...)。

42我没有定义构造方法会怎么样?答:自动获得一个无参数的构造方法。

43我调用无参数的构造方法失败了。答:如果你至少定义了一个构造方法,就不再有自动提供的无参数的构

造方法了。你需要显式定义一个无参数的构造方法。

44我该怎么定义类似于C++中的析构方法(destructor)?答:提供一个voidfinalize()方法。在GarbargeCollector回收该

对象时会调用该方法。注意实际上你很难判断一个对象会在什么时候被回

收。作者从未感到需要提供该方法。

45我想将一个父类对象转换成一个子类对象该怎么做?答:强制类型转换。如publicvoidmeth(Aa){Bb=(B)a;}如果a实际上并不是B的实例,会抛出ClassCastException。所以请

确保a确实是B的实例。

46其实我不确定a是不是B的实例,能不能分情况处理?答:可以使用instanceof操作符。例如if(ainstanceofB){Bb=(B)a;}else{...}

47我在方法里修改了一个对象的值,但是退出方法后我发现这个对象的

值没变!答:很可能你把传入参数重赋了一个新对象,例如下列代码就会造成这

种错误:publicvoidfun1(Aa)//a是局部参数,指向了一个外在对象。{a=newA();//a指向了一个新对象,和外在对象脱钩了。如果你要

让a作为传出变量,不要写这一句。r(attr);//修改了新对象的值,外在对象没有被修改。}

基本类型也会出现这种情况。例如:

publicvoidfun2(inta)

{

a=10;//只作用于本方法,外面的变量不会变化。

}

六、篇

-

Java学习思路

发布时间:2022-04-13 02:49:31
文章版权声明:除非注明,否则均为IT技术网-学习WEB前端开发等IT技术的网络平台原创文章,转载或复制请以超链接形式并注明出处。

发表评论

评论列表 (有 19 条评论,173人围观)
王克勤排V铁粉6 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
WebServices也完全没有任何新东西
净水机V铁粉6 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
HTTP协议和Java无关
高血糖食疗V铁粉26 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
相信进展到这一步
通州租房信息V铁粉6 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
学习基础类库就是学习
丰田suv报价及图片V铁粉25 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
做为一个原子操作
金融资产证券化V铁粉6 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
有了Documentation
无锡瑞丽整形V铁粉3 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
参数的意义
沙参麦冬汤V铁粉28 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
其中也有非常非常丰富的Java的开放源代码的著名的软件
法莫替丁V铁粉28 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
private
历史小说V铁粉27 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
编译器会报错
桃花江核电站V铁粉8 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
用于在程序中动态处理错误并恢复
分析预测V铁粉21 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
HTTP协议和Java无关
子宫颈糜烂V铁粉24 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
是设计师的必读书籍
花生米V铁粉3 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
你可以考虑开始使用IDE
试管婴儿移植后反应V铁粉17 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
日积月累
曾可V铁粉4 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
会出现子类被迫声明祖先虚基类构造函数的问题
男人的鸡鸡V铁粉21 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
Java的异常处理机制
杭州飞鸟集V铁粉6 minutes ago Google Chrome 93.0.4577.82 Windows 10 x64
这里不但是一个极好的面向对象的分析设计网站