C++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
C++之所以给名虚拟的凡盖它提供了一个非靠让底层操作系统和机械硬件的接口。这种独立为硬件和操作系统的风味正是
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