JAVA 面试题汇总
JAVA基础
概念题
一、 JAVA基础
1) 面向对象的特征 1. 抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4.多态:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。 2) 什么是OOP?什么是类?请对比类和对象实例之间的关系。
OOP是Object_oriented Programming(面向对象编程)的缩写。这主要是为了区别于以前的面向过程的程序设计!指的是用对象的观点来组织与构建系统,它综合了功能抽象和数据抽象,这样可以减少数据之间的耦合性和代码的出错几率。使用面向对象编程技术可以使得软件开发者按照现实世界里人们思考问题的模式编写代码,可以让软件开发者更好地利用代码直接表达现实中存在的对象,将问题空间直接映射到解空间!
类:即class 在面向对象的程序设计中,专门用“类”来表示用户定义的抽象数据类型(user_defined abstract type)。它将具有相同状态、操作和访问机制的多个对象进行了抽象。类具有继承、数据隐藏和多态三种主要特性。利用类的这三种特性可以更好地表示现实世界中事物。类是同一类对象实例的共性的抽象,对象是类的实例化。对象通常作为计算机模拟思维,表示真实世界的抽象,一个对象就像一个软件模块,可以为用户提供一系列的服务---可以改变对象的状态、测试、传递消息等。类定义了对象的实现细节或数据结构。类是静态的,对象是动态的,对象可以看作是运行中的类。类负责产生对象,可以将类当成生产对象的工厂(Object factory)
~ 1 ~
JAVA 面试题汇总
JAVA基础
3) 简述类与对象的概念
所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。
类是具备某些共同特征的实体的集合,它是一种抽象的概念,用程序设计的语言来说,类是一种抽象的数据类型,它是对所具有相同特征实体的抽象。 4) 什么是属性与方法?
不同对象具有相同特点,就可能抽象为一定的类,那么这些特点基本上可以分为两类,一类是描述对象静态状态的,就是对象的属性,在程序设计中,可以称之为变量;另一类是描述对象的动作,就是对象的方法,在程序设计中我们称之为函数。属性和方法是一个对象所具备的两大基本要素,也是我们后面编程工作的核心。 5) 什么是封装?
只要有足够的方法,就没必要直接去操作对象属性,只要调用这些方法就可以实现要完成的任务,这种现象称为封装,它通过对象方法对其属性的操作把对象属性封装在一个对象内部,对象与外界打交道全部通过其自身的方法来实现,有效的把对象属性隐藏在对象内部。 6) 描述一下JVM加载class文件的原理机制
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。 7) Java程序怎么优化?
答:提高JAVA的性能,一般考虑如下的四个主要方面: 1、程序设计的方法和模式 2、JAVA布署的环境。 3、JAVA应用程序的实现 4、硬件和操作系统
为了提高JAVA程序的性能,需要遵循如下的六个步骤。 a) 明确对性能的具体要求 b) 了解当前程序的性能 c) 找到程序的性能瓶颈 d) 采取适当的措施来提高性能 e) 只进行某一方面的修改来提高性能 f) 返回到步骤c) 继续作类似的工作,一直达到要求的性能为止。
8) 一个\源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以。必须只有一个类名与文件名相同。
~ 2 ~
JAVA 面试题汇总
JAVA基础
9) char型变量中能不能存贮一个中文汉字
能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的
10) 逻辑操作符 (&,|,^)与条件操作符(&&,||)的区别 1. 条件操作符:
只能用于关系运算,会产生短路,即该符号左边的表达式可以确定整个关系表达式的值时,便不再运算右边的表达式 2. 逻辑操作符:
不仅可以用于关系运算,还可以用于位运算。不会产生短路,即无论左边表达式取什么值都要运算右边的表达式
11) Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)等于12;Math.round(-11.5)等于-11。 12) Java有没有goto?
Java中的保留字,现在没有在Java中使用。 13) int 和 Integer 的区别
Java 提供两种不同的类型:引用类型和原始类型(基本数据类型)。int是java的原始类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类: Boolean-Boolean char-Character int-Integer
long-Long
byte-Byte float-Float
short-Short double-Double
引用类型和原始类型具有不同的特征和方法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储等。当引用类型和原始类型用作某个类的实例数据时所指定的缺省值(初始值)不同:对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 14) 如何将数值型字符转换为数字?如何去小数四舍五入保留小数点后两位。 1、Integer.parseInt(“111”);Double.parseDouble(“11.22”);
2、double num = 2.625; double tmp = Math.round(num * 100) / 100d; 15) short s1 = 1; s1 = s1 + 1;和short s1 = 1; s1 += 1;有什么错误 short s1 = 1; s1 = s1 + 1;有错,数据库类型不匹配 short s1 = 1; s1 += 1;没有错误
~ 3 ~
JAVA 面试题汇总
JAVA基础
16) float f=3.4是否正确?
不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4或者 float f = 3.4f; 17) String 和StringBuffer的区别
String类提供了数值不可改变的字符串,而StringBuffer类提供的字符串可以进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用 StringBuffer来动态构造字符数据。
18) String是否是最基本的数据类型,能否被继承
不是。基本数据类型包括byte、short、int、long、char、float、double和boolean。String类是final类型的,因此不可以继承这个类、不能修改这个类。
19) String s = new String(\创建了几个String Object?
创建了两个String Object对象
\本身作为字符常量,在汇编语言中应该作为常量放在数据段,Java有一个类似数据段的constant pool保存这个常量,在classloader加载这个类的时候就把\和这个类的其他一些信息放在constant pool。new String(\根据常量\在heap上创建String对象。所以,一共两个对象
20) 数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。String有length()这个方法。 21) 排序都有哪几种方法?用JAVA实现一个快速排序
排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序) 快速排序的伪代码。
/ /使用快速排序方法对a[ 0 :n- 1 ]排序
从a[ 0 :n- 1 ]中选择一个元素作为m i d d l e,该元素为支点
把余下的元素分割为两段left 和r i g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点
递归地使用快速排序方法对left 进行排序 递归地使用快速排序方法对right 进行排序 所得结果为l e f t + m i d d l e + r i g h t
~ 4 ~
JAVA 面试题汇总
JAVA基础
22) swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。Long,string 都不能作用于swtich。 23) 在JAVA中,如何跳出当前的多重嵌套循环? 用break; return 方法。 24) 关于日期和时间的几个问题
1、如何取得年、月、日,小时、分、秒:
Date dat=new Date();dat.getYear();dat.getMonth();dat.getDay();dat.getHours();... 2、如何取得从1970年到现在的毫秒数: long now=dat.getTime(); 3、如何格式化日期
DateFormate df=DateFormate.getInstance();df.Format(dat); 25) 一个对象被当作参数传递到一个方法,是值传递还是引用传递
是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
26) 什么时候用assert?
assertion (断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个 boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。 27) GC是什么? 为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
28) 垃圾回收的优点和原理
垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单
~ 5 ~