首页 > 学院 > 开发设计 > 正文

深入理解:全面认识JAVA

2019-11-18 13:07:48
字体:
来源:转载
供稿:网友

  学通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组件来说更易用、

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表