一、开篇

许多人在初接触Java的时候,都会被各种Java的英文缩写名词给弄得头晕脑胀。看一个技术,内容里又会有一堆其他的技术名词,看了半天不知所云。尝试去查一下这些名词的解释,除了非常学术性的解释之外,很少会有更详细更明白的描述。例如JNDI,也就是Java Naming and Directory Interface的缩写,中文意思是Java命名和目录接口[1]。看完中文解释,里面就有三个不懂的名词,"命名"、"目录"和"接口",这都什么意思?然后继续深入查一下去,越看发现越多不懂,学习的兴趣也就没有了。本文希望能通过简单的说明和举例,将平时工作中经常遇到的名词进行解释,让初学者能对其有一个更感性的认识。

牵涉Java的名词有很多,有中文,有英文,有跟Java语言有关,有跟Java技术体系有关,要全面归纳起来的话,估计可以成部字典。所以不可能在一篇文章中包揽全部内容。我会抽取平时生产上经常遇到的、看文章经常看到的,听高手讨论时经常听到的一些名词分几篇文章,进行深入一点的解释,希望能解大家的部分惑。

二、JRE、JDK、SDK

关于JRE与JDK间的关系,在上一节《Java之路——Java初接触》中已经讲过,这里在深入讲一下。先说一下这两个是什么英文的缩写。

JRE:Java Runtime Environment

JDK:Java Development Kit

从英文可以看出,JRE是Java的运行环境,JDK是Java的开发工具包。那顾名思义,要运行Java程序,就一定要用到JRE,要开发Java程序,就要用到JDK。那JRE与JDK会不会有什么关系呢?接着,我们回顾一下Oracle官网上的Java SE 8的组成描述[2]

大家从图中可以看到,JRE包含了Java虚拟机、Java基础类库等一系列需要运行Java的环境。而JDK除了包含JRE有的东西以外,同时多了开发时所需要用到的如javac等Tools和Tools API的内容。也就是说,JRE是JDK的一个子集,JDK包含了JRE的所有内容。也许细心的朋友也发现了,在官网上下载JDK安装的时候,会在JDK的目录下包含一个JRE,如图:

有些初学开发者在配Eclipse的JRE环境的时候就惆怅了,究竟要配JDK呢,还是配JRE呢。看完上面那个图,问题应该就解决了。JDK除含有JRE的内容外,还包括开发的工具等内容,所以要是一个开发者,那就应该配JDK作为JRE环境了。

最后来说说SDK有时什么东西。SDK英文全称是Software Development Kit,翻译成中文就是软件开发工具包,一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合[3]。所以我们也可以说,JDK是Java的SDK。

三、API

API,英文全称是Application Programming Interface,中文意思是应用程序编程接口。那接口又是什么东西呢?我们可以简单的想象成,接口就是我们的那些插座,只要我们把符合要求的插头插上插座,不用理插座怎么实现,能都用得上电。编程中的接口也是同样的道理,我们不需要关心接口的具体实现,只需要按照接口定义好的规则去调用,就可能实现想要的效果,这就是接口。那说回API,理解完接口(Interface)后,看回API的全称,大概就应该了解它指的是提供给编程人员调用的一些封装了实现的接口。具体到我们编程的时候,经常说"这个怎么用,查一下API",意思通常就是查一下API的说明文档。例如要查一下Java基础类中某个类怎么用,通常就是上Oracle的官网上查相关文档:http://docs.oracle.com/javase/8/docs/api/。

例如上图,我们就可以看到,BufferedInputStream类中有什么方法,各个方法有什么用,怎么调用,返回什么结果。查完后,我们就会使用了。

四、IDE

IDE,英文全称是Integrated Development Environment,中文意思是集成开发环境,也就是提供给开发人员进行程序开发的应用程序,包括但不限于编辑器、编译器、调试器和图形用户界面等工具。例如我们用于Java开发的Eclipse就是一个IDE。

.Net范畴开发使用的Visual Studio系列也是.Net开发的IDE。

五、JDBC

JDBC,英文全称是Java Data Base Connectivity,中文意思是Java数据库连接,是一种用于执行SQL语句的Java API。参考上部分对API的解释,可知道JDBC提供了一个基准,数据库厂商与第三方中间件厂商根据基准实现对数据库的调用。而开发人员只需根据JDBC API的标准来进行数据库的调用,无需理会后面的怎么实现的。由于JDBC API提供了统一的接口,所以不管你是调用Sql Server,还是Oracle,还是Mysql,写好的代码都不需要怎么改动。这也是实现接口的好处所在。

要实现一个JDBC程序,简单分为下面六个步骤[4]

1.引入JDBC类所需要的包。

2.注册JDBC驱动程序,所谓驱动程序,可以简单理解为实现了JDBC接口的那些类集合。

3.打开一个连接

4.执行一个查询

5.从结果中提取数据

6.清理环境

代码示例及注释如下:

六、JVM

说到JVM,相信大伙们都听得很多,觉得是个深奥的东西,但又不知道深奥在哪里,不明觉厉了。这里并不打算对其展开很深入的讲解,因为内容可以写成一本书了,只是对其的重要作用作一些描述,让大家有个概念,知道它究竟用来干什么的。

我们首先来看看JVM的英文全称为:Java Virtual Machine,中文意思则为Java虚拟机。顾名思义,它是一种根据计算设备规范,虚构出来的计算机。还记得在Java之路——Java初接触》里面说过,Java出来的口号是"Write Once,Run Anywhere"吗?JVM就是实现这一功能的关键。怎么实现呢?先看一下网上的一幅图[5]

我们抓住图中的几个关键词:Java源文件、Java字节码、类装载器、Java虚拟机(JVM)和硬件,来简单说一下JVM怎么实现Write Once, Run Anywhere。其实原理很简单,任务Java源代码,通过Java编译器后,都很根据统一的规则,编译成Java字节码,也就是我们的那堆class文件。只要是同一套源代码生成出来的Java字节码就是一样的。但是不同的机器,有不同的底层硬件,那同一套字节码怎么在不同的硬件环境中运行了?这就要靠JVM了。类装载器将字节码装载到Java虚拟机(JVM)中,JVM就会根据所运行在的操作系统、硬件平台上的不同,最终生成不同的硬件指令,从而可以在指定的操作系统及硬件上运行。也就是说,无论你什么操作系统、硬件,只要在其上安装了Java虚拟机(JVM),JVM就能将输入的Java字节码转换到指定的机器指令运行,从而屏蔽了底层运行平台的差别,实现"Write Once,Run Anywhere"的目标了。

JVM除了是实现"Write Once,Run Anywhere"这一功能的关键之外,Java程序运行时候的内存溢出、性能、

垃圾回收、数据存放(堆、栈、方法区等)等内容都是JVM所涉及的。这里附上JVM的一个体系结构图[6],给大家有个印象。

七、POJO、DTO、VO、BO、MO

这变成里面,明明就是一个类,但又会被赋予了各种称呼。当大家讲一大堆VO、PO、BO、DTO、POJO后,相信你马上会被O晕。究竟这些O有是个啥意思呢?这里我大概解释一下常见的几个O。

POJO,英文全称Plain Old Java Object,其实主要是对比重量级的EJB2.x来说,它描述的是一个轻量级的Java对象。它说的就是一个很普通的,很常规的,没有加特效进去的Java对象,也就是我们21天学会Java等书上学到的Java对象。之所以起个POJO的名字,估计是因为大家认为有个名字的对象更有吸引力。事实上也如此!

VO,英文全称Value Object,值对象。其实就如java.lang.Integer这种保存值的对象。这种值对象,我们通常认为是不会随着时间而变化的,是固定的。所以通常我们要修改一个值对象(VO)的时候,我们是要创建一个新的,而非直接更新的内部的数据。

DTO,英文全称Data Transfer Object,中文意思为数据传输对象。顾名思义,就是用来在网络中传输数据的。根据下图[7],我们可以看到DTO在整个应用中的位置:

一个简单的应用程序通常有三部分组成:数据访问层(DAL)、业务逻辑层和表现层。图中的Client端相当于表现层。可以看到,Client将用户输入的数据包装成DTO后,传输到Service进行业务逻辑的处理,处理完后,又包装成DTO传输回去给Client端做表现层的展示。DTO就是这样的一个对象。通常我们用到的是贫血的DTO,也就是DTO中只有数据(属性),没有行为(方法)。

在图中,大家还看到BO和MO,就是Bussiness Object和Model Object的缩写。其实就是对应层的一些用于存储数据的对象。那为什么各层要分这么多不同的Object,我认为主要原因有这几点:

1.各层处理的数据并不一样,将数据转换成该层所使用要到的对象方便处理。

2.从数据库里提取的数据,最终到表现层未必是全部用上的,实际用到什么数据就建立什么对象,以减少层与层之间的数据传输。

3.各层处理的事情不一样,把不必要的内容传到某层上,会有安全风险。也就是说不同的层使用不同的Object可以提高安全性。

八、DAO

DAO,英文全称Data Access Object,中文意思是数据访问对象。看上去跟DTO只差1个字,有些人会混淆。但其实DAO跟DTO没有啥关系,所以大家别太纠结。那回归正题,DAO用来干什么呢?DAO主要用途就是与数据库打交道,提供数据访问的接口,让业务逻辑调用相关方法操作数据库,是加载业务逻辑层与数据库资源中间的层。DAO的例子网上一大堆,我就不重新写了,在网上找了一个,把DAO的接口类和具体实现类抽取出来,给大家看看[8]

定义接口类:

import java.util.List;  
import cn.mldn.lxh.vo.Emp;  
  
public interface IEmpDAO {  
    public boolean doCreate(Emp emp) throws Exception;  
    public List<Emp> findAll(String keyWord) throws Exception;  
    public Emp findByid(int empno) throws Exception;  
}  

具体实现类:

import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.util.ArrayList;  
import java.util.List;  
  
import cn.mldn.lxh.dao.IEmpDAO;  
import cn.mldn.lxh.vo.Emp;  
  
public class EmpDAOImpl implements IEmpDAO {  
    private Connection conn=null; //数据库连接对象  
    private PreparedStatement pstmt = null;//数据库操作对象  
    public EmpDAOImpl(Connection conn){//通过构造方法取得数据库连接  
        this.conn=conn;  
    }  
    public boolean doCreate(Emp emp) throws Exception {  
        boolean flag=false;  
        String sql="INSERT INTO emp (empno,ename,job,hiredate,sal)VALUES(?,?,?,?,?)";  
        this.pstmt=this.conn.prepareStatement(sql);//实例化PreparedStatement对象  
        this.pstmt.setInt(1, emp.getEmpno());  
        this.pstmt.setString(2, emp.getEname());  
        this.pstmt.setString(3, emp.getJob());  
        this.pstmt.setDate(4, new java.sql.Date(emp.getHiredate().getTime()));  
        this.pstmt.setFloat(5, emp.getSal());  
        if(this.pstmt.executeUpdate()>0){  
            flag=true;  
        }  
        this.pstmt.close();  
        return false;  
    }  
  
    public List<Emp> findAll(String keyWord) throws Exception {  
        List<Emp> all= new ArrayList<Emp>();  
        String sql="SELECT empno,ename,job,hiredate,sal FROM emp WHERE ename LIKE ? OR job LIKE ?";  
            this.pstmt=this.conn.prepareStatement(sql);  
            this.pstmt.setString(1, "%"+keyWord+"%");  
            this.pstmt.setString(2, "%"+keyWord+"%");  
            ResultSet rs=this.pstmt.executeQuery();  
            Emp emp=null;  
            while(rs.next()){  
                emp=new Emp();  
                emp.setEmpno(rs.getInt(1));  
                emp.setEname(rs.getString(2));  
                emp.setJob(rs.getString(3));  
                emp.setHiredate(rs.getDate(4));  
                emp.setSal(rs.getFloat(5));  
                all.add(emp);  
            }  
            this.pstmt.close();  
            return all;  
    }  
  
    public Emp findByid(int empno) throws Exception {  
        Emp emp=null;  
        String sql="SELECT empno,ename,job,hiredate,sal FROM emp WHERE empno=?";  
        this.pstmt = this.conn.prepareStatement(sql);  
        this.pstmt.setInt(1, empno);  
        ResultSet rs = this.pstmt.executeQuery();  
        if(rs.next()){  
            emp = new Emp();  
            emp.setEmpno(rs.getInt(1));  
            emp.setEname(rs.getString(2));  
            emp.setJob(rs.getString(3));  
            emp.setHiredate(rs.getDate(4));  
            emp.setSal(rs.getFloat(5));  
        }  
        this.pstmt.close();  
        return emp;  
    }   }  

由于涉及JAVA的名词,限于篇幅,先对上面几个名词作解释。后续会分几章进行补充解释,大家有什么需要了解的,也可以留言,我会尽量解答大家的问题。

九、参考资料:

[1] 百度百科:http://baike.baidu.com/link?url=r1i6GgQ-q4jPrYQ2LOnLASZPW-7DpvHgWh51yfA-YIIREPJa0-YQr36pwmSFFU7O_tryTm7poFhCIyrWsOsK8_

[2] Java Platform Standard Edition 8 Documentation,2017.1.12取自http://docs.oracle.com/javase/8/docs/index.html

[3] 百度百科:http://baike.baidu.com/link?url=h-aUqkRLEPgmTNM22OE370lrfUtjynUz-1uTHbPQfzyIczmZ8EnLfP2Oed6ann4n5OBbyGfadP2m1eRUlnhZtK

[4] JDBC快速入门教程:http://www.yiibai.com/jdbc/jdbc_quick_guide.html

[5] (第6讲)jdk,JRE,JVM:<http://blog.sina.com.cn/s/blog_bf75829f0102wkmm.html>

[6] 【转】JVM介绍:http://www.cnblogs.com/sunada2005/p/3577799.html

[7] DTO – 服务实现中的核心数据:http://www.cnblogs.com/loveis715/p/4379656.html

[8] Java中的DAO设计模式应用举例 ------> 来自Java WEB 开发实战经典http://blog.csdn.net/hanxuehen/article/details/7074805>

Java之路——名词解释(一)的更多相关文章

  1. b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释

    继续上篇,上篇里忘记了也很重要的前端部分,今天的网站基本上是以一个启示页,然后少量的整页切换,大量的浏览器后台调用web服务局部.动态更新页面显示状态这种方式在运作的,从若干年前简单的ajax流行起来 ...

  2. b2c项目基础架构分析(一)b2c 大型站点方案简述 已补充名词解释

    我最近一直在找适合将来用于公司大型bs,b2b b2c的基础架构. 实际情况是要建立一个bs架构b2b.b2c的网站,当然还包括wap站点.手机app站点. 一.现有公司技术人员现状: 1.熟悉asp ...

  3. nodejs、npm、grunt——名词解释

    最近着手开发一个新项目,打算从工程化的角度整理一套自己的前端开发.发布体系. grunt这些工具,之前别人用我也用,并没有认真想过它们的前世今生,正好趁着这个机会,我来理一理目前业界比较流行这些工具的 ...

  4. X窗口系统名词解释

    前端时间Gentoo的桌面环境出了点问题,发现自己对Linux的桌面环境了解的很少,于是恶补了一下知识,以下名词解释基本上都是来自维基百科的条目和<Linux程序设计(第三版)>.一般而言 ...

  5. Java之路 ——初识Eclipse

    零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 八.Eclipse 快捷键 九.总结 一.前 ...

  6. maven名词解释

    Maven名词解释 Project:任何你想build的事物,Maven都可以认为它们是工程.这些工程被定义为工程对象模型(POM,Poject Object Model).一个工程可以依赖其它的工程 ...

  7. [给自己扫盲]名词解释——LAMP、MEAN、Web应用框架等

    名词解释 LAMP The LAMP software bundle (here additionally with Squid). A high performance and high-avail ...

  8. Java之路——初识Eclipse

    零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 八.Eclipse 快捷键 九.总结 一.前 ...

  9. JavaSE--【转】网络安全之证书、密钥、密钥库等名词解释

    转载 http://www.cnblogs.com/alanfang/p/5600449.html 那些证书相关的名词解释(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等 ...

随机推荐

  1. X-007 FriendlyARM tiny4412 u-boot移植之内存初始化

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  2. PHPCMS快速建站系列之自定义分页函数

    内容分页的实现方法:{pc:content action="lists" catid="$catid" order="id DESC" nu ...

  3. IOS开发-UI学习-UIWebView,简单浏览器的制作

    制作一个简单的浏览器,包含网址输入框,Search按钮,前进.回退按钮,UIWebView就这几个简单的控件. UITextField:用来输入网址: UIbuttom:实现前进,后退,搜索等功能: ...

  4. android 多线程Thread,Runnable,Handler,AsyncTask

    先看两个链接: 1.http://www.2cto.com/kf/201404/290494.html 2. 链接1: android 的多线程实际上就是java的多线程.android的UI线程又称 ...

  5. osgEarth基础入门(转载)

    osgEarth基础入门 osgEarth是基于三维引擎osg开发的三维数字地球引擎库,在osg基础上实现了瓦片调度插件,可选的四叉树调度插件,更多的地理数据加载插件(包括GDAL,ogr,WMS,T ...

  6. CodeForces 755C PolandBall and Forest (并查集)

    题意:给定每一点离他最远的点,问是这个森林里有多少棵树. 析:并查集,最后统计不同根结点的数目即可. 代码如下: #pragma comment(linker, "/STACK:102400 ...

  7. 使用python爬虫抓站的一些技巧总结:进阶篇

    Reference:http://python.jobbole.com/82000/ 一.gzip/deflate支持 现在的网页普遍支持gzip压缩,这往往可以解决大量传输时间,以VeryCD的主页 ...

  8. Android 使用AsyncTask 下载图片的例子,学会使用AsyncTask

    1.添加布局文件:activity_main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res ...

  9. iOS 之 界面编程解析

    参考:http://www.cocoachina.com/design/20151225/14789.html 0. 内容概述 基础与本质:说明普遍意义上的UI系统的三大模块,让读者从整体上对UI系统 ...

  10. Html 和 Css 的杂乱总结

    1. input 中可以设置 maxLength 属性,控制输入的文字数量,中英文字节数一样,但是没有验证兼容性 2.客户端中的页面禁止右键,复制等 <body scroll="no& ...