文档库 最新最全的文档下载
当前位置:文档库 › java基础

java基础

java基础
java基础

10.Java基础知识【上】收藏此文于2009-09-29被推荐到CSDN首页

此文于2009-10-09被推荐到CSDN首页

如何被推荐?

(最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没有考虑到会坚持往后边写,这次应该是更新该内容。而且很讨厌写基础的东西,内容比较琐碎,而且整理起来总会很多,有可能会打散成两个章节,但是我不保证,有可能一个章节就写完了,所以有时候希望基础的很多内容还是读者自己去看看,我基本保证把基础的内容全部都写出来,见谅。这一个章节写了过后我会把前边那个关于基础类型的章节从目录里面删除掉,以保证教材的完整性和唯一性,防止有人收藏过链接,我会继续保留在BLOG地址上边不删除,所以请读者见谅!初学者可以从本章的第三小节开始看,因为前两个章节内容也是比较概念性的,刚开始可以不去理解。这里直接从Java语法开始,不提及Java的历史以及Java 的前序发展,如果有什么笔误,就发我Email:silentbalanceyh@https://www.wendangku.net/doc/947763514.html,)

本章目录

1.概念以及提纲

2.语言基础

3.数据类型[一部分]

4.操作符

5.控制流程

6.关键字清单

1.概念以及提纲

Java技术是一种高级的面向对象的编程语言,也是一个平台,Java技术是基于Java虚拟机(Java Virtual Machine,JVM)的概念——这是语言和底层软件和硬件之间的一种转换器,Java语言的所有实现都是基于JVM的,从而使Java程序可以在有JVM的任何系统上运行。

i.JVM详细介绍:

1)JVM执行原理

JVM可以称为软件模拟的计算机,它可以在任何处理器安全地兼容并且执行.class字节码。其实JVM兼容的二进制字节码和操作系统的本地机器码有一定的区别,只是针对JVM 上层的调用程序而言,执行过程效果一样,所以我们一般理解就是说直接用JVM来执行二进制码,实际上二者本质有一定的差异,但是这一点可以理解JVM具有跨平台性。一般情况下,编程人员都是直接编写.java的源文件,然后用Java编译器(javac命令)对源文件进行编译,生成.class文件,生成的.class文件就是我们平时所说的包含了“机器码”的文件,实际上JVM在编译和运行过程做了两件事,先是直接将源文件编译成二进制字节码.class 文件,然后进行第二次处理:解释器负责将这些二进制字节码根据本地操作系统宿主环境生成相应的本地机器码解释执行。所以可以理解的一点是为什么Java语言具有跨平台性,因为JVM提供了Java运行的一个中间层,使得操作系统和上层应用相互之间是依靠JVM中间层进行通信的,也就是说Java编写的程序是运行在JVM上的;再者尽管Java确实可以做到“一次编译,多处运行”,但是在不同结构的操作系统平台生成的.class文件真正在执行的时候是存在一定差异的,只是JVM本身会根据安装的不同版本进行不同的操作系统平台下本地机器码的生成及运行,所以虽然我们在Sun公司官方网站可以下载到很多不同操作系统版本的JDK,但是执行效果一样。而且还有一点,这一步操作针对开发人员是透明的,

所以真正在开发过程可以放心的是不需要去担心这种问题,只要下载的版本是和符合我们运行的操作系统的,只管进行普通编程的编译、解释运行操作就可以了。

Java语言既是编译型语言,也是解释型语言,在.class文件生成之前,JVM通过javac 命令对源代码进行编译操作,然后用JVM根据包含了二进制码的.class生成机器码并且解释执行。所以Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行。Java虚拟机的建立需要针对不同的软硬件平台来实现,既要考虑处理器的型号,也要考虑操作系统的种类。由此在SPARC结构、X86结构、MIPS和PPC等嵌入式处理芯片上,在UNIX、Linux、Windows和部分实时操作系统上都可实现Java虚拟机,这也是为了在运行过程生成本地机器码而考虑的,使得JVM可以兼容不同的软硬件平台。

2)JVM的安全检查机制【参考链接:https://www.wendangku.net/doc/947763514.html,/blog/225615】

JVM在执行字节码的时候需要经过下边的步骤:

由类加载器(Class Loader)负责把类文件加载到Java虚拟机中(.class),在这个过程需要校验该类文件是否符合类文件规范

字节码校验器(Bytecode Verifier)检查该类文件的代码中是否存在着某些非法操作

如果字节码校验器校验通过,就由Java解释器负责把该类文件解释成机器码进行执行JVM在上边操作过程使用了“沙箱”模型,即把Java程序的代码和数据都限制起来放在一定的内存空间执行,不允许程序访问该内存空间以外的内存。这种访问过程不仅仅是本地的,也可以是远程的,最明显的体验是使用RMI的时候。

——[$]Java的“沙箱”详解——

[1]步骤一:“双亲委派类加载模型”:

双亲委派方式,指的是优先从顶层启动类加载器,自定向下的方式加载类模型,这种方式在“沙箱”安全模型里面做了第一道安全保障;而且这样的方式使得底层的类加载器加载的类和顶层的类加载器的类不能相互调用,哪怕两种类加载器加载的是同一个包里面的类,只要加载的时候不属于同一个类加载器,就是相互隔绝的,这样的操作称为JVM的“安全隔离”。

[2]步骤二:字节码校验:

字节码校验过程需要经过四个步骤:

检查class文件的内部结构是否正确,主要是检查该文件是否以某个内存地址打头一般为0xCAFEBABE,但是可能32bit和64bit存在一定的差异,通过这样的检查可以使得被损坏的class文件或者伪装的class文件不能够被加载,可以标记为不安全的。第一趟扫描的主要目的是保证这个字节序列正确的定义了一个类型,它必须遵从java class文件的固定格式,这样它才能被编译成在方法区中的(基于实现的)内部数据结构。

检查是否符合JVM语言特性里面的编译规则,因为Java里面所有的Class都是从Object类继承过来的,一旦发现这种不安全的类存在,就直接抛异常。这次检查,class文件检验器不需要查看字节码,也不需要查看和装载任何其他类型。在这趟扫描中,检验器查看每个组成部分,确认它们是否是其所属类型的实例,它们结构是否正确。比如,方法描述符(它的返回类型,以及参数的类型和个数)在class文件中被存储为一个字符串,这个字符串必须符合特定的上下文无关文法。另外,还会检查这个类本身是否符合特定的条件,它们是由java 编程语言规定的。比如,除Object外,所有类都必须要有一个超类,final的类不能被子类化,final方法也没有被覆盖,检查常量池中的条目是合法的,而且常量池的所有索引必须指向正确类型的常量池条目。

检查字节码是否导致JVM崩溃掉,这里存在一个JVM中断的问题,编程过程无法捕捉Error,同样的没有办法判断程序是否因为执行的class字节码中断或者崩溃。字节码流代表了java 的方法,它是由被称为操作码的单字节指令组成的序列,每一个操作码后都跟着一个或多个操作数。执行字节码时,依次执行操作码,这就在java虚拟机内构成了执行的线程,每一个线程被授予自己的java栈,这个栈是由不同的栈帧构成的,每一个方法调用将获得一个自己的栈帧——栈帧其实就是一个内存片段,其中存储着局部变量和计算的中间结果,用于存储中间结果的部分被称为操作数栈。字节码检验器要进行大量的检查,以确保采用任何路径在字节码流中都得到一个确定的操作码,确保操作数栈总是包含正确的数值以及正确的类型。它必须保证局部变量在赋予合适的值以前不能被访问,而且类的字段中必须总是被赋予正确类型的值,类的方法被调用时总是传递正确数值和类型的参数。字节码检验器还必须保证每个操作码都是合法的,即都有合法的操作数,以及对每一个操作码,合适类型的数值位于局部变量中或是在操作数栈中。这些仅仅是字节码检验器所做的大量检验工作中的一小部

分,在整个检验过程通过后,它就能保证这个字节码流可以被java虚拟机安全的执行。

检查符号引用验证,一个类文件,它会包含它引用的其他类的全名和描述符,并跟他们建立符号引用(一种虚拟的,非物理连接的方式)。当程序第一次执行到需要符号引用的位置时,JVM会检查这个符号链接的正确性,然后建立真正的物理引用(直接引用)。java虚拟机将追踪那些引用——从被验证的class文件到被引用的class文件,以确保这个引用是正确的。这次扫描可能要装载新的类。考虑到虚拟机实现上的差别,第四趟扫描可能紧随第三趟扫描发生,也有可能在第三趟扫描之后很久,当字节码被执行时才执行。动态连接是一个将符号引用解析为直接引用的过程。当java虚拟机执行字节码时,如果它遇到一个操作码,这个操作码第一次使用一个指向另一个类的符号引用,那么虚拟机就必须解析这个符号引用。在解析时,虚拟机执行两个基本任务:

——查找被引用的类(如果必要的话就装载它)

——将符号引用替换为直接引用,例如指向一个类、字段或方法的指针或偏移量

虚拟机必须记住这个直接引用,这样当它以后再次遇到同样的引用时,就可以直接使用,而不需要重新解析该符号引用了。

[3]步骤三:内置于JVM的安全特性:

在执行期,除了符号引用验证,JVM还会对一些内建的安全特性进行检查

类型安全的引用转化

结构化的内存访问(非指针算法)

GC

数组边界检查

空引用检查(NullPointer)

强制内存的结构话访问,避免了恶意用户在了解内存分布的情况下通过指针对JVM的内部结构进行破外。当然要了解JVM的内存分布也不是易事。JVM对运行时数据空间的分配是一个黑盒过程,完全由JVM自己决定如何分配,在class中没有任何相关的信息。

字节码检查的局限就是对于那些不经过字节码检查的方法(如本地方法:native method)

无法验证其安全性,所以这里采用的是对动态链接库的访问控制,对于那些足有足够可信度的代码才被允许访问本地方法。具体的实现是,由安全管理器来决定代码是否有调用动态链接库的权限,因为调用本地方法必须调用动态链接库。这样一来,不可信的代码将无法通过调用本地方法来绕过字节码检查。

[4]步骤四:安全管理器SecurityManager:

这一步是编程中最接近程序的一个环节,SecurityManager存在于JavaAPI里面,是可以通过编程来完成安全策略管理的,默认情况下,Java应用是不设置SecurityManager实例的,但是这个实例却需要我们在启动的时候通过System.setSecurityManager来进行设置。一般情况下,调用了SecurityManager.checkPermission(Permission perm)来完成的,外部程序可以创建一个权限实例Permission来进行Check操作。主要应用为:

默认安全管理器:https://www.wendangku.net/doc/947763514.html,ng.SecurityManager

代码签名和认证

策略:java.security.Policy

权限:java.security.Permission

策略文件

保护域:CodeSource,PersimissionCollection,ProtectionDomain

访问控制器:java.security.AccessController

【这一步内容比较多,这里不详细讲解,带过】

[5]步骤五:Java签名/证书机制:

Java签名机制使得使用者可以安全调用外部提供的jar文件,签名必须是基于jar包的,也就是如果要使用安全模型必须要将提供的class文件打包成jar,然后使用JDK工具

(jarsigner)对jar进行签名。新安全平台中对足够信任度的代码放宽了限制,要获得充分信任须通过代码签名来实现,若我们对某一签名团体足够信任,比如SUN,那么具有该团体签名的代码将被给予充分信任。一个基本的思路大致为,代码发布者创建私钥/公钥对,然后利用私钥对发布代码进行签名,代码使用方在获得代码发布者提供的公钥后对代码进行验证,确认代码确为该提供者提供以及在发布后未经非法修改。这其中存在一些潜在的危险,既是公钥是否是该代码发布者提供的,恶意用户可能替换掉合法的公钥,这会导致用户将给与恶意用户发布的代码以充分信任,目前的常见做法是通过一些权威的证书机构来发布证书而不是公钥,代码发布者被证书发布机构认证合格后,可以将自己的公钥交付证书发布机构,证书发布机构再通过私钥加密该公钥,从而生成证书序列。这样替换公钥的可能性就变得微乎其微。不过世上无绝对安全之事,通过证书机构发布的证书也不是绝对安全的途径。

证书是在签名基础上,对签名值,再进一步做一次加密。而这次加密使用的私钥和公钥都是证书机构提供的。这种方式,是为了防止,有些恶意用户,在公钥发到你手上前,就对其做了手脚,然后再发一个动过手脚的jar给你,用动过手脚的公钥解动过手脚的jar包,是可以解开的。而使用证书后,它会对已经加密的签名值,再做一层加密,这样,到你手里,你只需要通过证书机构的公钥进行解密,然后再用jar包发布者的公钥解密就行了。(只能在一定程度上,提供一些安全性)

3)JVM的内部结构:

JVM是Java平台的核心,为了让编译产生的字节码能够更好的解释和执行,JVM主要分为6个部分【这里只是带过,想要了解JVM整体执行原理的读者可以去参考《Inside JVM》】:

JVM解释器:即这个虚拟机处理字段码的CPU。

JVM指令系统:该系统与计算机很相似,一条指令由操作码和操作数两部分组成。操作码为8位二进制数,主要是为了说明一条指令的功能,操作数可以根据需要而定,JVM有多达256种不同的操作指令。

寄存器:JVM有自己的虚拟寄存器,这样就可以快速地与JVM的解释器进行数据交换。为了功能的需要,JVM设置了4个常用的32位寄存器:pc(程序计数器)、optop(操作数栈顶指针)、frame(当前执行环境指针)和vars(指向当前执行环境中第一个局部变量的指针)。JVM栈:指令执行时数据和信息存储的场所和控制中心,它提供给JVM解释器运算所需要的信息。

存储区:JVM存储区用于存储编译过后的字节码等信息。

碎片回收区:JVM碎片回收是指将使用过的Java类的具体实例从内存进行回收,这就使得开发人员免去了自己编程控制内存的麻烦和危险。随着JVM的不断升级,其碎片回收的技术和算法也更加合理。JVM 1.4.1版后产生了一种叫分代收集技术,简单来说就是利用对象在程序中生存的时间划分成代,以此为标准进行碎片回收。

ii.Java平台介绍:

Java平台(Java Platform)是一种纯软件平台,它可以在各种基于硬件的平台运行,它有三个版本(JavaSE,JavaME,JavaEE),它由Java应用程序接口(Java Application Programming Interface,API)和JVM组成,Java API是一个现成的软件组件集合,可以简化Applet和应用程序的开发部署,包括健壮、安全且可互操作的企业应用程序。它涵盖了从基本对象到连网和安全性,再到XML生成和Web服务的所有东西,Java API组织成相关类和接口的库,库也可以成为包。

每个包实现包括:

用来编译、运行、监视、调试应用程序以及简历应用程序文档的开发工具

用来部署应用程序的标准机制

用来创建复杂的图形用户界面(GUI)的用户界面工具包

用来启用数据库访问和操作远程对象的集成库

1)Java平台的版本:

Java平台有三个版本,使得软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发:

[1]Java SE(Java Platform,Standard Edition):Java SE 以前称为J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java 应用程序。Java SE 包含了支持Java Web 服务开发的类,并为Java Platform,Enterprise Edition(Java EE)提供基础。大多数Java 开发人员使用Java SE 5,也称为Java 5.0 或“Tiger”(2006 年6 月,Java SE 6 或“Mustang”发布了beta 版。)

[2]Java EE(Java Platform,Enterprise Edition):这个版本以前称为J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java 应用程序。Java EE 是在Java SE 的基础上构建的,它提供Web 服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和Web 2.0 应用程序。

[3]Java ME(Java Platform,Micro Edition):这个版本以前称为J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。

2)Java组件技术提纲:【写此提纲的目的是防止学习过程术语混乱,这里提供的分类不标准,但是覆盖了Java里面大部分我们开发过程会碰到的规范和术语】

Java SE中的规范:

JavaBeans Component Architecture【JavaBeans】:一个为Java平台定义可重用软件组件的框架,可以在图形化构建工具中对这些组件进行设计

Java Foundation Classes(Swing)【JFC】:一套Java的类库,支持为基于Java的客户端应用程序构建GUI和图形化功能

JavaHelp:一个独立于平台的可扩展帮助系统,开发人员和做着可以使用它将在线帮助集成到Applet、组件、应用程序、操作系统和设备中,还可以提供Web的在线文档

Java Native Interface【JNI】:使JVM中运行的Java代码可以与用其他编程语言编写的应用程序和库进行互操作,很多时候实现部分用C来写,有兴趣的读者可以写一个简单的Java 版任务管理器,嘿嘿,写这个可以收获很多哦!

Java Platform Debugger Architecture【JPDA】:用于Java SE的调试支持的基础结构

Java 2D API【Java 2D】:是一套用于高级2D图形和图像的类、一套提供了精确控制颜色空间定义和转换的类以及一套面向显示图像的操作符

Java Web Start:允许用户通过一次点击下载并启动特性完整的网络应用程序,而不需要安装,从而简化了Java的部署工作

Certification Path API:提供了一套用于创建、构建和检验认证路径(也称为“认证链”)的API,可以安全地建立公共密钥到主体的映射。

Java Advanced Imaging【JAI】:提供一套面向对象的接口,这些接口支持一个简单的高级编程模型,使开发人员能够轻松地操作图像。

Java Cryptography Extension【JCE】:提供用于加密、密钥生成和协商以及Message Authentication Code(MAC)算法的框架和实现,它提供对对称、不对称、块和流密码的加密支持,它还支持安全流和密封的对象。

Java Data Objects【JDO】:是一种基于标准接口的持久化Java 模型抽象,使程序员能够将Java 领域模型实例直接存储进持久化存储(数据库)中,这可以替代直接文件I/O、串行化、JDBC 以及EJB Bean Managed Persistence(BMP)或Container Managed Persistence (CMP)实体bean 等方法。

Java Management Extensions【JMX】提供了用于构建分布式、基于Web、模块化且动态的应用程序的工具,这些应用程序可以用来管理和监视设备、应用程序和服务驱动的网络。Java Media Framework【JMF】:可以将音频、视频和其他基于时间的媒体添加到Java 应用程序和applet 中。

Java Secure Socket Extensions【JSSE】:支持安全的互联网通信,实现了SSL(Secure Sockets Layer)和TLS(Transport Layer Security)的Java 版本,包含数据加密、服务器身份验证、消息完整性和可选的客户机身份验证等功能。

Java Speech API【JSAPI】:包含Grammar Format【JSGF】和Markup Language【JSML】规范,使Java 应用程序能够将语音技术集成到用户界面中。JSAPI 定义一个跨平台的API,支持命令和控制识别器、听写系统和语音识别器。

Java 3D API【Java 3D】:它提供一套面向对象的接口,这些接口支持一个简单的高级编程模

型,开发人员可以使用这个API 轻松地将可伸缩的独立于平台的3D 图形集成到Java 应用程序中。

Metadata Facility【JMI】:允许给类、接口、字段和方法标上特定的属性,从而使开发工具、部署工具和运行时库能够以特殊方式处理它们,Java元数据接口(使用Annotation实现)Java Content Repository API:用于访问Java SE 中独立于实现的内容存储库的API。内容存储库是一个高级信息管理系统,它是传统数据存储库的超集。

Concurrency Utilities:一套中级实用程序,提供了并发程序中常用的功能。

Juxtapose【JXTA】:一个用来解决P2P计算的开放的网络计算平台。JXTA P2P平台使开发者在其上建立PtoP的应用。

Java EE中的规范:

Java Database Connectivity【JDBC】:使用户能够从Java 代码中访问大多数表格式数据源,提供了对许多SQL 数据库的跨DBMS 连接能力,并可以访问其他表格式数据源,比如电子表格或平面文件。

Java Naming and Directory Interface【JNDI】:为Java 应用程序提供一个连接到企业中的多个命名和目录服务的统一接口,可以无缝地连接结构不同的企业命名和目录服务。Enterprise JavaBeans【EJB】:J2EE技术之所以赢得某体广泛重视的原因之一就是EJB。它们提供了一个框架来开发和实施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但这里值得注意的是,EJB并不是实现J2EE的唯一途径。正是由于J2EE的开放性,使得有的厂商能够以一种和EJB平行的方式来达到同样的目的。

Remote Method Invoke【RMI】:正如其名字所表示的那样,RMI协议调用远程对象上方法。它使用了序列化方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。

Java IDL/CORBA:在Java IDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象并使之可在CORBA ORB中展开, 或者他们还可以创建Java类并作为和其它ORB一起展开的CORBA对象的客户。后一种方法提供了另外一种途径,通过它Java 可以被用于将你的新的应用和旧的系统相集成。

Portlet Specification:定义了一套用于Java 门户计算的API,可以解决聚合、个人化、表示和安全性方面的问题。

JavaMail:提供了一套对邮件系统进行建模的抽象类。

Java Message Service【JMS】:为所有与JMS 技术兼容的消息传递系统定义一套通用的消息概念和编程策略,从而支持开发可移植的基于消息的Java 应用程序。

JavaServer Faces【JSF】:提供一个编程模型,帮助开发人员将可重用UI 组件组合在页面中,将这些组件连接到应用程序数据源,将客户机生成的事件连接到服务器端事件处理程序,从而轻松地组建Web 应用程序。

JavaServer Pages【JSP】:允许Web 开发人员快速地开发和轻松地维护动态的独立于平台的Web 页面,并将用户界面和内容生成隔离开,这样设计人员就能够修改页面布局而不必修改动态内容。这种技术使用类似XML 的标记来封装为页面生成内容的逻辑。

Java Servlets:提供一种基于组件的独立于平台的方法,可以构建基于Web 的应用程序,同时避免CGI 程序的性能限制,从而扩展并增强Web 服务器的功能。

J2EE Connector Architecture【JCA】:为将J2EE 平台连接到各种结构的Enterprise Information Systems(EIS)定义了一个标准的体系结构,它定义了一套可伸缩的安全的事务性机制,使EIS 厂商能够提供标准的资源适配器,可以将这些资源适配器插入应用服务器

中。

J2EE Management Specification【JMX】:为J2EE 平台定义了一个信息管理模型。根据其设计,J2EE Management Model 可与多种管理系统和协议进行互操作;包含模型到Common Information Model(CIM)的标准映射,CIM 是一个SNMP Management Information Base (MIB);还可以通过一个驻留在服务器上的EJB 组件——J2EE Management EJB Component【MEJB】——映射到Java 对象模型。

Java Transaction API【JTA】:是一个独立于实现和协议的高级API,它使应用程序和应用服务器可以访问事务。

Java Transaction Service【JTS】:JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务管理器是在高层支持Java Transaction API (JTA)规范,并且在较底层实现OMG OTS specification的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务……

Java Authentication and Authorization Service【JAAS】:实现了标准的Pluggable Authentication Module(PAM)框架的Java 版本并支持基于用户的授权,使服务能够对用户进行身份验证和访问控制。

JavaBeans Activation Framework【JAF】:JavaMail利用JAF来处理MIME编码的邮件附件。MIME的字节流可以被转换成Java对象,或者转换自Java对象。大多数应用都可以不需要直接使用JAF。

Java API for XML Web Service【JAX-WS】:一组XML web services的JA V A API。JAX-WS 允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services。

Java API for XML Processing【JAXP】:允许Java 应用程序独立于特定的XML 处理实现对XML 文档进行解析和转换,允许灵活地在XML 处理程序之间进行切换,而不需要修改应用程序代码。

Java API for XML Binding【JAXB】:允许在XML 文档和Java 对象之间进行自动的映射。SOAP with Attachments API for Java【SAAJ】:使开发人员能够按照SOAP 1.1 规范和SOAP with Attachments note 生成和消费消息。

Streaming API for XML【StAX】:就提供了两种方法来处理XML:文档对象模型(DOM)方法是用标准的对象模型表示XML 文档;Simple API for XML (SAX) 方法使用应用程序提供的事件处理程序来处理XML。JSR-173 提出了一种面向流的新方法:Streaming API for XML (StAX)。其最终版本于2004 年3 月发布,并成为了JAXP 1.4(将包含在即将发布的Java 6 中)的一部分。

Java API for XML Registries【JAXR】:提供了一种统一和标准的Java API,用于访问不同类型的基于XML的元数据注册中心。JAXR目前实现支持ebXML Registry2.0版和UDDI2.0版。未来可以支持更多的类似的注册中心。JAXR为客户端提供了API,与XML注册中心进行交互,同时为服务中心提供者提供了服务提供者接口(SPI),这样,注册中心的实现是可插拔的。JAXR API将应用代码与下层的注册中心机制相隔离。当编写基于JAXR的客户端浏览和操作注册中心时,当注册中心更换时,比如从UDDI更换为ebXML,代码不需要进行修改。

Java Persistence API【JPA】:通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中,一个标准的ORM框架。

Java Authorization Service Provider Contract for Containers【JACC】:在J2EE应用服务器和特定的授权认证服务器之间定义了一个连接的协约,以便将各种授权认证服务器插入到J2EE 产品中去。

Java API for RESTful Web Services【JAX-RS】:定义一个统一的规范,使得Java 程序员可

以使用一套固定的接口来开发REST 应用,避免了依赖于第三方框架。同时,JAX-RS 使用POJO 编程模型和基于标注的配置,并集成了JAXB,从而可以有效缩短REST 应用的开发周期。

Java ME中的规范:

Connected Limited Device Configuration【CLDC】:是组成资源有限的移动信息设备的Java 运行时环境的两种配置之一。CLDC 描述最基本的库和虚拟机特性,所有包含K 虚拟机(K virtual machine,KVM)的J2ME 环境实现中都必须提供这些库和特性。

Mobile Information Device Profile【MIDP】:是组成资源有限的移动信息设备的Java 运行时环境的两种配置之一。MIDP 提供核心应用程序功能,包括用户界面、网络连接、本地数据存储和应用程序生命周期管理。

Connected Device Configuration【CDC】:是一个基于标准的框架,用来构建和交付可以跨许多连接网络的消费类设备和嵌入式设备共享的应用程序。

Mobile 3D Graphics API for J2ME【M3G】:是一种轻量的交互式3D 图形API,它作为可选的包与J2ME 和MIDP 结合使用。

【*:上边这份清单基本上涵盖了Java平台所有的术语以及相关介绍,因为WebBeans 是Java EE 6的新规范,而且JBI和SCA具体是为ESB开发存在的,这三个规范我没有归纳进来,有兴趣的读者可以自己去查阅一下,还有一点需要说明JXTA以前不属于Java规范里面的,也是因为该组件用起来比较方便貌似现在纳入JSR规范了,具体情况如何我没有查证,见谅,若有遗漏掉的规范提纲,也请有心的读者来Email告知,谢谢:silentbalanceyh@https://www.wendangku.net/doc/947763514.html,。这套教程我在书写的时候我只会写一部分与我自己开发相关的使用过的组件技术,其他我不熟悉的可能不会涉及到。而且需要提醒一下读者的是:SSH (Struts+Spring+Hibernate)框架虽然很流行,但是不属于Sun公司Java EE里面的官方标准规范,这三个框架是三个开源框架,所以:JavaEE的规范定义里面并不包含SSH!】

2.语言基础【*:本教材不会讲JDK的环境配置,环境配置以后一必要我在BLOG的配置分类里面单独讲解】

i.开发第一个Java程序:

步骤一:书写.java源代码

步骤二:使用javac命令编译.java源代码,将该代码编译成.class字节码

步骤三:使用java命令运行.class字节码

接着按照步骤,书写第一个Java程序:

/**

*我的第一个Java程序

**/

class Hello{

}

public class HelloJava {

public static void main(String[] args) {

System.out.println("Hello Java");

}

}

将上边的代码保存成HelloJava.java文件名,放于D盘根目录。【*:这里的放置位置根据读者爱好自己决定】

第二步:使用命令行工具:

javac HelloJava.java

第三步:运行.class文件

java HelloJava

输出应该为:

Hello Java

针对这样一个过程有几点需要说明:

[1]关于Java源文件:Java的源文件是以.java结尾的,每一个源文件里面可以定义很多class,但是只能定义一个public的class,如果不定义public的class,文件名必须和其中至少一个class的名称一致;若定义了一个public的class,文件名必须和定义的public的class 的类名一致。【*:这点是Java的语言规范,但是从语言设计上来讲这是没有必要的,实际上编译器不应该把文件名和类名关联,但是Java语言是一个特殊,学过Scala和C#的读者应该就明白这一点,所以这一点在Java使用的时候需要特别小心。】

[2]关于函数入口:一个Java程序可能由一个或者多个class构成,上边使用了javac过后,同一个目录下可以生成两个.class文件,分别是Hello.class和HelloJava.class,不论怎样必须在运行的类里面(使用java命令的时候后边跟的类名的类)定义一个Java应用程序的入口:public static void main(String args[]),在这里,该定义成为Java语言的主函数入口,也是程序运行的起点,上边的程序的入口就在HelloJava类里面。main()方法的签名是不可以更改的,因此下边的函数入口的写法都是不对的:

static void main(String args[])

public void main(String args[])

public static void main(String args)

使用上边三种入口函数的定义都会使得JVM没有办法找到主函数入口,后两种定义会抛出下边的异常,第一种情况比较特殊,JVM会提示:Main method not public,也就是说第一种情况JVM能够找到主函数,但是该主函数不符合Java应用程序的运行规范。Exception in thread "Main Thread" https://www.wendangku.net/doc/947763514.html,ng.NoSuchMethodError: main

[3]在上边的程序里面,HelloJava的类可以不是public的时候,这里需要说明的是,不是说因为某个类是public主函数入口就必须放在该类里面,读者可以试试下边的代码段:class HelloTester{

public static void main(String[] args){

System.out.println("Hello World");

}

}

public class MainTester {

}

当我们使用javac MainTester.java的时候,编译是可以通过的,而且会生成两个类文件:HelloTester.class和MainTester.class。注意这里的代码结构,按照第一点提到的,这个.java 文件只能保存为MainTester.java,如果这段代码保存为HelloTester.java文件,编译的时候会抛出下边的异常:

HelloTester.java:8:class MainTester is public,should be declared in a file named MainTester.java 也就是说一旦在一个.java源文件里面定义了一个类为public,那么这个源文件的名称就被限制了必须和public的类保持一致。上边的代码经过编译过后使用下边的命令读者可以测试以下:

java HelloTester【这种做法会输出:Hello World,因为在这个类里面找到了主函数的入口】java MainTester【这种做法不会成功,因为在执行类MainTester里面,JVM找不到主函数的入口】

[4]main函数的参数:

对于java里面的主函数入口方法main,JVM有一定的限制,首先是不可以有返回值,因此返回值为void,而且必须有一个参数,类型为String[]的,这也是Java语言里面的规范,这个参数会匹配命令行里面的参数,至于参数名是里面唯一可以更改的,所以上边的定义可以为:

public static void main(String[] myInputValue)

一般情况下,约定使用args的名称,而这里的args代表了命令行的输入参数,这一点可以提供一个带命令行参数的例子:

public class MainTester {

public static void main(String args[])

{

System.out.println(args[0]);

System.out.println(args[1]);

}

}

把上边的代码保存为MainTester.java,然后使用javac命令编译,这一步之前所有的的内容都不用担心,和前边一样,但是运行的时候可能需要下边这种格式:

java MainTester hello1 hello2

上边这段代码会输出为:

hello1

hello2

也就是说,该参数读取的是在java ClassName之后的参数,按照空白为分隔符,然后输入的内容就为参数的值,这些值构成了一个String[]的参数列表,上边代码里面args.length 的值为2,第一个参数为hello1,第二个参数为hello2,这就是主函数参数列表里面的参数的使用

小节一下上边几点:

使用javac命令的时候:如果.java里面没有public的class,直接针对class的定义进行编译

操作,这种情况下,.java源文件的文件名只要和里面的任何一个类的类名一致就可以了;如果.java里面定义了一个类是public的,这种情况下,.java源文件的名称只能和这个类的类名保持一致,否则编译不会通过。

使用java命令的时候:在使用java命令的时候,后边敲入命令不需要填写文件全名【不需要java ClassName.class格式】,只是需要填写类名就可以了,这种情况下,JVM会在ClassName对应的类定义里面去寻找主函数入口,如果找不到就会抛出异常,找到过后就可以执行,也可以这样讲,包含主函数的类不一定在一个public的类里面可以是非public的。Java应用程序在执行的时候,必须有一个主函数的入口【*:这里不包括Applet的运行,因为Applet里面有特殊的入口以及特殊的运行机制】,而且该主函数的入口必须定义为:public static void main(String args[])

这里还有一点需要说明:main函数是可以抛异常的,JVM在检查方法签名的时候,不会检查main后边带的异常定义,比如下边这种方式也是定义函数入口的正确方式,也就是说带异常抛出的时候仅仅检测方法签名就可以了:

public static void main(String args[]) throws Exception

注意主函数传入参数的使用,args参数实际上就是在使用java命令的时候传入的参数的值的使用,这些使用可以通过写几个简单的程序来实现,在参数使用的过程里面,一般情况下在编写程序的时候针对参数进行一定的检测,上边使用参数的代码实际上是会抛异常的,因为会存在数组越界的问题,为了保证数据不会越界,一般可以通过代码if( args.length > 0 )来对传入的参数进行判断,而且把使用参数的代码放在try-catch块里面进行数组越界异常的捕捉。

ii.Java的注释:

在Java里面主要有三种注释:行注释、段落注释、文档注释

1)行注释:行注释也成为单行注释,行注释使用“//注释文字”的格式来对某一行的代码进行注释或者加以说明

public class LineComment

{

//这是单行注释的范例

public static void main(String args[])

{

//这只是一个单行注释的例子

System.out.println("Single Line Comment");

}

}

上边代码里面//后边的文字就是行注释的一个例子

2)段注释:段注释也成为多行注释,通常是当说明文字比较长的时候的注释方法public class MultiCommont

{

/*

*这是段注释的一个简单的例子

*这里是函数入口main方法

*/

public static void main(String args[])

{

System.out.println("Multi Lines Comments");

}

}

3)文档注释:文档注释是Java里面的一个比较厉害的功能,它可以用于注释类、属性、方法等说明,而且通过JDK工具javadoc直接生成相关文档,文档注释的基本格式为“/**...*/”,不仅仅如此,文档注释本身还存在语法

[1]文档和文档注释的格式化:

生成的文档是HTML格式的,而这些HTML格式的标识符并不是javadoc加的,而是我们在写注释的时候写上去的。因此在格式化文档的时候需要适当地加入HTML标签,例如:

/**

*This is first line.

*This is second line.

*This is third line.

**/

[2]文档注释的三部分:

根据在文档中显示的效果,文档注释可以分为三个部分,这里举个例子:

/**

*testDoc方法的简单描述

*

testDoc方法的详细说明

*@param testInput String 打印输入的字符串

*@return 没有任何返回值

**/

public void testDoc(String testInput)

{

System.out.println(testInput);

}

简述:文档中,对于属性和方法都是现有一个列表,然后才在后面一个一个的详细说明,列表中属性名或者方法名后面那段说明都是简述。

详细说明:该部门对属性或者方法进行了详细说明,在格式上不需要特殊的要求,可以写成前边讲的HTML的格式,如同上边第二行的内容。【*:这里有个技巧就是简述和详细

说明尽量不要重复,在简述中出现过的内容不需要在详细说明中进行第二次描述,可以理解为详细说明是简述的一种扩展。后边章节的概念说明代码大部分我都没有写注释,也请各位读者见谅!】

特殊说明:除开上边的两部分,最后一个部分就是特殊说明部分,特殊说明部分使用JavaDoc标记进行,这些都是JavaDoc工具能够解析的特殊标记,这一点下边章节将会讲到

[3]使用javadoc标记:

javadoc标记是java插入文档注释中的特殊标记,它们用于识别代码中的特殊引用。javadoc标记由“@”以及其后跟着的标记类型和专用注释引用组成。它的格式包含了三个部分:

@、标记类型、专用注释引用

有时候我们也可以直接理解为两个方面:@和标记类型、专用注释引用;Javadoc工具可以解析Java文档注释中嵌入的特殊标记,这些文档标记可以帮助自动从源代码生成完整的格式化API,标记用“@”符号开头,区分大小写,必须按照正确的大小写字母输入。标记必须从一行的开头开始,否则会被视为普通文本,而且按照规定应将相同名字的标记放一起,比如所有的@see标记应该放到一起,接下来看一看每一种标记的含义。

@author(1.0):语法[@author name-text]

当使用-author选项的时候,用指定的name-text在生成文档的时候添加“Author”项,文档注释可以包含多个@author标记,可以对每个@author指定一个或者多个名字。

@deprecated(1.0):语法[@deprecated deprecated-text]

添加注释,只是不应该再使用该API(尽管是可用的),Javadoc工具会将deprecated-text 移动到描述前面,用斜体显示,并且在它前边添加粗体警告:“不鼓励使用”。deprecated-text 的首句至少应该告诉用户什么时候开始不鼓励使用该API以及使用什么替代它。Javadoc仅将首句复制到概览部分和索引中,后面的语句还可解释为什么不鼓励使用,应该还包括一个指向替代API的{@link}标记【1.2版本用法】

对于Javadoc 1.2,使用{@link}标记,这将在需要的地方创建内嵌链接,如:

/**

*@deprecated 在JDK X.X中,被{@link #methodName(paramList)}取代

**/

【*:在上边的标记里面X.X指代JDK的版本,后边的链接链接的是方法的签名,methodName 为方法名,paramList为参数列表】

对于Javadoc 1.1,标准格式是为每个@deprecated标记创建@see标记(它不可内嵌)@exception(1.0):语法[@exception class-name description]

@throws(1.2):语法[@throws class-name description]

以上两个标记是同义词,用class-name和description文本给生成的文档添加“抛出”子标题,其中class-name是该方法可抛出的异常名。

{@link}(1.2):语法[{@link name label}]

出入指向指定name的内嵌链接,该标记中name和label的语法与@see标记完全相同,如下所述,但是产生的内嵌链接而不是在“参见”部分防止链接。该标记用花括号开始并用花括号结束,以使它区别于其他内嵌文本,如果需要在标签内使用“}”,直接使用HTML 的实体表示法:}

@param(1.0):语法[@param parameter-name description]

给“参见”部分添加参数,描述可以继续到下一行进行操作,主要是提供了一些参数的格式以及描述

@return(1.0):语法[@return description]

用description本文添加“返回”部分,该文本应描述值的返回类型和容许范围

@see(1.0):语法[@see reference]

该标记是一个相对复杂的标记,添加“参见”标题,其中有指向reference的链接或者文本项,文档注释可包含任意数目的@see标记,它们都分组在相同的标题下,@see有三种格式:

@see “string”注:该形式在JDK 1.2中没有用,它不打印引用文本

为string添加文本项,不产生链接,string是通过该URL不可用的书籍或者其他信息引用,Javadoc通过查找第一个字符为双引号(")的情形来区分它前边的情况,比如:

@see "这是Java教材,主要是提供给初学者"

上边的注释将会生成:

参见:

“这是Java教材,主要是提供给初学者”

@see Java某章节

添加URL#value定义的链接,其中URL#value是相对URL或者绝对URL,JavaDoc工具通过查找第一个字符小写符号(<)区分它与其他情况,比如:

@see 测试规范

上边的注释将会生成:

参见:

测试规范

@see package.class#member label【比较常用的一种格式】

添加带可见文本label的链接,它指向Java语言中指定名字的文档。其中label是可选的,如果省略,则名字作为可见文本出现,而且嵌在HTML标记中,当想要缩写可见文本或不同于名字的可见文本的时候,可以使用label。

——package.class#member是Java语言中的任何有效名字——包名、类名、接口名、构造函数名、方法名或域名——除了用hash字符(#)取代成员名前面的点之外,如果该名字位于带文档的类中,则Javadoc将自动创建到它的链接,要创建到外部的引用链接,可使用-link选项,使用另外两种@see形式中的任何一种引用不属于引用类的名字的文档。

——label是可选文本,它是链接的可见标签,label可包含空白,如果省略label,则将显示package.class.member,并相对于当前类和包适当缩短

——空格是package.class#member和label之间的分界符,括号内的空格不表示标签的开始,因此在方法各参数之间可使用空格

@see package.class#member的典型形式

引用当前类的成员

@see #field

@see #method(Type,Type,...)

@see #method(Type argname,Type argname,...)

引用当前包或导入包中的其他类

@see Class#field

@see Class#method(Type,Type,...)

@see Class#method(Type argname,Type argname,...)

@see Class

引用其他包(全限定)

@see package.Class#field

@see package.Class#method(Type,Type,...)

@see package.Class#method(Type argname,Type argname,...)

@see package.Class

@see package

简单说明一下:

——第一套形式(没有类和包)将导致Javadoc 仅搜索当前类层次。它将查找当前类或接口、其父类或超接口、或其包含类或接口的成员。它不会搜索当前包的其余部分或其他包(搜索步骤4-5)。

——如果任何方法或构造函数输入为不带括号的名字,例如getValue,且如果没有具有相同名字的域,则Javadoc 将正确创建到它的链接,但是将显示警告信息,提示添加括号和参数。如果该方法被重载,则Javadoc 将链接到它搜索到的第一个未指定方法。

——对于所有形式,内部类必须指定为outer.inner,而不是简单的inner。

——如上所述,hash 字符(#)而不是点(.)用于分隔类和成员。这使Javadoc 可正确解析,因为点还用于分隔类、内部类、包和子包。当hash 字符(#)是第一个字符时,它是绝对不可少的。但是,在其他情况下,Javadoc 通常不严格,并允许在不产生歧义时使用点号,但是它将显示警告。

@see标记的搜索次序——JavaDoc将处理出现在源文件(.java)、包文件(package.html)或概述文件(overview.html)中的@see标记,在后两种文件中,必须完全限定使用@see提供的名字,在源文件中,可指定全限定或部分限定的名字,@see的搜索顺序为:

当前类或接口

任何包含类和接口,先搜索最近的

任何父类和超接口,先搜索最近的

当前包

任何导入包、类和接口,按导入语句的次序搜索

@since(1.1):语法[@since since-text]

用since-text指定的内容给生成文档添加“Since”标题,该文本没有特殊内部结构,该标记表示该改变或功能自since-text所指定的软件件版本后就存在了,例如:@since JDK 1.4

@serial(1.2):语法[@serial field-description]

用于缺省的可序列化域的文档注释中,可选的field-description增强了文档注释对域的描述能力,该组合描述必须解释该域的意义并列出可接受值,如果有需要描述可以多行,应该对自Serializable类的最初版本之后添加的每个可序列化的域添加@since标记。

@serialField(1.2):语法[@serialField field-name field-type field-description]

简历Serializable类的serialPersistentFields成员的ObjectStreamField组件的文档,应该对每个ObjectStreamField使用一个@serialField标记

@serialData(1.2):语法[@serialData data-description]

data-description建立数据(尤其是writeObject方法所写入的可选数据和Externalizable.writeExternal方法写入的全部数据)序列和类型的文档,@serialData标记可用

史上最全Java基础知识点归纳

史上最全Java基础知识点归纳 写这篇文章的目的是想总结一下自己这么多年来使用Java的一些心得体会,主要是和一些Java基础知识点相关的,所以也希望能分享给刚刚入门的Java 程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java。 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE 相关的、和Java中各个框架相关的内容。 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。 1.JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资

深开发者来说,不会JVM几乎是不可接受的。 JVM作为Java运行的基础,很难相信对于JVM一点都不了解的人可以把Java语言吃得很透。我在面试有超过3年Java经验的开发者的时候,JVM几乎就是一个必问的问题了。当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证Java开发能力的高低。 在JVM这个大类中,我认为需要掌握的知识有: JVM内存模型和结构 GC原理,性能调优 调优:Thread Dump,分析内存结构 class二进制字节码结构,class loader体系,class加载过程,实例创建过程 方法执行过程 Java各个大版本更新提供的新特性(需要简单了解) 2.Java的运行(基础必备) 这条可能出看很简单,Java程序的运行谁不会呢?不过很多时候,我们只是单纯通过IDE去执行Java程序,底层IDE又是如何执行Java程序呢?很多人并不了解。

Java入门基础代码

例1-1 DoubleVariableDemo.java class DoubleVariableDemo{ public static void main(String args[]){ double dRadius=2.0d; double dArea=Math.PI*dRadius*dRadius; System.out.println("半径为2的圆的面积:"+dArea); } } 例1-2 BooleanConstantDemo.java class BooleanConstantDemo{ public static void main(String args[]){ final boolean BFLAG=true; if(BFLAG) System.out.println("Always Print Out Me!"); else System.out.println("Never Print Out Me!"); } } 例1-3 DecisionDemo.java class DecisionDemo{ public static void main(String args[]){ short x=1,y=2,z; // 错误代码 // z = x + y; // 正确代码 z=(short)(x+y); System.out.println(z); } } 例1-4 IntegerConstantDemo . java class IntegerConstantDemo{ public static void main(String args[]){ final byte nMaxValue_1=100; final short nMaxValue_2=200; final int nMaxValue_3=300; final long nMaxValue_4=400; System.out.println("整数常量的nMaxValue_1值"+nMaxValue_1); System.out.println("整数常量的nMaxValue_2值"+nMaxValue_2); System.out.println("整数常量的nMaxValue_3值"+nMaxValue_3); System.out.println("整数常量的nMaxValue_4值"+nMaxValue_4); // nMaxValue_1 = nMaxValue_1 + 1; 不能更改常量的值

Java基础知识总结(超级经典)

Java基础知识总结 写代码: 1,明确需求。我要做什么? 2,分析思路。我要怎么做?1,2,3。 3,确定步骤。每一个思路部分用到哪些语句,方法,和对象。 4,代码实现。用具体的java语言代码把思路体现出来。 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用。demo 4,该技术什么时候用?test。 ----------------------------------------------------------------------------------------------- 一:java概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器; 1994年将Oak语言更名为Java; Java的三种技术架构: JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发; JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它

两者的基础; JAVAME:Java Platform Micro Edition,开发电子消费产品和嵌入式设备,如手机中的程序; 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具和jre。 2,JRE:Java Runtime Environment,java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。 3,配置环境变量:让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 环境变量的配置: 1):永久配置方式:JAVA_HOME=%安装路径%\Java\jdk path=%JAVA_HOME%\bin 2):临时配置方式:set path=%path%;C:\Program Files\Java\jdk\bin 特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。 classpath的配置: 1):永久配置方式:classpath=.;c:\;e:\ 2):临时配置方式:set classpath=.;c:\;e:\ 注意:在定义classpath环境变量时,需要注意的情况 如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运

java基础笔试题(答案已整理)

Java基础试题 一:选择题(1*30=30)(题目写在答题纸上面) 1:Java 提供哪几种运算符多选( abcd )。 A)算术运算符B)位运算符 C)关系运算符D)逻辑运算符E)条件运算符 2:https://www.wendangku.net/doc/947763514.html,ng包的()方法比较二个对象是否相等返回true.。(b) A:toString() B:equals() C:compare D:以上都不正确 3:下列对Java 的变量与函数说法正确的是多选(ace )。 A)变量是用来保存数据的B)变量是用来实现操作过程的C)函数是用来实现操作过程的D)函数是用来保存数据的E)函数的参数是数据的入口 4:已知:int[] a = new int[100];在下列给出的数组元素中,非法的是。(d) A:a[0] B:a[1] C:a[99] D:a[100] 5:在java中,一个类可同时定义许多同名的方法,在这些方法的形式参数个数,类型或顺序各不相同,传值也可以各不相同。这种面向对象程序的特性称为。(c) A:隐藏B:覆盖C:重载D:Java不支持此特性 6:()是一组常量和抽象方法的集合。(d) A:实例B:类C:包D:接口 7:下面关于数组说法正确的是多选(abcde)。 A)一维数组实质上是相同类型变量的列表 B)创建一个数组首先定义数组变量所需的类型 C)char c[]=new char[26];可声明一个含有26 个元素的char型数组 D)当为一个多维数组的时候分配内存时,仅需要为第一指定内存,然后再分配其他维的存E)int twain[][] = new int[4][5];可声明一个二维数组 8:Java源文件和编译后的文件扩展名分别为。(b) A:.class和.java B:.java各.class C:.class和.class D:.java和.java 9:设x=5;则y=x--和y=--x的结果,使y分别为。(c) A:5,5 B:5,6 C:5,4 D:4,4 10:若x是float类变量,x=10/4;则x 的值是。(b) A:2 B:2.0 C:2,5 D:编译错误 11:.下面方法中,用于调度线程使其运行的是?多选(bc ) A. init() B. start() C. run() D. resume() E. sleep() 12.下面哪种情况能实现自动转换多选(ace )。 A)byte 型转换成int 型B)int 型转换成byte 型 C)float 型转换成double型D)double 型转换成int 型E)char型转换成int 型 13:下列那些是正确的JAVA字符串?多选(abd )。 A. "\"\"" B. "Oxzabc" C. "\"\" D. "\t\t\r\n" E. "boolean"5 14:在使用super 和this关键字时,以下描述正确的是。(a) A::在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过 B:super()和this()不一定要放在构造方法内第一行

java基础知识点总结

Created by AIwen on 2017/5/14. java是面向对象的程序设计语言;类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量,它们将会引用到类的对象。类用于描述客观世界里某一类对象的共同特征,而对象则是类的具体存在,java程序使用类的构造器来创建该类的对象。 java也支持面向对象的三大特征:封装、继承、和多态。java提供了private、protected、和public三个访问控制修饰符来实现良好的封装,提供了extends关键字让子类继承父类,子类继承父类就可以继承到父类的成员变量和和方法,如果访问控制允许,子类实例可以直接调用父类里定义的方法。继承是实现类复用的重要手段。使用继承关系来实现复用时,子类对象可以直接赋给父类变量,这个变量具有多态性。 面向对象的程序设计过程中有两个重要的概念:类(Class)和对象(object,也被称为实例,instance)。类可以包含三种最常见的成员:构造器、成员变量、和方法。 构造器用于构造该类的实例,java语言通过new关键字类调用构造器,从而返回该类的实例。构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。因此java语言提供了一个功能:如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的构造器,这个构造器总是没有参数的。一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器。 构造器用于对类实例进行初始化操作,构造器支持重载,如果多个重载的构造器里包含了相同的初始化代码,则可以把这些初始化代码放置在普通初始化块里完成,初始化块总在构造器执行之前被调用。静态初始化块代码用于初始化类,在类初始化阶段被执行。如果继承树里某一个类需要被初始化时,系统将会同时初始化该类的所有父类。 构造器修饰符:可以是public、protected、private其中之一,或者省略构造器名:构造器名必须和类名相同。 注意:构造器既不能定义返回值类型,也不能使用void声明构造器没有返回值。如果为构造器定义了返回值类型,或使用void声明构造器没有返回值,编译时不会出错,但java会把这个所谓的构造器当成方法来处理——它就不再是构造器。 实际上类的构造器是有返回值的,当使用new关键字来调用构造器时,构造器返回该类的实例,可以把这个类的实例当成构造器的返回值。因此构造器的返回值类型总是当前类,无须定义返回值类型。不要在构造器里显式的使用return来返回当前类的对象,因为构造器的返回值是隐式的。 java类名必须是由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。 成员变量: 成员变量的修饰符:public、protected、private、static、final前三个只能出现一个再和后面的修饰符组合起来修饰成员变量,也可省略。 成员变量:由一个或者多个有意义的单词连缀而成,第一个单词首字母小写,后面每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。 类型:可以是java语言允许的任何数据类型,包括基本类型和引用类型。 成员方法: 方法修饰符:public、protected、private、static、final、abstract,前三个只能出现一个,static和final最多只能出现其中的一个,和abstract组合起来使用。也可省略。 返回值类型:可以是java语言的允许的任何数据类型,包括基本类型和引用类型。 方法名:和成员变量的方法命名规则相同,通常建议方法名以英文动词开头。 方法体里多条可执行语句之间有严格的执行顺序,排在方法体前面的语句总先执行,排在方法体后面的语句总是后执行。 static是一个特殊的关键字,它可用于修饰方法、成员变量等成员。static修饰的成员表明它属于这个类本身,而

《Java基础入门》-课后习题答案--1-6

第1章Java开发入门 一、填空题 1、Java EE、Java SE、Java ME 2、JRE 3、javac 4、bin 5、path、classpath 二、选择题 1、ABCD 2、C 3、D 4、B 5、B 三、简答题 1、面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。 2、JRE(Java Runtime Environment,Java运行时环境),它相当于操作系统部分,提供了Java程序运 行时所需要的基本条件和许多Java基础类,例如,IO类、GUI控件类、网络类等。JRE是提供给普通用户使用的,如果你只想运行别人开发好的Java程序,那么,你的计算机上必须且只需安装JRE。 JDK(Java Development Kit,Java开发工具包),它包含编译工具、解释工具、文档制作工具、打包工具多种与开发相关的工具,是提供给Java开发人员使用的。初学者学习和使用Java语言时,首先必须下载和安装JDK。JDK中已经包含了JRE部分,初学者安装JDK后不必再去下载和安装JRE了。 四、编程题 public class HelloWorld { public static void main(String[] args) { System.out.println("这是第一个Java程序!"); } } 第2章Java编程基础 一、填空题 1、class 2、true和false 3、单行注释、多行注释、文档注释 4、基本数据类型、引用数据类型 5、1、2、4、8 6、& && | || 7、0 8、5 9、34 10、56 二、判断题 1、错 2、对 3、错 4、对 5、错

Java基础知识

Java基础知识 Java基础知识精选 Java技术具有卓越的通用性、高效性、平台移植性和安全性,下面整理了一些Java基础知识,希望对大家有所帮助! 1、Java中成员变量又分为实例成员变量和类成员变量。 2、写类的目的是为了描述一类事物共有的属性和功能。 3、成员变量和局部变量的类型可以是Java中的任何一种数据类型。 4、用修饰符static说明的成员变量是类变量。 5、变量的名字与成员变量的名字相同,则成员变量被隐藏,该成员变量在这个方法内暂时失效。 6、用修饰符static说明的成员变量是类变量。 7、如果局部变量的名字与成员变量的名字相同,成员变量将被隐藏。 8、方法定义包括两部分:方法声明和方法体。 9、在Java中,当一个方法不需要返回数据时返回类型必须是void。 10、方法重载是指,一个类中可以有多个方法具有相同的名字和类型,但这些方法的参数必须不同。 11、在Java程序语言中,它允许在一个class中有几个方法,都有相同的名字,这种用法称为方法重载。 12、构造方法是一种特殊方法,它的名字必须与它所在的类的名字完全相同,并不返回任何数据类型。

14、因为类体的内容由成员变量的.定义和成员方法的定义两部分组成,对成员变量的操作只能放在成员方法中。 15、Java中构造方法与类名相同,没有返回值,在创建对象实例时由new运算符自动调用。 16、在类方法中只能调用类变量和类方法,不能调用实例方法。 17、实例方法既能对类变量操作也能对实例变量操作,而类方法只能对类变量进行操作。18、Java中类是创建对象的模板。 19、当使用一个类创建了一个对象时,我们也说给出了这个类的实例。 20、Java中用类创建一个对象包括对象的声明和为对象分配内存两个步骤。 21、对象声明的一般格式为类名对象名。 22、一个类通过使用new运算符可以创建多个不同对象,这些对象将分配不同得内存空间。 23、一个类通过使用new运算符和类的构造方法为声明的对象分配内存。 24、对象创建完后,通过使用运算符“.”,对象可以实现对变量的访问和方法的调用。 25、Java中不同对象的实例变量将被分配不同的内存空间。 26、Java中如果类中的成员变量有类变量,那所有的对象的给这样的变量分配给相同的一处内存。 27、类方法和实例方法的区别在于类方法不但可以由对象调用还可以直接由类名调用,而实例方法却不可以。 28、类方法方法不但可以由对象调用还可以直接由类名调用,而实例方法却不可以。

Java基础入门教程(适合所有初学者)

第1章 Java语言概述与面向对象思想 1 1.1 Java语言的发展 1 1.1.1 Java语言的产生 1 1.1.2 Java语言的发展 1 1.2 Java语言的特点 2 1.3 面向对象与面向过程的差异 3 1.3.1 面向过程思想回顾 4 1.3.2 面向对象思想介绍 4 1.4 面向对象程序设计中的主要概念和特征 4 1.4.1 主要概念 5 1.4.2 主要特征 5 *1.5 Java与C++的差异 5 1.6本章小结5 习题 5 第2章 Java语言开发环境 6 2.1 JDK 6 2.1.1 JDK的简介6 2.1.2 JDK的构成6 2.1.3 JDK的使用6 2.2 IDE 8 2.2.1 IDE简介8 2.2.2 JBuilder 9 2.2.3 Eclipse 9 2.2.4 相关资源9 2.3 Project管理9 2.3.1 Project的含义9 2.3.2 可行的Project组织模式9 2.3.3 主要开发工具的Project目录10 2.4 本章小结10 习题10 第1章 Java语言概述与面向对象思想 1.1 Java语言的发展 1.1.1 Java语言的产生以介绍面向对象编程的基本概念、基本理论为重点,结合Java语言的语法规则、编程特点和设计思想、强调容易发生错误和编程应注意的地方,使学生能对Java 技术有一个总体了解,通过本课程学习,使学生掌握Java语言的基础知识,理解和掌握面向对象程序设计的基本思想,熟练地使用Java语言进行程序的编写、编译以及调试工作 上世纪90年代初期,Sun公司在研究一种适用于未来的智能设备的编程语言,该语言要具有一些新的特性,以避免C++的一些不足。 该语言起初命名为Oak,来源于语言作者Gosling办公室窗外的一棵橡树(Oak)。后来在注册时候遇到了冲突,于是就从手中的热咖啡联想到了印度尼西亚一个盛产咖啡的岛屿,中文名叫爪哇,Java语言得名于此。 随着Internet的迅速发展,Web应用日益广泛,Java语言也得到了迅速发展。1994年,Gosling

《Java编程基础知识点汇总及习题集》--答案

目录 第一章 Java入门 (2) 第二章 Java基础 (5) 第三章条件转移 (16) 第四章循环语句 (22) 第五章方法 (28) 第六章数组 (35) 第七章面向对象 (44) 第八章异常 (65)

第一章Java入门 知识点汇总 1、JAVA 三大体系 ?Java SE:(J2SE,Java2 Platform Standard Edition,标准版),三个平台中最核心 的部分,包含Java最核心的类库。 ?JavaEE:(J2EE,Java 2 Platform, Enterprise Edition,企业版),开发、装 配、部署企业级应用,包含Servlet、JSP、 JavaBean、JDBC、EJB、Web Service等。 ?Java ME:(J2ME,Java 2 Platform Micro Edition,微型版),用于小型电子设备 上的软件开发。 2、JDK,JRE,JVM的作用及关系 作用 ★JVM:保证Java语言跨平台 ★JRE:Java程序的运行环境 ★JDK:Java程序的开发环境 关系 ★JDK:JRE+工具 ★JRE:JVM+类库 3、JDK环境变量配置 ?path环境变量:存放可执行文件的存 放路径,路径之间用逗号隔开 ?classpath环境变量:类的运行路径, JVM在运行时通过classpath加载需要 的类 4、重点掌握两个程序 ?javac.exe:Java编译器工具,可以将编 写好的Java文件(.java)编译成Java 字节码文件(.class); ?java.exe:Java运行工具,启动Java虚 拟机进程,运行编译器生成的字节码 文件(.class) 5、一切程序运行的入口 public static void main(String args []){ System.out.println(“Hello World!”); } 课堂笔记

java基础知识点

第一天课程(2012-7-10) JAVA常用的名词 JVM java 虚拟机 Application 应用程序必须有一个入口的方法叫做public static void main(String[] args){} Applet 小应用程序该程序必须要嵌在一个容器中运行,它有自己的生命周期 .sun. 重点: JAVA的开发环境 JDK: java 开发工具集 JDK版本问题 1.4不支持泛型 5.0 泛型 6.0 枚举 默认安装路径C:\Program Files\Java\ JRE: JAVA运行时环境 环境变量的配置 (1)Path:window寻找可执行应用程序的一个查找路径不同的路径之间使用;来分隔 配置一个路径 C:\Program Files\Java\jdk1.6.0_26\bin (2)CLASSPATH 告诉系统到那些目录下面去查找对应的要执行的文件 .;D:\3020\j2se\cx\chapter1

.表示当前目录 预习作业: 常用的DOS命令 切换目录查询文件拷贝文件重命名移动文件 *表示通配符 *.java *.* 常用java命令 Javac 编译命令主要将以.java结尾的Java文件编译生成以.Class结尾的二进制字节码文件。 Javac java文件名.java Java 运行命令 java 类名 Javadoc 生成帮助文档命令 javadoc java文件 面向对象的基本概念 类 (属性方法构造方法 ) 对象对象创建传递销毁 面向对象的三大基本特性:封装、继承、多态 OOP AOP

是由客观事物经过大脑抽象而形成概念,是对一类事物的描述 使用class 关键字来描述类 类中有属性和方法: 属性对应的是事物的静态特性 (可以叫做成员变量) 方法对应的是事物的动态特性 对象:是类的一个具体的实例化 创建对象对象的方法: 类名对象名 = new 类名(); 调用类的构造方法来创建对象构造方法是特殊的方法:方法名=类名 注意:类中属性和方法必须在创建对象之后才能使用 对象.属性对象.方法 .表示引用 第二天课程(2012-7-11) JAVA语言描述 类的声明 语法格式: [< modifiers>] class < class_name> { [] [] []

Java基础试题及其答案

Java试题 1) java程序中,main方法的格式正确的是()。(选择一项) a)static void main(String[] args) b)public void main(String[] args) c)public static void main(String[]s) d)public static void main(String[] args) 2)给定java代码,如下: public byte count(byte b1,byte b2){ return______; } 要使用这段代码能够编译成功,横线处可以填入()。(选择一项)a)(byte) (b1-b2) b)(byte) b1-b2 c) b1-b2 d) (byte) b1/b2 3)在Java中,在包下定义一个类,要让包下的所有类都可以访问这个类,这个类必须定义为()。(选择一项) a)protected b)private c)public d)friendly 4)在Java中,下列()语句不能通过编译。 (选择一项) a) String s= “join”+ “was”+ “here”; b) String s= “join”+3; “”+new Person() toString() c) int a= 3+5 d) float f=5+; double float 6)给定java代码如下,运行时,会产生()类型的异常。(选择一项) String s=null; (“abc”); a)ArithmeticException b)NullPointerException c)IOException d)EOFException 已到文件尾,再读取抛出 7) 在java中,()对象可以使用键/值的形式保存数据。(选择一项) a)ArrayList List 有序可重复 b) HashSet Set 无序不可重复同一对象是重复 的 c) HashMap Map(key/value)重复定义:hashCode、 equals(业务) d) LinkedList List 8)给定如下java代码,编译运行之后,将会输出()。 public class Test{ public static void main(String args[]){ int a=5;

JAVA技术--Java基础知识常见考试题JAVA技术.doc

一、单选题 1.对类:(B) public class Test( //...do something } 下面那个正确地定义了类Test的构造函数。 A)public void Test() () B)publicTest()(} C ) public static Test() (} D) publicTest(); 2.下面哪个函数是public void example()(...)的重载函数。(A) A)public void example( float f)(...) B)public int example() (...) C)public void example2()(...} D)public int example_overLoad ()(...) 3.下面的代码段中,执行之后i和j的值是_C_。 int i = 1; intj; j = i++; A)1, 1 B) 1,2 C) 2, 1 D) 2,2 4.以下for循环的执行次数是_B o for(int x=0,y=0;(y !=0)&&(x<4) ;x++); A)无限次B) 一次也不执行 C)执行4次D)执行3次 5.下面程序的输出结果是—C o public class People( String name; int id; public People( String str, int n )( name = str; id = n; } public String toString(){ return id + " :” + name; } public String print()(

适合java入门学习的书籍推荐

适合java入门学习的书籍推荐 作为Java初级学习者而已,最痛苦的事情莫过于想要学好java,但是面对市场上纷繁的java学习书籍,往往容易感到无所适从。牛耳教育就java学习体系流程方面为大家挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java爱好者们。 一、Java编程入门类 1、《Java编程思想》 2、《Agile Java》中文版 二、Java编程进阶类 1、《重构改善既有代码的设计》 这本书名气很大,不用多介绍,可以在闲暇的时候多翻翻,多和自己的实践相互印证。这本书对产生影响是潜移默化的。 2、《测试驱动开发 by Example》 本书最大特点是很薄,看起来没有什么负担。可以找一个周末的下午,一边看,一边照做,一个下午就把书看完,这本书的所有例子跑完了。这本书的作用是通过实战让你培养TDD的思路。 三、Java架构师之路 到这个阶段,应该已经非常娴熟的运用Java编程,而且有了一个良好的编程思路和习惯了,但是可能还缺乏对应用软件整体架构的把握,现在就是迈向架构师的第一步。 1、《Expert One-on-One J2EE Design and Development》 这本书是Rod Johnson的成名著作,非常经典,从这本书中的代码诞生了springframework。但是好像这本书没有中译本。 2、《Expert One-on-One J2EE Development without EJB》 这本书由gigix组织翻译,多位业界专家参与,虽然署名译者是JavaEye,其实JavaEye出力不多,实在是忝居译者之名。

JAva基础期末考试试卷

一、填空题 1、面向对象的三大特征是______、______和______。 2、在程序开发中,要想将一个包中的类导入到当前程序中,可以使用______关键字。 3、编译Java程序需要使用______命令。 4、如果子类想使用父类中的成员,可以通过关键字______引用父类的成员。 5、在Java语言中,所有的类都直接或间接继承自______类。 6、定义一个Java类时,如果前面加使用______关键字修饰,那么该类不可以被继承。 7、String类中用于返回字符串字符个数的方法是_____。 8、若x = 2,则表达式( x + + )/3 的值是______。 9、定义在类中的变量被称为______,定义在方法中的变量被称为______ 10、若int a[3][2]={{123,345},{34,56},{34,56}},则a[2][1]= ______。 二、选择题 1、先阅读下面的程序片段: String str = "abccdefcdch"; String[] arr = str.split("c"); System.out.println(arr.length); 程序执行后,打印的结果是几? A、2个 B、3个 C、4个 D、5个 2、以下关于变量的说法错误的是? A、变量名必须是一个有效的标识符 B、变量在定义时可以没有初始值 C、变量一旦被定义,在程序中的任何位置都可以被访问 D、在程序中,可以将一个byte类型的值赋给一个int类型的变量,不需要特殊声 明 3、在Java中,要想让一个类继承另一个类,可以使用以下哪个关键字? A、inherits B、implements C、extends D、modifies 4、类中的一个成员方法被下面哪个修饰符修饰,该方法只能在本类被访问? A、public B、protected C、private D、defaul 5、关于super关键字以下说法哪些是正确的?(多选) A、super关键字可以调用父类的构造方法 B、super关键字可以调用父类的普通方法 C、super与this不能同时存在于同一个构造方法中 D、super与this可以同时存在于同一个构造方法中 6、已知类的继承关系如下: class Employee; class Manager extends Employeer; class Director extends Employee; 则以下语句能通过编译的有哪些? A、Employee e=new Manager(); B、Director d=new Manager(); C、Director d=new Employee(); D、Manager m=new Director(); 7、String s = "abcdedcba";则s.substring(4,5)返回的字符串是以下选项中的哪个? A、cd B、de C、d D、e 8、关于抽象类的说法哪些是正确的?(多选) A、抽象类中可以有非抽象方法。

java基础介绍

1、java的编译和运行。源文件和字节码的扩展名 Java的编译(javac Java文件名)、Java的运行(java 含有main方法的类名) 源文件扩展名(.java)、字节码的扩展名(.class) 2、java中的常用基本数据类型的定义和赋值 byte -- 8-bit signed two's-complement integers short -- 16-bit signed two's-complement integers char -- 16-bit unsigned integers int -- 32-bit signed two's-complement integers long -- 64-bit signed two's-complement integers float -- 32-bit IEEE 754 floating-point numbers double -- 64-bit IEEE 754 floating-point numbers boolean -- true and false 3、String类型赋值的两种方法,以及它们是区别 String s = "Hello"; String s = new String("Hello"); 第一种方法只生成一个"Hello"对象,存在于String Pool中,第二种方法生成两个"Hello"对象,分别存在于String Pool和堆(Heap)中。 4、String类型和其它类型的转换 以int和String之间的转换为例,其他类似: int -> String String s = 5 + ""; String -> int int n = Integer.parseInt("5"); 5、java的运算符优先级 优先级运算符结合性 1 () [] . 从左到右 2 ! +(正) -(负) ~ ++ -- 从右向左 3 * / % 从左向右 4 +(加) -(减) 从左向右 5 << >> >>> 从左向右 6 < <= > >= instanceof 从左向右 7 == != 从左向右 8 &(按位与) 从左向右 9 ^ 从左向右 10 | 从左向右 11 && 从左向右 12 || 从左向右 13 ?: 从右向左 14 = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= 从右向左

Java基础试题及其答案

J a v a试题 1) java程序中,main方法的格式正确的是()。(选择一项) a)static void main(String[] args) b)public void main(String[] args) c)public static void main(String[]s) d)public static void main(String[] args) 2)给定java代码,如下: public byte count(byte b1,byte b2){ return______; } 要使用这段代码能够编译成功,横线处可以填入()。(选择一项) a)(byte) (b1-b2) b)(byte) b1-b2 c) b1-b2 d) (byte) b1/b2 3)在Java中,在包下定义一个类,要让包下的所有类都可以访问这个类,这个类必须定义为()。(选择一项) a)protected b)private c)public d)friendly 4)在Java中,下列()语句不能通过编译。(选择一项) a) String s= “join”+ “was”+ “here”; b) String s= “join”+3; “”+new Person() toString() c) int a= 3+5 d) float f=5+; double float 6)给定java代码如下,运行时,会产生()类型的异常。(选择一项) String s=null; (“abc”); a)ArithmeticException b)NullPointerException c)IOException d)EOFException 已到文件尾,再读取抛出 7) 在java中,()对象可以使用键/值的形式保存数据。(选择一项) a)ArrayList List 有序可重复 b) HashSet Set 无序不可重复同一对象是重复的 c) HashMap Map(key/value)重复定义:hashCode、equals(业务) d) LinkedList List 8)给定如下java代码,编译运行之后,将会输出()。 public class Test{ public static void main(String args[]){ int a=5;

JAVA语言基础教程

JA V A教程第一讲Java语言概述(4) 1.2.5 java平台-不断扩展的计算平台 java不仅是编程语言,还是一个开发平台,java技术给程序员提供了许多工具:编译器、解释器、文档生成器和文件打包工具等等。同时java还是一个程序发布平台,有两种主要的"发布环境",首先java运行时环境(java runtime environment,简称JRE)包含了完整的类文件包,其次许多主要的浏览器都提供了java解释器和运行时环境。目前Sun公司把java 平台划分成J2EE、J2SE、J2ME三个平台,针对不同的市场目标和设备进行定位。J2EE是Java2 Enterprise Edition,主要目的是为企业计算提供一个应用服务器的运行和开发平台。J2EE本身是一个开放的标准,任何软件厂商都可以推出自己的符合J2EE标准的产品,使用户可以有多种选择。IBM、Oracle、BEA、HP等29家已经推出了自己的产品,其中尤以BEA 公司的weglogic产品和IBM公司的websphare最为著名。J2EE将逐步发展成为可以与微软的.NET战略相对抗的网络计算平台。J2SE是Java2 Standard Edition,主要目的是为台式机和工作站提供一个开发和运行的平台。我们在学习java的过程中,主要是采用J2SE来进行开发。J2ME是Java2 Micro Edition,主要是面向消费电子产品,为消费电子产品提供一个java的运行平台,使得java程序能够在手机、机顶盒、PDA等产品上运行。上述三个java 平台的关系 1.3 一切都是对象 1.3.1面向过程 面向对象的第一个原则是把数据和对该数据的操作都封装在一个类中,在程序设计时要考虑多个对象及其相互间的关系。有些功能并不一定由一个程序段完全实现,可以让其它对象来实现,在本例中就由类Max完成求最大值的功能。而面向对象的另外一个好处是实现代码的重复使用,例如其它的程序中如果需要求最大值的功能,只需要通过类Max的对象就可以达到目的。但是如果象面向过程的代码段那样把求最大值的算法都实现在该代码段

Java期末知识点整理总结

Java期末知识点整理总结 计科2班苏锐师编号47 学号201330551464 第一章 Java语言概述 1. Java语言发展历史和现状及前景 2. Java语言的特点: 简单、面向对象、分布式、健壮性、结构中立、 安全性、可移植、解释的、高性能、多线程、多态性 3. Java虚拟机概念(JVM),Java程序的执行过程 4. Java应用程序分类:Application和Applet 5. Java程序的开发环境:JDK,IDE 第二章 Java数据类型及其运算 1. 标识符与保留字 1.2 标识符命名语法规则与Java推荐的标识符命名规则 1.3 Java中的关键字 2. 数据类型byte, short, int long, char, float, double, boolean 注意点:Java中所有数据类型是确定的,与平台无关,没有sizeof操作,其中特别注意char 类型是2字节Unicode编码,与C++ 不同;知道基本类型都有对应的默认值。 整型数的十进制、八进制、十六进制值的表示。 实型数的十进制、十六进制与科学计数法表示,注意实型常量默认类型为double型。 3. 运算符与表达式算术运算符: + - * / % ++ -- 关系运算符:> >= < <= == != 逻辑运算符:&& || !& | 注意短路计算与非短路计算的差别 位运算符: >> << >>> & | ^ ~ 要认识异或(^)与按位取反(~)运算符 赋值运算符: += -= *= /= %= &= |= ^= <<= >>= >>>= 要注意赋值运算符中包含了强制转换: 若: int k = 1; k += 44.232D; 则相当于: k = (int) ( k + 44.232D); 条件运算符:exp ?stat1 :stat2 要注意stat1与stat2要求类型相兼容且不能为void类型。运算符的优先级:算术运算 > 关系运算> 逻辑运算

《Java基础入门》_课后习题答案解析__1~

第1章 Java开发入门 一、填空题 1、Java EE、Java SE、Java ME 2、JRE 3、javac 4、bin 5、path、classpath 二、选择题 1、ABCD 2、C 3、D 4、B 5、B 三、简答题 1、面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。 2、JRE(Java Runtime Environment,Java运行时环境),它相当于操作系统部分,提供了Java程 序运行时所需要的基本条件和许多Java基础类,例如,IO类、GUI控件类、网络类等。JRE是提供给普通用户使用的,如果你只想运行别人开发好的Java程序,那么,你的计算机上必须且只需安装JRE。 JDK(Java Development Kit,Java开发工具包),它包含编译工具、解释工具、文档制作工具、打包工具多种与开发相关的工具,是提供给Java开发人员使用的。初学者学习和使用Java语言时,首先必须下载和安装JDK。JDK中已经包含了JRE部分,初学者安装JDK后不必再去下载和安装JRE了。 四、编程题 public class HelloWorld { public static void main(String[] args) { System.out.println("这是第一个Java程序!"); } } 第2章 Java编程基础 一、填空题 1、 class 2、 true和false 3、单行注释、多行注释、文档注释 4、基本数据类型、引用数据类型 5、 1、2、4、8 6、 & && | || 7、 0 8、 5 9、 34 10、56 二、判断题 1、错 2、对 3、错 4、对 5、错

相关文档