Java程序员笔试必备–Java基本概念

电子书下载地址:
http://wiki.jikexueyuan.com/project/java-interview-bible/

1. Java 语言的长处?

简单、高效

Java 语言和 C++ 类似,如果用户了解 C++
和面向对象的定义,就好快捷编写出 Java 程序;此外,Java 又不同于像
C++
语言提供的繁多的艺术,它就供了主导的方式,这样尽管抽了编程的扑朔迷离,例如去丢了条文件、指针变量、结构、运算符重载、多更继承等繁杂特性。Java
语言虽然简易,却百般高效,它好用面向对象的法来描述用户的各个一个动作。

面向对象

Java
语言是均等栽新的面向对象的次序设计语言,它除了几种基本的数据类型外,大都是接近
C++
中的目标以及法,程序代码大多反映了看似机制,以类的形式组织,由类似来定义对象的各种行为。Java
同样支撑类继承,这样为减少了先后设计之复杂。

阳台无关性

所谓一处在编译处处运行。Java
语言由此编译后生成和电脑硬件结构无关之字节代码( Bytecode
),这些字节代码被定义也非因任何硬件平台和操作系统。当 Java
程序于运作时,需要由一个解释程序对转移的字节代码解释施行。这体现了Java语言的跟平台无关性,使得
Java 程序可以于其它平台达成运行,如 MS-DOS ,
Windows,Unix 等,因此具有十分强之移植性。

交互式特性

Java 是面向对象的网络编程语言,由于其支持 TCP/IP
商讨,使得用户可由此浏览器访问到 Internet
上之各种动态目标。并且在网及用户可交互式地拓展各种动作,而大多线程技术之引入使得这种交互式操作更容易。

大抵线程机制

Java 语言支持多线程机制,多线程机制使得 Java
程序会并行处理多桩任务。Java
程序可以计划成为有多个线程,例如给一个线程负责数据的查找、查寻,另一个线程与用户进行互动,这样,两单线程得以并行执行。多线程机制得以生易地落实网络及的交互式操作。

动态的内存管理机制

Java 语言使用了机动垃圾回收机制进行内存的管制。在 C++
语言中,程序员在编写程序时要精心地处理内存的运用,例如当某个内存快使用了时,要马上放出,以供其他程序采取,一旦内存管理不当,就出或引致内存空间浪费还是程序运行故障。
在 Java
系统遭到连了一个自动垃圾回收程序,它好活动、安全地回收不再采用的外存块,这样,程序员在编程时便管需担心内存的军事管制问题,从而使
Java 程序的编排变得简单,同时为回落了内存管理方面出错的可能性。

安全性

以看似 Internet 的这种分布式网络环境面临,安全性是只不容忽视的问题。Java
语言在安全性方面引入了实时内存分配及布局来严防程序员直接改动物理内存布局;通过字节代码验证器对字节代码的印证,以防止网络病毒和另外非法代码侵入。此外,Java
语言还使用了广大面向对象的不胜处理体制,负责对部分老事件进展处理,如内存空间不够,程序非常中止等之处理

Java 是解释型的
运作 Java 程序用一个解释器。Java 程序编译成 Java
虚拟机编码,这种编码称为字节码。字节码是独立于电脑的,他能在拥有具有
Java 解释器的机械及运行,Java 解释器也是 JVM 的同有。

Java 的效率

头 Sun 发现 JVM 的用户注意到了 Java 运行很缓慢,但是乍的 Java
虚拟机显著加快。新的虚拟机使用了同一种植叫做实时编译的技巧,他将字节码编译并储存成本机的机器码。当尽字节码时,重调本地码。

2. 啊是 Java 虚拟机?为什么 Java 被誉为是“平台无关的编程语言”?

Java 虚拟机是一个足实施 Java 字节码的虚拟机进程。Java
源文件被编译成会让 Java 虚拟机执行的许节码文件。

Java
被设计成允许应用程序可以运行于随机的平台,而非需要程序员为每一个平台单独再次写或者是双重编译。Java
虚拟机让这个变为可能,因为她掌握底层硬件平台的吩咐长度和其它特色。

3. Java 与 C++ 有何区别?

Java 和 C++
都是面向对象语言。也就是说,它们都能落实面向对象思想(封装,继乘,多态)。而鉴于
C++ 为了照顾大量之 C 语言使用者,而配合了 C ,使得我就成为了带类的 C
语言,多多少少影响了该面向对象的彻底性!Java
则是全然的面向对象语言,它句法更清楚,规模还有些,更易学。它是在针对多主次设计语言进行了深入细致研究的基本功及,据弃了另语言的不足之处,从根本上解决了
C++ 的原缺陷。

Java 和 C++
的相似之处多于不同之处,但个别种语言问几介乎关键的例外让Java更易于学,并且编程环境越来越简易。我于这里不能够全列出不同之处,仅列出比较显著的分别:

指针

Java
语言让编程者无法找到指针来一直看内存无指针,并且增添了机关的内存管理效能,从而使得地防止了
C/C++ 语言中指针操作失误,如野指针所导致的网崩溃。但也不是说 Java
没有指针,虚拟机内部还是以了指针,只是外人不得采取而已。这好 Java
程序的平安。

大抵再度继承

C++ 支持多再继承,这是 C++
的一个特性,它同意多父类派生一个好像。尽管多还继承功能特别强,但运用复杂,而且会惹不少辛苦,编译程序实现它吗够呛不易于。Java
不支持多双重继承,但允许一个好像继承多只接口 (extends+implement) ,实现了
C++ 多重继承的效能,又避免了 C++ 中之层层继承实现方式带的诸多不便。

数据类型及类

Java
是完全面向对象的言语,所有函数和变量部务必是相近的平等有。除了核心数据类之外,其余的还当类对象,包括数组。对象将数据以及方式结合起来,把它封装于类似中,这样每个对象还只是实现和谐之特色和作为。而
C++ 允许将函数和变量定义为全局的。此外,Java 中取消了 C/C++
中的构造与共同,消除了无必要的难为。

自行内存管理

Java 程序中装有的对象都是因此 new 操作符建立于内存堆栈上,这个操作符类似于
C++ 的 new
操作符。下面的说话由一个确立了一个类Read的对象,然后调用该对象的 work
方法:

Read r=new Read();
r.work();

语句 Read r=new Read() ;在库房结构及建了一个 Read 的实例。Java
自动进行无用内存回收操作,不待程序员进行删减。而 C++
中要由程序员释放内存资源,增加了序设计者的顶。Java
中当一个对象不给再度就此到经常,无用外存回收器将于它们丰富标签为显示删除。Java
里任用内存回收程序是盖线程方式于后台运行的,利用空暇时间工作。

操作符重载

Java 不支持操作符重载。操作符重载被看是 C++ 的突出特色,在Java
中尽管看似约上足实现如此的功效,但操作符重载的方便性仍然丢掉了累累。Java
语言不支持操作符重载是为了保障 Java 语言尽可能简单。

事先处理效果

Java 不支持先处理效果。C/C++
在编译过程中还产生一个预编泽阶段,即明确的预处理器。预处理器为开发人员提供了利,但净增了编译的纷繁。Java
虚拟机没有先行处理器,但其提供的引入语句 (import) 与 C++
预处理器的效力相近。

Java不支持缺省函数参数,而C++支持

在 C 中,代码组织于函数中,函数可以拜程序的全局变量。C++
增加了仿佛,提供了类算法,该算法是和类似相连的函数,C++ 类方法与 Java
类方法十分相似,然而,由于 C++ 仍然支撑 C ,所以不能够阻碍 C++
开发人员使用函数,结果函数和方式混合使用让程序于乱。

Java 没有函数,作为一个比 C++ 更纯粹的面向对象的言语,Java
强迫开发人员把有例行程序包括在类似中,事实上,用智实现例行程序可激发开发人员更好地集团编码。

字符串

C 和 C++ 不支持字符串变量,在 C 和 C++ 程序中以 Null
终止符代表字符串的截止,在 Java 中字符串是用类对象 ( string
和stringBuffer )来兑现之,这些类似对象是 Java
语言的核心,用类似对象实现字符串有以下几只亮点:

(1)在周体系受确立字符串和访问字符串元素的道是一致的;
(2)Java 字符串类是当 Java
语言的平等有些概念的,而休是当做外加的拉开部分;
(3)Java 字符串执行运行时检查,可帮排有周转时发出的错误;
(4)可针对字符串用“+”进行连续操作。

goto 语句

“可怕”的 goto 语句是 C 和 C++ 的“遗物”,它是欠语言技巧上之官方部分,引用
goto 语句引起了程序结构的繁杂,不易理解,goto
语句子要用于无条件转移子程序及多组织分段技术。鉴于以广理由,Java 不提供
goto 语词,它虽然指定 goto
作为重中之重字,但不支持其的以,使程序简洁易读。

类型转换

在 C 和 C++
中有时出现数据类型的含有转换,这就算关乎了电动强制类型转换问题。例如,在
C++ 中可拿一浮点值赋予整型变量,并失去丢那个尾数。Java 不支持 C++
中之机动强制类型转换,如果急需,必须由程序显式进行强制类型转换。

异常

Java 中之异常机制用来捕获例外事件,增强系统容错能力

try{

   //可能产生意外的代码
}catch(exceptionType name){
    //处理
}

其中 exceptionType 表示特别类型。而 C++ 则无如此好之机制。

4. JDK 和 JRE 的界别是呀?

Java 运行时环境( JRE )是快要执行 Java 程序的 Java
虚拟机。它同时为包含了行 Applet 需要之浏览器插件。Java 开发工具包( JDK
)是整体的 Java 软件开发包,包含了 JRE ,编译器和另外的工具(比如:
JavaDoc,Java 调试器),可以于开发者开发、编译、执行 Java 应用程序。

5. Java 支持的数据类型有怎么样?什么是全自动拆装箱?

Java 语言支持之 8 中挑大梁数据类是:

  • byte
  • short
  • int
  • long
  • float
  • double
  • boolean
  • char

活动装箱是 Java
编译器在着力数据类和呼应之目标包装档次中举行的一个倒车。比如:把 int
转化成 Integer ,double 转化成 Double,等等。反的便是机关拆箱。

6. 什么是价值传递与援传递?

对象为值传递,意味着传递了靶的一个副本。因此,就到底改变了目标副本,也不见面影响源对象的价值。

靶吃引述传递,意味着传递的并无是实际的靶子,而是对象的援。因此,外部对援对象所举行的改观会反映到持有的对象及。

7. 一个 “.java” 源文件中是否好概括多独像样(不是内部类)?有什么范围?

好出多个像样,但不得不发出一个 public 的类,并且 public
的类名必须同公事称相平等。

8. 静态变量和实例变量的分?

在语法定义及之界别:静态变量前如果加 static 关键字,而实例变量前则免加以。

每当程序运行时的分别:实例变量属于有对象的性能,必须创造了实例对象,其中的实例变量才见面于分配空间,才能够下此实例变量。静态变量不属有实例对象,而是属于类,所以也叫做类变量,只要程序加载了近乎的字节码,不用创建任何实例对象,静态变量就会见给分配空间,静态变量就可以于用了。总之,实例变量必须创建对象后才足以透过此目标来运,静态变量则可以直接以类名来引用。

比如说,对于下边的先后,无论创建多少只实例对象,永远都单分红了一个
staticVar
变量,并且每创建一个实例对象,这个 staticVar 就见面加 1
;但是,每创建一个实例对象,就会分配一个 instanceVar ,即可能分配多个
instanceVar ,并且每个instanceVar 的值都不过由加了 1 次。

 public class VariantTest{   
    public static int staticVar = 0;    
    public int instanceVar = 0;    
    public VariantTest(){    
        staticVar++;    
        instanceVar++;    
        System.out.println(“staticVar=” + staticVar + ”,instanceVar=” + instanceVar);   
        } 
 }    

9. 免经构造函数也克创建对象吗?

A. 是
B. 否

答案:A

分析:Java 创建对象的几种艺术(重要):

(1) 用 new 语句创建对象,这是极其广泛的创建对象的法门。
(2) 运用反射手段,调用 java.lang.Class 或者 java.lang.reflect.Constructor
类的 newInstance() 实例方法。
(3) 调用对象的 clone() 方法。
(4) 运用反序列化手段,调用 java.io.ObjectInputStream 对象的 readObject()
方法。

(1)和(2)都见面强烈的显式的调用构造函数
;(3)是在内存达到对曾来对象的影印,所以未会见调用构造函数
;(4)是起文本被尚原类的目标,也无见面调用构造函数。

10. 静态变量和实例变量的界别?

报:静态变量是受 static
修饰符修饰的变量,也叫做类变量,它属于类,不属于类的旁一个靶,一个像样非任创建多少只对象,静态变量在内存中起还只发生一个拷贝;实例变量必须依存于某个同实例,需要事先创建对象然后通过对象才能够看到它们。静态变量可以兑现叫大多单对象共享内存。在
Java 开发中,上下文类和工具类中司空见惯会来大量之静态成员。

11. 是不是好从一个静态(static)方法中有针对非静态(non-static)方法的调用?

报经:不得以,静态方法只能看静态成员,因为无静态方法的调用要先行创建对象,因此当调用静态方法时或许对象并从未被初始化。

12. 哪实现目标克隆?

报:有少种方式:

1.实现 Cloneable 接口并再写 Object 类中的 clone() 方法;

2.实现 Serializable
接口,通过对象的序列化和反序列化实现克隆,可以兑现真正的深克隆。

13. 一个“.java”源文件被是不是可分包多个近乎(不是里类)?有啊范围?

报经:可以,但一个自文件被不过多只能有一个公开类(public
class)而且文件称必须跟公开类的类名完全保持一致。

14. Anonymous Inner Class(匿名内部类)是否好继续其它类?是否可兑现接口?

报:可以持续其他类似或落实任何接口,在Swing编程中常因此这个方法来贯彻事件监听与回调。

15. 其中类可引用它的蕴藏类(外部类)的成员为?有没有发啊范围?

报经:一个里类对象足以拜创建它的外部类对象的成员,包括个人成员

16. 列出自己常用的 jdk 包.

答:JDK 常用的 package

java.lang:这个是系的根底类,比如 String 等还是立即里面的,这个 package
是唯一一个好毫不 import 就得使的 Package

java.io: 这之中是怀有输入输出有关的切近,比如文件操作等

java.net: 这里面是跟网络关于的类,比如 URL,URLConnection 等。

java.util: 这个是系辅助类,特别是集合类 Collection,List,Map 等。

java.sql: 这个是数据库操作的好像,Connection, Statememt,ResultSet 等

17. JDK, JRE 和 JVM 的区别?

JDK, JRE 和 JVM 是 Java
编程语言的主干概念。尽管她看起差不多,作为程序员我们也多少关心这些概念,但是它是殊之对准一定目的的成品。这是千篇一律鸣大的
Java 面试题,而本文则会挨个说这些概念并让有它们中的别。

Java 开发工具包 (JDK)

Java 开发工具包是 Java 环境之主导组件,并提供编译、调试以及周转一个 Java
程序所需要的有着工具,可执行文件和二进制文件。JDK
是一个平台特定的软件,有针对 Windows,Mac 和 Unix
系统的两样的安装包。可以说 JDK 是 JRE 的超集,它含有了 JRE 的 Java
编译器,调试器和基本类。目前 JDK 的版本号是 1.7,也于叫作 Java 7。

Java 虚拟机(JVM)

JVM 是 Java 编程语言的中坚。当我们运行一个次时,JVM
负责将配节码转换为特定机器代码。JVM 也是平台特定的,并提供基本之 Java
方法,例如内存管理、垃圾回收和安康机制等。JVM 是可定制化的,我们可以通过
Java 选项(java options)定制它,比如配置 JVM 内存的上下界。JVM
之所以给叫做虚拟的是盖其提供了一个请勿借助于让底层操作系统和机器硬件的接口。这种独立于硬件及操作系统的性状正是
Java 程序可以同差编写多处实施之来由。

Java 运行时环境(JRE)

JRE 是 JVM 的履行实现,它提供了运转 Java 程序的平台。JRE 包含了
JVM、Java 二进制文件及另成功施行顺序的类公事。JRE 不分包其他像 Java
编译器、调试器之类的开发工具。如果您只是怀念只要实施 Java 程序,你才待安装
JRE 即可,没有设置 JDK 的必备。

JDK, JRE 和 JVM 的区别

JDK 是用于支付的设 JRE 是用来周转 Java 程序的。
JDK 和 JRE 都蕴涵了 JVM,从而使得我们得以运作 Java 程序。
JVM 是 Java 编程语言的为主并且具有平台独立性。

顿时编译器(JIT)

突发性我们见面听到 JIT 这个概念,并说它是 JVM 的同样有些,这给咱们很困惑。JIT
是 JVM
的一律有,它可在同一时间编译类似之许节码来优化将许节码转换为机特定语言的长河相似的许节码,从而将优化字节码转换为机特定语言的历程,这样减少转换过程所待花的光阴。


再度多优秀图文IT课程请移步:
wiki.jikexueyuan.com