你必须知道的261个Java语言问题

2014-08-11 06:30:01 阅读( 93 )

2199人 收藏本页

标签:Java面试题

Java基本概念及环境配臀
Java编裎荩础
Java与面向对象
Java流和文件操作
Java GUI编程
Java线程和序列化
Java网络编程
Java常用功能
Java数据库操作
Java Web程序设汁
目录
第1章 Java基本概念及环境配置 .1
FAQ1.01 什么是面向对象程序设计? 1
FAQ1.02 面向对象程序设计的基本特征有哪些? 2
FAQ1.03 Java语言是如何产生和发展的? 3
FAQ1.04 Android与Java语言有什么关系? 4
FAQ1.05 Java SE. Java EE和Java ME有什么区别? 5
FAQ1.06 Java语言的运行机制如何? 6
FAQ1.07 什么是JVM?有什么作用?工作机制如何? 8
FAQ1.08 什么是JRE(或J2RE)? 9
FAQ1.09 什么是JDK? 10
FAQ1.10 JDK. JRE和JVM之间有什么区别? 11
FAQ1.11 什么是GC?GC的工作原理如何? 12
FAQ1.12 如何安装Java基本开发环境JDK? 13
FAQ1.13 为何在JDK安装路径下存在两个JRE? 16
FAQ1.14 JDK安装时设置PATH和CLASSPATH环境变量有何作用? 17
FAQ1.15 如何编译. 运行Java应用程序? 18
FAQ1.16 如何将程序中的文档注释提取出来生成说明文档? 20
FAQ1.17 怎样制作鼠标双击就可以运行的Jar文件? 23
FAQ1.18 怎样给main(String[] args)方法的args指定参数值? 26

第2章 Java编程基础 28
FAQ2.01 Java中的标识符如何命名?可以用中文吗? 28
FAQ2.02 Java中有哪些关键字? 29
FAQ2.03 用public. protected和private修饰方法有什么区别? 30
FAQ2.04 this关键字有什么含义?在哪些情况下应用? 31
FAQ2.05 super关键字有什么含义?在哪些情况下应用? 32
FAQ2.06 static关键字有什么含义?具体如何应用?能修饰构造方法吗? 34
FAQ2.07 final关键字有什么含义?具体如何应用? 36
FAQ2.08 instanceof关键字有什么含义?如何应用? 37
FAQ2.09 Java中有哪些数据类型? 38
FAQ2.10 如何解决double和float精度不准的问题? 40
FAQ2.11 int和Integer都可以作为整数类型, 那么它们有什么区别? 43
FAQ2.12 float f=3.4语句是否正确? 44
FAQ2.13 成员变量和局部变量有什么区别? 45
FAQ2.14 变量之间传值时可分为值传递和引用传递, 那么它们有何区别? 46
FAQ2.15 Java中有哪些运算符?优先级如何? 48
FAQ2.16 在实现x和y相加时, x+=y和x=x+y两种实现方式有区别吗? 50
FAQ2.17 在执行与运算时, 运算符&和&&有什么区别? 50
FAQ2.18 在实现x递增加1操作时, x++和++x有什么区别? 52
FAQ2.19 x?y:z格式的语句表示什么意思? 53
FAQ2.20 “+”操作符在Java内部是如何实现字符串连接的? 54
FAQ2.21 ==和equals()都可用于比较两个操作数是否相等, 它们有什么区别吗? 55
FAQ2.22 创建String对象时, 使用String s=new String (“abc”)和String s=“abc”语句有什么区别? 56
FAQ2.23 break和continue语句有什么区别? 56
FAQ2.24 数组如何定义和初始化? 57
FAQ2.25 如何实现一维和二维数组的遍历? 59
FAQ2.26 如何实现数组的复制? 60
FAQ2.27 数组的排序算法有哪些?如何实现? 61
FAQ2.28 如何解决ArrayIndexOutOfBounds Exception异常? 64

第3章 Java与面向对象 65
FAQ3.01 什么是类. 对象. 属性和方法? 65
FAQ3.02 什么是包?有什么好处? 67
FAQ3.03 什么是抽象类?有什么好处? 67
FAQ3.04 什么是接口?有什么好处? 69
FAQ3.05 什么是多态?有什么好处? 70
FAQ3.06 什么是内部类?有什么好处? 71
FAQ3.07 什么是匿名内部类?如何使用? 73
FAQ3.08 什么是封装类?有什么作用? 74
FAQ3.09 什么是继承?有什么好处? 75
FAQ3.10 使用new关键字创建对象时, 为什么有时候提示找不到无参的构造方法? 76
FAQ3.11 抽象类和接口都可以包含抽象方法, 那么它们有什么区别?使用时该如何选择? 76
FAQ3.12 什么是方法重写?为什么需要方法重写? 78
FAQ3.13 什么是方法重载?为什么需要方法重载? 78
FAQ3.14 构造方法是否可以被重写?能否被重载? 79
FAQ3.15 static修饰的方法能否在子类中重写? 80
FAQ3.16 在定义类时, 何时需要重写Object类中toString()方法? 81
FAQ3.17 在定义类时, 何时需要重写Object类中equals()方法? 82
FAQ3.18 为什么在重写equals()方法时, 一般都会重写HashCode()方法? 84
FAQ3.19 如何重写hashCode()方法? 85
FAQ3.20 Java中动态绑定是什么意思? 87
FAQ3.21 Java中是如何实现多态的?实现机制是什么? 88
FAQ3.22 创建类的对象时, 类中各成员的执行顺序是什么样的? 89
FAQ3.23 什么是初始化块?有什么作用? 90
FAQ3.24 静态初始化块与非静态初始化块有什么区别? 92
FAQ3.25 如何调用内部类中的方法? 93
FAQ3.26 当内部类和外部类的成员名称相同时, 如何在内部类中调用外部类的成员? 94
FAQ3.27 匿名内部类如何访问外部方法的局部变量或参数? 95
FAQ3.28 Java异常处理机制是什么样的? 96
FAQ3.29 常见的RuntimeException异常有哪些? 97
FAQ3.30 Java中异常处理的方式有哪些? 98
FAQ3.31 try-catch-finally语句块各部分的执行顺序如何? 100
FAQ3.32 为什么使用自定义异常?自定义异常如何使用? 101

第4章 Java流和文件操作 103
FAQ4.01 如何获取文件的属性信息? 103
FAQ4.02 如何判断文件是否为空? 105
FAQ4.03 如何实现文件的创建. 删除和移动? 105
FAQ4.04 如何创建和删除文件夹? 107
FAQ4.05 如何遍历目录中所有的文件? 109
FAQ4.06 如何获取文件夹大小? 110
FAQ4.07 什么是流?如何分类?具体包含哪些类? 111
FAQ4.08 如何实现字节流和字符流之间的转化? 113
FAQ4.09 如何判断要读的文件是否到达末尾? 116
FAQ4.10 如何读文件. 写文件? 117
FAQ4.11 如何以追加的方式写文件? 118
FAQ4.12 如何实现文件和文件夹的复制? 119
FAQ4.13 如何在文件的任意位置进行读写? 121
FAQ4.14 使用Buffered缓冲流写文件, 为什么内容没有写入? 122
FAQ4.15 如何实现文件的分割与合并? 123
FAQ4.16 什么是NIO?与I/O有什么区别和联系? 125
FAQ4.17 如何使用NIO读写文件? 127
FAQ4.18 什么是字符编码和解码? 129
FAQ4.19 读写文件时为什么中文字符经常产生乱码? 130
FAQ4.20 如何解决FileReader读文件乱码的问题? 131
FAQ4.21 为什么DataInputStream和DataOutputStream读写文件时乱码? 132
FAQ4.22 如何实现文件锁定功能? 134
FAQ4.23 如何实现对文件和字符串加密. 解密? 135
FAQ4.24 如何实现对文件和目录的压缩. 解压缩? 139
FAQ4.25 如何读写properties文件? 143
FAQ4.26 如何读写XML文件? 146
FAQ4.27 如何读写XML文件中的元素属性? 151
FAQ4.28 如何读写CSV格式的文件? 152
FAQ4.29 如何为图片文件生成缩略图? 154
FAQ4.30 如何操作Excel文件? 156
FAQ4.31 如何操作Word文件? 161

第5章 Java GUI编程 164
FAQ5.01 什么是Java GUI?Swing与AWT有什么关系? 164
FAQ5.02 什么是布局管理器?常用的布局管理器有哪些? 165
FAQ5.03 如何在窗体中显示一张图片? 170
FAQ5.04 如何为容器添加滚动条功能? 171
FAQ5.05 如何实现一个打开文件或者是存储文件的对话框? 173
FAQ5.06 如何实现弹出消息框的功能? 175
FAQ5.07 如何使用Dialog对话框? 177
FAQ5.08 如何为按钮添加单击事件? ..178
FAQ5.09 如何为窗体添加关闭事件? 181
FAQ5.10 如何实现窗体菜单功能? 183
FAQ5.11 如何处理键盘输入事件? 185
FAQ5.12 如何处理鼠标单击事件?如何区分是左键还是右键? 186
FAQ5.13 如何实现鼠标右键弹出菜单的功能? 189
FAQ5.14 如何使用表格组件? 191
FAQ5.15 如何实现记事本功能? 193
FAQ5.16 如何实现贪吃蛇游戏? 198

第6章 Java线程和序列化 208
FAQ6.01 线程. 进程和程序有何区别和联系? 208
FAQ6.02 如何创建和启动一个线程? 209
FAQ6.03 线程的基本状态有哪些?它们之间有何关系? 211
FAQ6.04 什么是线程优先级?线程依据什么原则调度执行? 212
FAQ6.05 什么是后台线程?如何创建一个后台线程? 214
FAQ6.06 如何使正在运行的线程在指定时间内休眠? 216
FAQ6.07 如何终止一个正在运行的线程? 218
FAQ6.08 为何stop()和suspend()方法不推荐使用? 219
FAQ6.09 如何控制线程的暂停和启动? 220
FAQ6.10 如何实现多个线程同步? 225
FAQ6.11 什么是对象序列化和对象反序列化? 233
FAQ6.12 实现对象序列化的方法有哪些? 234
FAQ6.13 如何实现对象在磁盘中的存取操作? 236
FAQ6.14 使用ObjectInputStream读取对象时为什么会发生StreamCorruptedException异常? 238
FAQ6.15 对象中的成员哪些参与序列化?哪些不参与序列化? 241
FAQ6.16 如何自定义序列化和反序列化过程? 243
FAQ6.17 如何使用Externalizable接口定制序列化过程? 247
FAQ6.18 在序列化类中添加serialVersionUID属性有什么作用? 250
FAQ6.19 当序列化遭遇继承时, 如何正确处理对象序列化过程? 251

第7章 Java网络编程 256
FAQ7.01 什么是TCP/IP?什么是IP? 256
FAQ7.02 TCP和UDP有什么区别? 258
FAQ7.03 什么是HTTP?HTTP的工作原理如何? 259
FAQ7.04 在Socket通信时如何获取主机和客户机的IP地址? 261
FAQ7.05 如何利用Socket实现基于TCP的通信? 264
FAQ7.06 如何利用Socket传输中文字符? 265
FAQ7.07 如何在Socket读取数据时使用超时设置? 267
FAQ7.08 如何利用Socket传递对象信息? 268
FAQ7.09 如何利用Socket实现文件传输? 271
FAQ7.10 如何基于Socket实现聊天系统? 274
FAQ7.11 如何利用Socket实现基于UDP的通信? 278
FAQ7.12 如何利用UDP Socket技术实现IP多点传送? 280
FAQ7.13 如何获取Internet资源的大小? 285
FAQ7.14 如何实现Internet资源的单线程下载? 286
FAQ7.15 URL如何通过proxy代理访问Internet资源? 287
FAQ7.16 如何实现Internet资源下载的断点续传? 288
FAQ7.17 如何实现Internet资源的多线程下载? 290
FAQ7.18 如何解析Internet网页内容? 293

第8章 Java常用功能 296
FAQ8.01 如何使字符串中包含“””字符 296
FAQ8.02 如何实现字符串和整数之间的转化? 297
FAQ8.03 如何替换字符串中的字符或子字符串? 298
FAQ8.04 如何过滤字符串前后以及中间出现的空格? 299
FAQ8.05 如何对字符串中的子字符或子字符串进行截取? 301
FAQ8.06 如何判断一个字符串是否符合数值格式? 302
FAQ8.07 如何实现字符串的切割和查找? 303
FAQ8.08 如何实现十进制和二进制之间的相互转化? 306
FAQ8.09 如何将字节流转换为指定编码的字符串? 307
FAQ8.10 如何实现日期格式和字符串之间的转化? 308
FAQ8.11 String. StringBuffer和StringBuilder有什么区别? 310
FAQ8.12 如何获得一个随机数? 311
FAQ8.13 List. Set和Map是否继承自Collection接口?有什么区别? 312
FAQ8.14 ArrayList与LinkedList. Vector的区别是什么? 313
FAQ8.15 HashMap和Hashtable有什么区别? 314
FAQ8.16 如何遍历Map和Vector集合? 315
FAQ8.17 如何获取系统当前时间? 317
FAQ8.18 如何获得系统属性? 318
FAQ8.19 什么是反射机制?有什么作用? 319
FAQ8.20 如何读取键盘输入的信息? 322
FAQ8.21 如何获取当前工程目录? 323
FAQ8.22 如何使用Java调用系统的exe文件? 324
FAQ8.23 如何使用Java执行cmd命令? 325
FAQ8.24 如何使用Java程序打开一个Word文档? 326
FAQ8.25 如何使用MD5和SHA算法加密信息? 327

第9章 Java数据库操作 329
FAQ9.01 什么是JDBC?有什么作用? 329
FAQ9.02 Java与数据库的连接方式有哪些? 330
FAQ9.03 如何连接各种类型的数据库? 331
FAQ9.04 如何实现对数据库数据的查询? 335
FAQ9.05 如何实现对数据库数据的增加. 删除和修改? 336
FAQ9.06 如何使用PrepareStatement对数据库操作? 339
FAQ9.07 Statement和PrepareStatement有什么区别? 340
FAQ9.08 如何调用数据库中的存储过程? 341
FAQ9.09 如何通过JDBC-ODBC桥访问Access数据库? 344
FAQ9.10 连接Oracle数据库时thin和oci方式有什么区别? 346
FAQ9.11 如何判断ResultSet结果集为空? 347
FAQ9.12 如何获取ResultSet中含有的记录数量? 348
FAQ9.13 如何获取ResultSet中n~m位置区间的记录? 350
FAQ9.14 如何利用ResultSet更新数据库数据? 351
FAQ9.15 如何使用LIKE关键字实现模糊查询? 352
FAQ9.16 如何实现查询的分组统计和排序? 354
FAQ9.17 如何实现多表联合查询? 355
FAQ9.18 如何使用JDBC的批处理操作? 357
FAQ9.19 如何实现Oracle字段值递增的功能? 358
FAQ9.20 如何处理数据表中Date类型的字段? 360
FAQ9.21 如何向表中插入含有特殊字符的信息? 360
FAQ9.22 如何使用BLOB类型的字段存取图片? 361
FAQ9.23 如何使用CLOB类型的字段存取字符文件? 363
FAQ9.24 如何通过程序创建和删除数据表? 365
FAQ9.25 如何获取数据表的结构信息? 367
FAQ9.26 如何获取数据库中所有表名? 369
FAQ9.27 如何用程序备份和恢复数据库? 370
FAQ9.28 什么是事务?如何使用JDBC事务控制? 372
FAQ9.29 什么是JTA?JTA事务与JDBC事务有什么区别? 373
FAQ9.30 如何使用JTA实现分布式事务控制? 374
FAQ9.31 什么是数据库连接池?工作原理如何? 376
FAQ9.32 如何提升SQL语句的查询性能? 377
FAQ9.33 如何解决MySQL数据库插入乱码的问题? 379

第10章 Java Web程序设计 381
FAQ10.01 什么是JSP?JSP的工作原理如何? 381
FAQ10.02 JSP. Java和JavaScript有什么区别和联系? 383
FAQ10.03 JSP程序开发和运行环境是什么?如何搭建? 383
FAQ10.04 如何开发一款JSP程序? 387
FAQ10.05 在JSP中有哪些注释格式?有什么作用? 390
FAQ10.06 JSP中有哪些内建对象?分别有什么作用? 391
FAQ10.07 page. request. session和application有什么区别? 395
FAQ10.08 如何解决request.getParameter()取值乱码问题? 396
FAQ10.09 JSP中forward和redirect有什么区别? 397
FAQ10.10 如何在多个JSP页面之间传递信息? 399
FAQ10.11 如何解决URL传递中文时出现乱码的问题? 400
FAQ10.12 动态include与静态include有什么区别? 401
FAQ10.13 什么是JavaBean?如何使用JavaBean? 402
FAQ10.14 什么是Session?如何使用Session? 403
FAQ10.15 如何在关闭页面时自动清除Session? 405
FAQ10.16 什么是Cookie?如何使用Cookie? 406
FAQ10.17 如何在禁用Cookie的情况下使用Session? 408
FAQ10.18 如何在JSP中避免表单的重复提交? 409
FAQ10.19 如何实现JSP数据和JavaScript数据的交互使用? 411
FAQ10.20 什么是Servlet?Servlet与JSP有什么区别? 412
FAQ10.21 Servlet容器的工作原理如何? 413
FAQ10.22 如何在Servlet中使用Session和Application? 414
FAQ10.23 如何编写多线程安全的Servlet程序? 415
FAQ10.24 如何在Servlet和JSP中获取工程文件的绝对路径? 417
FAQ10.25 如何获取客户端浏览器和操作系统信息? 417
FAQ10.26 如何在Web程序中实现定时运行的功能? 418
FAQ10.27 如何实现网站登录记忆跳转的功能? 421
FAQ10.28 如何将JSP动态页面转换为HTML静态页面? 423
FAQ10.29 如何实现数据分页显示的功能? 424
FAQ10.30 如何将JSP内容以Excel或Word格式输出? 431
FAQ10.31 如何在JSP中实现打印功能? 432
FAQ10.32 如何实现图片验证码功能? 433
FAQ10.33 如何实现饼状图. 柱状图和曲线图? 436
FAQ10.34 如何实现进度条显示功能? 443
FAQ10.35 如何实现网站计数器功能? 447
FAQ10.36 如何发送HTML格式和带附件的邮件? 448
FAQ10.37 如何实现文件的上传和下载? 453
FAQ10.38 如何禁止浏览器缓存页面内容? 457
FAQ10.39 如何在网页中在线播放音乐和视频? 458
FAQ10.40 如何处理JSP页面的错误? 460
FAQ10.41 如何利用过滤器实现权限验证功能? 462
FAQ10.42 如何实现JSP防盗链功能?464

1、Web容器

所有的程序运行都需要有一个必要的运行环境。这个环境可以是软件,也可 以是硬件,或者是软件和硬件的结合。比如说Windows操作系统需要运行在硬件基础上;Office软件需要运行在操作系统上。并且程序与运行环境之间 会有一定的数据交换,比如操作系统会将运行指令传递给硬件,硬件也会将指令运行结果传递给操作系统。JavaWeb程序也需要一个运行环境才能够执行。这 种运行JavaWeb程序的环境被称为Web容器,JavaWeb程序与Web容器之间存在数据交互。目前主要存在两种类型的JavaWeb容器:一种是 独立的JavaWeb容器,在这种容器里面只能运行Web程序,这种容器一般也叫做Web服务器,如Tomcat等;另一种是与其他JavaEE容器混合 在一起的Web容器,Web容器负责运行Web程序,其他容器负责运行EJB等程序,如WebLogic等。

当用户通过浏览器等 Web客户端软件向服务器发出一个请求之后,首先接收到这个请求的是Web容器,Web容器会将请求信息封装到一个HttpServletRequest 类型的Java对象中,并将对象传递给JavaWeb程序。对于每个请求,Web容器还会创建一个HttpServletResponse类型对象,该对 象的作用是用来保存需要返回到浏览器等客户端的内容。JavaWeb程序可以从HttpServletRequest提取用户发出的请求信息,进行适当的 处理之后,将处理结果放置到HttpServletResponse中,然或由Web容器解析HttpServletResponse对象内容,并将解析 结果以浏览器能够识别的HTML等格式返回给浏览器等客户端。在这个过程中,HttpServletRequest和 HttpServletResponse就如同两条渡船,负责在Web容器和JavaWeb程序之间传递信息。需要注意的是,这两个对象仅存在于Web容 器和JavaWeb程序当中,与浏览器没有关系。

2、Web应用

Web应用,可以认为是Web程序的另一个名称。缺的的定义就是运行在Web容器当中的,能够完成完整功能的应用程序。JavaWeb应用由一系列编译之 后的Java类、静态图片、静态HTML文件、配置文件等构成。通过JavaWeb应用可以就收用户的输入和请求,并对请求信息进行加工处理、访问数据 库、对用户的请求给出回应。开发JavaWeb应用程序处理需要遵守Web应用的一些特殊规范要求以外,与开发其他类型的应用程序并没有本质区别。目前 Web应用主要有两种类型:一种是以展示为目的的Web应用,这种应用会以HTML等标记文本或者浏览器所能识别的媒体格式最为请求返回内容,用户可以通 过浏览器等客户端操作这类应用。另一类是以服务为目的的Web应用,这类应用不提供图形操作界面,只提供方法调用结构,比如Web服务,该类应用一般只能 被其他应用程序调用和访问。

3、Web元件

Web元件是构成Web 应用,能够对来自浏览器等客户端请求做出回应的基本单元。在JavaWeb应用中,所提供的Web元件有Servlet、 JavaServerPages(JSP)、JavaServerFaces(JSF)等。另外还可以使用其他类型Web应用同样使用的内容,比如 HTML文件、静态图片等。事实上JavaWeb只提供了一种Web元件元件,就是Servlet,JSP、JSF等都是基于Servlet的衍生技术。 Servlet实质就是一个有特殊继承关系要求的Java类,理解Servlet就基本上完全理解JavaWeb技术了。

4、Web模块

在JavaEE技术体系中,除了JavaWeb以外,还包括EJB等其他技术。每个技术体系会运行在各自的容器当中,不同的部分组合在一起构成完整的 JavaEE应用,每个部分根据自己的特点被称为JavaWeb模块或者EJB模块。之所以把他们称为模块,是因为希望JavaEE应用不同部分能像积木 一样组合出更大、更复杂的应用出来,并且每个部分保证其独立性。不同的模块都有自己特定的目录结构要求。JavaWeb模块的目录结构要求如下:

◆应用文档根目录。改目录是JavaWeb模块的最上层目录,组成Web模块的所有Web元件以及配置文件等都包含在该目录或者子目录下。在改目录下可以直接存放HTML文件,图片文件等。

◆WEB-INF目录。改目录位于应用文档根目录下,用来保存那些不希望被浏览器等客户端访问的文件,比如发布描述文件、编译之后的类文件。因为这些文件是由由Web容器进行解释或者执行的。浏览器不可以直接看到这些文件,只能看到这些文件的执行结果。

◆web.xml文件。该文件位于WEB-INF目录下,是Web应用的部署描述文件,用来与定义Web应用运行相关的信息,比如执行逻辑,Servlet等Web元件的访问路径等。改文件的格式必须符合所使用的Servlet版本的规格要求。

◆classes目录。该目录位于WEB-INF目录下,用来保存编译之后的Java类文件,比如Servlet、辅助类、其他业务处理类等。

◆tags目录。该目录位于WEB-INF目录下,用来保存那些标签库的标签描述文件。

◆lib目录。该目录位于WEB-INF目录下,用来保存Web应用运行所依赖的,经过打包之后的Java类文件。打包格式一般是.jar格式。

对于JavaWeb模块目录中WEB-INF、web.xml、classes、tags、lib这些内容以外,用户可以根据自己的需要在Web应用文 档根目录下创建其他目录,比如可以为图片、不同用途的HTML或者JSP单独创建目录;还可以为不用的Java类在classes下创建包目录。如果在你 的Web应用中没有使用到Servlet、过滤器、监听器等JavaWeb元件,可以没有web.xml文件;如果没有使用到标签,则可以没有tags目 录。

Web模块的发布工作,可以直接以目录的形式发布,也可以打包成jar格式文件进行发布。因为用途和内容的特殊性,打包文件 的扩展名会采用.war而不是.jar。另外如果不是发布到独立的Web服务器上,而是发布到与其他JavaEE一起使用的企业应用服务器上,还需要编写 一个与企业应用服务器相关的配置文件,这个文件对于不同的企业应用服务器也不同,比如发布到glassfish服务器上,需要编写的文件时sun- web.xml。

Java的八大优势

1.免费!
Sun(虽然现在已被甲骨文收购但我还是喜欢说Sun)免费提供用来开发Java应用程序的一切,你不必付任何的版税。或许你会将信将疑:资本 家搞共产了?实际上,Sun在Java上的收益确实不大,远远比不过垄断Java应用服务器技术的IBM和BEA公司,似乎有替别人做嫁衣之嫌。对 此,Sun董事长、总裁兼首席执行官Scott McNealy是这样解释的:“Sun并没有用Java赚钱,这就像使用英语不用上税一样,Sun并不通过Java本身来盈利,而是把Java应用到了业 务中。”原来是放长线钓大鱼!
与Java本身相比,Java API更是可贵的免费财富。想使用Socket操作网络?API中有;想连接到SQL数据库?API中有;想给应用程序一个漂亮的用户界面?API中有;想要处理数字图形、播放音乐、解析字符串或者创建数字签名?API中全都有。
最后,Java发展了那么多年,优秀的Java教程、技术网站数不胜数。Bruce Eckel大师的名作Java编程思想(Thinking in java)更是不可不读的佳作,许多狂热爱好者甚至把它当做圣经一样一页一页仔细揣摩。你可到作者的主页 http://www.BruceEckel.com免费下载此书的电子版。机械工业出版社也有引进台湾技术作家候捷的中译本,可惜不是免费。
或许你会问,有了那么多优秀的教程,还要你这个Java咖啡馆干什么呢?嗯哼,虽然那些教程和技术文章是如此优秀,但并不适合初学者。Java咖啡馆目的就在于帮助你打好Java技术的基础,掌握Java技术的主要脉络,帮助你迈出进入Java世界的第一步!
2.跨平台
“一次编写,随处运行”,Java系统可以运行在不同的操作系统和硬件上。随着Linux的持续增长以及Mac OSX完全支持Java技术,跨平台的特性变得越来越有分量。
由于Java跨平台,Java API自然也是平台统一的。对程序员而言,没有比统一的API函数能够让他们更欣慰的了——已经有了圆形的轮子,何必再从头发明轮子呢?我们拿Java API与C++的类库相比便可以知道它的可贵之处。有Windows编程经验的C++程序员肯定经历过被MFC(Microsoft Foundation Classes,微软基类库)折磨的日子,学习曲线陡峭,没有若干个月根本无法开始生产,一段时间不接触遗忘率又高。据说,即使在微软公司内部,除了 MFC开发小组,谁都不乐意用它。即便你熟悉了MFC,能够顺利开发Windows应用程序,如果你要编写一个Linux应用程序,MFC又派不上用场 了,你必须学习Linux下C++开发的一套库函数。还有UNIX、FreeBSD、Mac OS……你学得过来吗?反观Java API,操作系统,你爱谁是谁,只要编写一次便可随处运行!
3.在学术界获得了强有力的支持
由于免费、跨平台、Java语言本身技术先进,在高校中,Java 已经成为许多学科研究、课程和计算的首选语言,用Java做上机作业,一般都是鼓励的。据我所知,北大、清华许多院系的研究生入学考试都可以用Java语 言答题。实际上,用Java来完成这些工作,大多数情况下要比用C或其他语言简洁得多,你可以把注意力集中在算法等核心部分,从而获得更高分数。
掌握Java技术的学生一般有更多的工作机会课余兼职,拿到更高报酬,不但减轻家里的负担,更可以让自己早日进入社会锻炼。所以,如果你还在求学,学习Java,一定没错的。
4.简单
与C++等语言相比较,语法上Java是简单的。
谢天谢地,Java提供了垃圾回收机制。以往C++的开发中,最容易出错误的地方便是内存管理,申请的内存用完以后必须释放,否则可使用的内存 资源越来越少,直至耗尽系统资源而造成死机。而Java系统中,你可以任意申请内存,Java系统会在适当的时候自动释放无用的内存资源。这个神奇的机制 叫做“垃圾回收”,节约了许多调试错误的时间。
在Java中,要写出低劣的代码也不是一件容易的事情。一方面,垃圾回收机制堵住了内存泄漏的可能性,另一方面就是异常捕捉机制,它强迫你做最 坏的打算。编写程序时,难免会遇到一些意外,比如文件无法打开、网络读取失败等特殊情况。在C++等语言中是依靠返回值来判断的,如果一句句地检查返回 值,那实在是太麻烦了。从而,程序员习惯性地忽略返回值的检查,并安慰自己一切都会好起来的。这便埋下了隐患。在Java中,Java的方法可以抛异常, 而你必须应答异常,即使你不想进行任何操作。比如编写打开文件的代码,你不得不响应异常以防意外发生,否则程序根本不能够通过编译。未雨绸缪,使得 Java系统更稳健。

5.企业应用的成熟平台
这是Java技术目前最活跃的两大领域之一。我们在前面Java技术介绍中已经提到了不少,这里仅关注跟我们切身相关的优势。
Java技术的企业应用旨在提升企业竞争力,所以Java技术受到了企业的欣赏,市场份额是同类技术中最大的。同时,Java开放标准,所以供 应商众多。市面上有许多的应用服务器、工具与构件可以选择,从高端的BEA WebLogic、IBM WebSphere等商业软件,到Tomcat、JBoss等开源的免费工具,一应俱全。作为Java技术的初学者,不需要任何花费就能够进行Java企 业应用的自我培训,以后若参与Java的商业项目开发,便可以无缝地把软件移植到高端的商业平台上去。反观.Net,想免费自学,不盗版是不可能的啦。
最后谈谈Java和Web服务。Web服务是软件互操作历史上的里程碑,是技术发展的重要方向,是你绝不能不了解的技术。Sun公司是Java 语言的发明者,而作为一个开放的跨平台的技术体系,Java在Web服务的开发方面起着非常重要的作用。Sun被接纳为促进Web服务交互组织WS-I的 董事成员后,作为活跃的参与者和业界的领导者,对Web服务互操作性的促进,有着相当重要的意义,也为Java技术的含金量加上了关键的砝码。
6.无线应用
这是Java技术目前最活跃的另一个领域,旨在提供更多、更方便的个性化服务的Java手机应用。未来几年内,势必将出现移动通讯运营商和移动 设备应用软件的巨大商机和激烈竞争,并且该趋势很可能与电子政务、电子商务等其他发展相互影响。Java在手机市场的专有性和Java本身的开放性和标准 性,使得越来越多的企业加入了Java阵营。
中国也不例外。2003年James Gosling博士首次来到中国,其中重要的一项工作便是与中国联通结盟。
黄糖故事
Java之父——James Gosling博士
James Gosling博士以“Java技术之父”闻名于世。他是Java技术的创始人,作为Sun研究院院士,亲手设计了Java语言,完成了Java技术的原 始编译器和虚拟机。在他的带领下,Java现已成为互联网的标准编程模式以及分布式企业级应用的事实标准,其跨平台的技术优势为网络计算带来了划时代的变 革。目前,Gosling博士积极致力于软件开发工具的研究,以使软件开发工具的功能更强大,更容易为开发人员所使用,确保应用、服务开发的迅速完成。
实际上,手机游戏开发也是一项不错的职业与机遇,成功的例子已经不在少数哦。
7.开放的Java社团——Java Community Process,JCP
JCP是一个让Java出名的功臣。JCP创造了一个开放型论坛,让同好在此交换意见,探索、定义新的平台,群策群力。Java欢迎竞争,因为 只有这样才能最大限度地提高领域内的技术,这点与对手微软.Net技术大相径庭。在Java的舞台上有很多演员,任何人都可以参与到JCP的过程中去,帮 助Sun决定Java的发展和未来,同时也挑战自己的影响力。从而,你可以发现Java世界中新的名词层出不穷,远远走在规范之前。而在微软.Net技术 的舞台上,你只能看到一个演员,那就是微软自己。 还有现在的Java技术交流论坛,J道等等。。。都是很不错错的开放社区。
8.开源组织或者非盈利机构的支持
开源组织是无政府主义的梦想——没有政体,没有所属权,言论与行动自由,仅仅依靠渴望共享与交流的信仰及无私奉献来维系。Java世界中,开源 组织与非盈利机构发挥到了极致,许多出色的工具都出自它们之手。比如JUnit、Cactus、Tomcat、Struts、JBoss、 Eclipse、ANT、Xerces、Hibernate、Axis、AspectJ等等,许多工具还会出现在我们的咖啡馆中,扮演重要的角色。
Java世界中,便宜无好货绝对不成立,这些工具拥有足以和商业软件媲美的质量,很多商业IDE还集成了这些工具。对Java程序员而言,生活不单单会变得轻松,更重要的,你能够看到希望,有为大家贡献自己力量的机会!

来自IT公司面试手册

下一篇:Java模拟试题01

上一篇:JEE面试题

亲~ 如果您有更好的答案 可在评论区发表您独到的见解。

您想查看更多的信息: 面试题