一、java的跨平台性,即一次编译到处运行
简单地说java的跨平台性就是指,编译后的java程序可直接在不同的平台上运行而不用重新编译,这一特性使得java随着web应用的普及而迅速普及起来。而java的跨平台性是如何实现的呢?这就要理解java虚拟机和字节码的概念。 实际上,编译后的java代码并不是传统的二进制代码(如windows下的.exe文件),而是java字节码,这种字节码文件是不能直接在操作系统上执行的。要想在一个操作系统上运行一个java程序必须有一个中间环节来负责将java字节码解释成二进制码,这个中间环节就是java虚拟机(简称jvm)。由于目前大多数操作系统已经实现了jvm,所以java轻松实现跨平台性。
二、面象对象技术
java全面支持面象对象技术,这体现在class(类)是java程序构成的基本单元,一个java程序通常由许class组成,而且这些class还会有一定的继承关系,java支持class的单继承,从而使类之间的继承关系更明确。继承的结果产生类的多态性,类的多态本质上讲就是可以用父类的引用访问继承类的实现(子类对象),类的这种多态性最终形成了组件对象模型的基础,即通过接口(父类)访问实现(子类)。
三、java中的i/o操作
java中以字节流(inputstream和outputstream)、节符流(reader和writer)来分别读写二进制数据和字符据,使用非常简单有效。java类库中的file类不仅提供文件操作而且还包含文件夹操作,如下面这几行代码可以列出c盘根目录下的所有文件:
file f=new file("c://";
string [] m_dir= f.list();
for(int i=0;i
system.out.println(m_dir);
四、java中的图形及事件处理
可以用awt包或swing包的java类来进行大部分的java图形界面设计,下面的几行代码将产生一个200*200像素的窗体:
frame f=new frame("welcome";
f.setsize(200,200);
f.setvisible(true);
默认情况下,frame窗体的关闭按钮不起作用,这也是java初学者迷惑的地方。为了使用户按下关闭按钮时能关闭frame窗体,需要让这个窗体响应一个windowevent事件,具体的做法就是给这个窗体添加一个事件监听器对象,这个事件监听器就是windowlistener接口的实现。在上面的代码中插入如下代码就可以关闭窗体:
f.addwindowlistener(new windowadapter(){
??public void windowclosing(windowevent e){
system.exit(0);
??}
}
这里用到一个无名内部类,无名内部类是java中内部类的一种灵活运用方式。
五、java中线程及同步控制
线程概念的引入是为了实现并行处理,从而提高程序的效率。java中的线程实现非常简单,可以用两种方式来创建线程,一种是实现runnable接口,另一种是继承thread类重写run()方法。两种方式唯一的不同就是前者保留了继承一个类的可能(因为java只支持类的单继承,但接口没有此限制)。
永远都用start()方法来启动一个线程,线程类中的run()可以被直接调用,但决不是启动一个线程,二者有着本质的区别。 用同步控制关键字synchronized来保护线程敏感数据,synchronized块中的内容可以保证同一时刻只能被一个线程访问,所以其中的数据是线程安全的。
用object类中的wait()和notify()方法可以实现线程间交互,但要记住wait()和notify()方法只有发生在同一个对象上才能真正实现线程间交互。被某一对象wait()方法阻塞的线程需要另外一个调用了同一对象notify()的线程干预才能恢复运行。notify()方法一次唤醒一个被wait()方法阻塞的线程,notifyall()方法可以一次唤醒所有被wait()方法阻塞的线程。
六、java本地方法(native方法)的实现
java不是完美的,java的不足除了体现在运行速度上要比传统的c++慢许多之外,java无法直接访问到操作系统底层(如系统硬件等),为此java使用native方法来扩展java程序的功能。
可以将native方法比作java程序同c程序的接口,其实现步骤:
1、在java中声明native()方法,然后编译;
2、用javah产生一个.h文件;
3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了jdk带的jni.h文件);
4、将第三步的.cpp文件编译成动态链接库文件;
5、在java中用system.loadlibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在java中被访问了。
上述所提及的一些java技术具有一定的普遍性,它们基本上是在java各个方面的运用中都需要掌握的术。实际上java的运用非常广泛,而且每个方面都需要遵循不同的规范。以下是对java应用的简要介绍。
(一)理解java sdk的三个版本:
java sdk micro edition (j2me)
用于开发掌上电脑、手机等移动通信设备上使用的应用程序。并不是所有的移动设备都支持java,只有具备j2me运行环境(jvm+j2me api)的设备才能运行java程序。j2me的集成开发工具(通常都有带有一些访真器)有 sun 的j2me wireless toolkit 、ibm的visul age micro edition 等。
java sdk standard edition(j2se)
主要用于开发一般台式机应用程序。我们平时所说的jdk就指j2se,而我们学java就是从学习j2se开始的。
java sdk enterprise edition (j2ee)
用于开发分布式的企业级大型应用程序。其中的核心是entetprise java beans(ejb,分布式java组件)的开发。
(二)java小程序 (applet)
java小程序是一个继承了applet类并重写了init()、paint()、stop()等方法的的java类,它被布署在web服务器(如iis)上,当客户端请求web页时,浏览器从web服务器上将其下载到本地客户端,然后,浏览器创建该applet类的实例并调用其init()方法。(如果是ie的话,一般是由microsoft jvm 执行,装了j2sdk就用sun的)。从安全角度考虑,applet没有访问本地文件的权限。由于applet是被浏览器执行的,所以applet不需要一个main()方法。实际上,除了java application之外,所有其它java应用都不需要一个main()方法。
和它相应的微软技术是activex,也是下载到浏览器执行。
(三)服务器端java小程序 (servlet)
servlet也是一个java类,和applet形成对比,servlet是运行于服务器端的java小程序,而且servlet需要一个单独的web服务器(如tomcat)做容器。除此之外,servlet中用到的一些类(如httpservlet)并不包含在j2se api中,所以需要将servlet.jar(在tomcat的common\lib文件夹下)加到环境变量中去。下面是一个简单的servlet例子:
public class myservlet extends httpservlet{
??public void doget(httpservletrequest request,httpservletresponse response)
{
??try{
response.setcontenttype("text/html";
printwriter out=response.getwriter();
out.println("");
out.println("");
out.println("hello world");
out.println("");
out.println("");
??}catch(ioexception e){}
}
}
将这个class文件编译后放至tomcat\webapps\examples\web-inf\classes下,然后在浏览器地址栏里输入http://127.0.0.1:8080/examples/servlet/myservlet即可看到 hello world出现在浏览器中。
(四)java server page (jsp)
同servlet相似的是,jsp运行于web服务器端,并且也需要tomcat之类的容器。不同的是,由于jsp是将java代码嵌在html标记里(同asp一样用),jsp的界面设计同后台开发人员的工作可以有效分离。可以想像让开发人员用servlet写一个花捎的web页面有多困难,所以jsp+servlet混合web应用是比较理想的选择。
看起来jsp同asp的实现机制大同小异,其实也存在着本质的区别。所有的asp页面都是解释运行的,而jsp页在第一次被请求时会被编译,再以后的客户请求都是直接运行服务器上的.class文件(在tomcat的work文件夹下),所以jsp要比asp速度上快许多。
(五)java beans
java bean 是可复用的组件,对java bean并没有严格的规范,理论上讲,任何一个java类都可以是一个bean。但通常情况下,由于java bean是被容器所创建(如tomcat)的,所以java bean应具有一个无参的构造器,另外,通常java bean还要实现serializable接口用于实现bean的持久性。
(六)enterprise java beans (ejb)
java bean实际上相当于微软com模型中的本地进程内com组件,它是不能被跨进程访问的。enterprise java bean 相当于dcom,即分布式组件。它是基于java的远程方法调用(rmi)技术的,所以ejb可以被远程访问(跨进程、跨计算机)。但ejb必须被布署在诸如webspere、weblogic这样的容器中,ejb客户从不直接访问真正的ejb组件,而是通过其容器访问。ejb容器是ejb组件的代理,ejb组件由容器所创建和管理。客户通过容器来访问真正的ejb组件。 这种模型很像com+管理器,其实ejb容器正是起到com+管理器的作用,只是ejb组件相对com组件来说更易用、更安全。
总的说来,java作为面象对象技术的一个代表,在当今商业应用中更容易开发出高效的、多层的分布式应用程序,而且,由于java技术有很强的健壮性和易用性,加上同uml应用的结合,开发一个商业应用软件的周期会大大缩短,所以java会有不错的前景。
《java2核心技术》,《java编程思想》,《jsp设计》和《javaservlet编程》
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/