服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

深入理解:全面认识java


  学通java语言需要一个过程,所有java相关的概念都会在学习的过程中逐渐变得清昕。这个过程的开始就是要先学会标准的java技术(j2se),然后是学java的简单web运用,然后分布式运用,再以后对java的移动技术运用就很容易理解了。
  
  以下是java标准技术的一些要点:
  
  一、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<m_dir.length;i++)
  system.out.println(m_dir[i]);
  
  四、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()方法,从安全角度考虑,applet没有访问本地文件的权限。由于applet是被浏览器执行的,所以applet不需要一个main()方法。实际上,除了java application之外,所有其它java应用都不需要一个main()方法。
  
  (三)服务器端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("<html>");
  out.println("<body>");
  out.println("hello world");
  out.println("</body>");
  out.println("</html>");
  }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组件来说更易用、

扫描关注微信公众号