2019 java面试题全总结
2019年Java面试必问之经典试题.doc

2019年Java面试必问之经典试题 基础不牢,地动山摇。
在众多的面试过程中,我们不难发现,基础知识在面试过程中占据了极大的一部分分值,若想在面试中能稳如泰山,拿下心意offer,这些题目将是我们必备的面试法宝。
如有错误,望加以斧正补充,自当深表感激。
Java基础面试题1、java中==和equals()的区别???答:简单来说==适合应用于基本数据类型的比较,而重写后equals()方法适合应用于引用类型的比较。
原因在于基本类型变量直接存储的是值本身,而引用类型变量存储的是对象的引用,当引用相同时,用==比较,自然会是true,当引用不同时,用==比较,则会是false.equlals方法是object中的方法,对于所有继承于object的类都会有该方法,当使用equals方法是需对此方法进行重写,如果没有对equals方法重写,则比较的是引用类型的,变量所指向的对象的地址,没有重写的equals,和==效果相同,只有重写了equals,比较的才会是所指对象的内容。
2、java中String、StringBuild、StringBuffer的区别???答:String是不可变类,因此对String进行操作都会产生新的String对象,容易导致效率低下,浪费内存空间。
因此,为了应对经常性的字符串操作,引入了StringBuffer、StringBuild这种字符串变量。
StringBufffer和StringBuild最大的区别,就是StringBuffer线程安全,但效率低,而StringBuild线程不安全,但效率高,且此两者只能通过构造函数的方式初始化。
而String可以通过构造函数和字面量复制两种方式。
3、java中重载(overload)、重写(override)的区别???答:1)重载是通过不同的方法参数来区分的,例如不同的参数个数、不同的参数类型、或者不同的参数顺序。
java面试问题及回答

java面试问题及回答java面试问题及回答一1.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。
与此相对,方法覆盖是说子类重新定义了父类的方法。
方法覆盖必须有相同的方法名,参数列表和返回类型。
覆盖者可能不会限制它所覆盖的方法的访问。
2.Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?当新对象被创建的时候,构造函数会被调用。
每一个类都有构造函数。
在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。
Java中构造函数重载和方法重载很相似。
可以为一个类创建多个构造函数。
每一个构造函数必须有它自己唯一的参数列表。
Java不支持像C++中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数的情况下,Java不会创建默认的复制构造函数。
3.Java支持多继承么?不支持,Java不支持多继承。
每个类都只能继承一个类,但是可以实现多个接口。
4.接口和抽象类的区别是什么?Java提供和支持创建抽象类和接口。
它们的实现有共同点,不同点在于:接口中所有的方法隐含的都是抽象的。
而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类类如果要实现一个接口,它必须要实现接口声明的所有方法。
但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认都是final的。
抽象类可以包含非final的变量。
Java接口中的成员函数默认是public的。
抽象类的成员函数可以是private,protected或者是public。
接口是绝对抽象的,不可以被实例化。
抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
2019年腾讯最新Java工程师面试题

2019年腾讯最新Java⼯程师⾯试题⼀、单选题(共21题,每题5分)1在正则表达式当中下⾯那⼀个字符集表⽰⾮空格字符、[:graph:]、[:digit:]C、[:space:]D、[:alpha:]参考答案:A答案解析:A2下列叙述中,错误的是( )。
A、内部类可访问它所在类的成员B、内部类的名称与定义它的类的名称可以相同C、内部类可⽤abstract修饰D、内部类可作为其他类的成员参考答案:A答案解析:暂⽆3以下哪个排序算法中,元素的⽐较次数元素与元素的初始排列⽆关()A、希尔排序B、快速排序C、归并排序D、直接插⼊排序E、选择排序参考答案:E4下⾯程序的输出结果是什么。
下⾯程序的输出结果是什么。
```1public class A2{2public static void main(String[] args){3int[] a={2,4,6,8,3,6,9,12};4 doSomething(a,0,a.length-1);5for(int i=0;i=x){6 swap(a,i,j);7 i++;//交换了⼏次8 }9 }//把最⼤的放到最后10 swap(a,i,end);//把最⼤的放到i的位置11return i;12 }1314private static void swap(int[] a,int i,int j)15 {16int tmp=a[i];17 a[i]=a[j];18 a[j]=tmp;19 }20 }21 ```A、找到最⼤值B、找到最⼩值C、从⼤到⼩的排序D、从⼩到⼤的排序参考答案:C答案解析:开始被注释迷惑了半天。
按快排的思想,遍历数组将⽐x⼤的按顺序存⾄a\[0\]a\[1\]a\[2\]..此时j负责遍历数组,i负责依次指向下⼀次遍历判断得到的⼤于x的数该存储的位置,每⼀次成功存储向后移动⼀格swap(a,i,end);//把最⼤的放到i的位置应该是将x交换⾄分界点,( x并⾮最⼤)⾄此⼀趟core完成,x左侧⼤于x,x右侧⼩于x,x左右任是⽆序数列然后依据分治的思想,对左序列,右序列迭代。
2019年201Xjava基础面试题-优秀word范文 (20页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==201Xjava基础面试题篇一:201Xjava面试,基础题目1. Java基础部分 (3)1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? (4)2、Java有没有goto? (4)3、说说&和&&的区别。
(4)4、在JAVA中如何跳出当前的多重嵌套循环? (4)5、switch语句能否作用在byte上,能否作用在long上,能否作用在String 上? (5)6、short s1 = 1; s1 = s1 + 1;有么错? short s1 = 1; s1 += 1;有什么错? (5)7、char型变量中能不能存贮一个中文汉字?为什么? (6)8、用最有效率的方法算出2乘以8等於几? (6)9、请设计一个一百亿的计算器 (6)10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?·· 811、"=="和equals方法究竟有什么区别? (8)12、静态变量和实例变量的区别? (9)13、是否可以从一个static方法内部发出对非static方法的调用? (10)14、Integer与int的区别 (10)15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? (11)16、下面的代码有什么不妥之处? (11)17、请说出作用域public,private,protected,以及不写时的区别 (11)18、Overload和Override的区别。
Overloaded的方法是否可以改变返回值的类型? 12 20、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?抽象类中是否可以有静态的main方法? (14)21、写clone()方法时,通常都有一行代码,是什么? (14)22、面向对象的特征有哪些方面 (14)23、java中实现多态的机制是什么? (16)24、abstract class和interface有什么区别? (16)25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? (18)27、内部类可以引用它的包含类的成员吗?有没有什么限制? (21)28、Anonymous Inner Class (匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? (22)29、super.getClass()方法调用 (22)30、String是最基本的数据类型吗? (23)31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? (23)32、是否可以继承String类? (24)33、String s = new String("xyz");创建了几个String Object?二者之间有什么区别? (25)35、如何把一段逗号分割的字符串转换成一个数组? (26)36、数组有没有length()这个方法? String有没有length()这个方法? (26)37、下面这条语句一共创建了多少个对象:Strings="a"+"b"+"c"+"d"; (2)638、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? (27)39、下面的程序代码输出的结果是多少? (28)。
Java虚拟机(JVM)面试题-51道

4. 说一下 JVM由那些部分组成,运行流程是什么?JVM包含两个子系统和两个组件: 两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。
Class loader(类装载):根据给定的全限定名类名(如:ng.Object)来装载class文件到Runtime data area中的method area。
Execution engine(执行引擎):执行classes中的指令。
Native Interface(本地接口):与native libraries交互,是其它编程语言交互的接口。
Runtime data area(运行时数据区域):这就是我们常说的JVM的内存。
程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器,字节码解线程A在看直播突然,线程B来了一个视频电话,就会抢夺线程A的时间片,就会打断了线程A,线程A 就会挂起解析栈帧:1. 局部变量表:是用来存储我们临时8个基本数据类型、对象引用地址、returnAddress类型。
(returnAddress中保存的是return后要执行的字节码的指令地址。
)2. 操作数栈:操作数栈就是用来操作的,例如代码中有个 i = 6*6,他在一开始的时候就会进行操作,读取我们的代码,进行计算后再放入局部变量表中去3. 动态链接:假如我方法中,有个 service.add()方法,要链接到别的方法中去,这就是动态链接,存储链接的地方。
4. 出口:出口是什呢,出口正常的话就是return 不正常的话就是抛出异常落一个方法调用另一个方法,会创建很多栈帧吗?答:会创建。
如果一个栈中有动态链接调用别的方法,就会去创建新的栈帧,栈中是由顺序的,一个栈帧调用另一个栈帧,另一个栈帧就会排在调用者下面栈指向堆是什么意思?栈指向堆是什么意思,就是栈中要使用成员变量怎么办,栈中不会存储成员变量,只会存储一个应用地址递归的调用自己会创建很多栈帧吗?答:递归的话也会创建多个栈帧,就是在栈中一直从上往下排下去8. 你能给我详细的介绍Java堆吗?(重点理解)java堆(Java Heap)是java虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。
【黑马程序员】Java试题、50道Java面试题集(2019最新版)

【黑马程序员】Java试题、50道Java面试题集(2019最新版)以下的内容是对原有的和最近Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,相对来说比较经典,相信对准备入职的Java程序员一定有所裨益。
一、Java基础部分1、面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。
抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
2)继承:继承是从已有类得到继承信息创建新类的过程。
提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。
继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的《Java与模式》或《设计模式精解》中关于桥梁模式的部分)。
3)封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。
我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。
可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事情)。
4)多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。
简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。
多态性分为编译时的多态性和运行时的多态性。
如果将对象的方法视为对象向外界提供的服务,那么运行时的多态性可以解释为:当A系统访问B系统提供的服务时,B 系统有多种提供服务的方式,但一切对A系统来说都是透明的(就像电动剃须刀是A系统,它的供电系统是B系统,B系统可以使用电池供电或者用交流电,甚至还有可能是太阳能,A系统只会通过B类对象调用供电的方法,但并不知道供电系统的底层实现是什么,究竟通过何种方式获得了动力)。
(完整版)Java经典面试题大全带答案
Java经典面试题带答案一、单项选择题1.Java是从()语言改进重新设计。
A.AdaB.C++C.PasacalD.BASIC答案:B2.下列语句哪一个正确()A. Java程序经编译后会产生machine codeB.Java程序经编译后会产生byte codeC.Java程序经编译后会产生DLLD.以上都不正确答案:B3.下列说法正确的有()A.class中的constructor不可省略B. constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行D.一个class只能定义一个constructor答案:C4.提供Java存取数据库能力的包是()A.java.sqlB.java.awtC.java。
langD.java。
swing答案:A5.下列运算符合法的是()A.&&B.〈>C.ifD.:=答案:A6.执行如下程序代码a=0;c=0;do{-—c;a=a-1;}while(a〉0);后,C的值是()A.0B.1C.—1D.死循环答案:C7.下列哪一种叙述是正确的()A.abstract修饰符可修饰字段、方法和类B.抽象方法的body部分必须用一对大括号{}包住C.声明抽象方法,大括号可有可无D.声明抽象方法不可写出大括号答案:D8.下列语句正确的是()A.形式参数可被视为localvariableB.形式参数可被字段修饰符修饰C.形式参数为方法被调用时,真正被传递的参数D.形式参数不可以是对象答案:A9.下列哪种说法是正确的()A.实例方法可直接调用超类的实例方法B.实例方法可直接调用超类的类方法C.实例方法可直接调用其他类的实例方法D.实例方法可直接调用本类的类方法答案:D二、多项选择题1.Java程序的种类有()A.类(Class)B.AppletC.ApplicationD.Servlet2.下列说法正确的有()A.环境变量可在编译sourcecode时指定B.在编译程序时,所能指定的环境变量不包括class pathC.javac一次可同时编译数个Java源文件D.javac。
Java面试题大汇总(附答案)
Java⾯试题⼤汇总(附答案)下列⾯试题都是在⽹上收集的,本⼈抱着学习的态度找了下参考答案,有不⾜的地⽅还请指正,更多精彩内容可以关注我的微信公众号:Java团长相关概念⾯向对象的三个特征封装,继承,多态.这个应该是⼈⼈皆知.有时候也会加上抽象.多态的好处允许不同类对象对同⼀消息做出响应,即同⼀消息可以根据发送对象的不同⽽采⽤多种不同的⾏为⽅式(发送消息就是函数调⽤).主要有以下优点:1. 可替换性:多态对已存在代码具有可替换性.2. 可扩充性:增加新的⼦类不影响已经存在的类结构.3. 接⼝性:多态是超类通过⽅法签名,向⼦类提供⼀个公共接⼝,由⼦类来完善或者重写它来实现的.4. 灵活性.5. 简化性.代码中如何实现多态实现多态主要有以下三种⽅式:1. 接⼝实现2. 继承⽗类重写⽅法3. 同⼀类中进⾏⽅法重载虚拟机是如何实现多态的动态绑定技术(dynamic binding),执⾏期间判断所引⽤对象的实际类型,根据实际类型调⽤对应的⽅法.接⼝的意义接⼝的意义⽤三个词就可以概括:规范,扩展,回调.抽象类的意义抽象类的意义可以⽤三句话来概括:1. 为其他⼦类提供⼀个公共的类型2. 封装⼦类中重复定义的内容3. 定义抽象⽅法,⼦类虽然有不同的实现,但是定义时⼀致的接⼝和抽象类的区别⽐较抽象类接⼝默认⽅法抽象类可以有默认的⽅法实现java 8之前,接⼝中不存在⽅法的实现.实现⽅式⼦类使⽤extends关键字来继承抽象类.如果⼦类不是抽象类,⼦类需要提供抽象类中所声明⽅法的实现.⼦类使⽤implements来实现接⼝,需要提供接⼝中所有声明的实现.构造器抽象类中可以有构造器,接⼝中不能和正常类区别抽象类不能被实例化接⼝则是完全不同的类型访问修饰符抽象⽅法可以有public,protected和default等修饰接⼝默认是public,不能使⽤其他修饰符多继承⼀个⼦类只能存在⼀个⽗类⼀个⼦类可以存在多个接⼝添加新⽅法想抽象类中添加新⽅法,可以提供默认的实现,因此可以不修改⼦类现有的代码如果往接⼝中添加新⽅法,则⼦类中需要实现该⽅法.法想抽象类中添加新⽅法,可以提供默认的实现,因此可以不修改⼦类现有的代码法.⽗类的静态⽅法能否被⼦类重写不能.重写只适⽤于实例⽅法,不能⽤于静态⽅法,⽽⼦类当中含有和⽗类相同签名的静态⽅法,我们⼀般称之为隐藏.什么是不可变对象不可变对象指对象⼀旦被创建,状态就不能再改变。
2019史上最全Java面试大全
2019史上最全Java面试大全简答题 (22)1.面向对象的特征有哪些方面 (22)2.String是最基本数据类型吗? (23)3.抽象方法 (24)4.jsp注释 (24)5.JSP和Servlet有哪些相同点和不同点,他们之间联系是什么? (24)6.如何用css约束一个层不可见? (24)7.说出数据连接池工作机制是什么 (24)8. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? (25)9.一个页面在打开时,需要处理一些事情(比如弹出一个广告页),需要定义窗口的什么事件? (25)10. 描述forward 和redirect的区别 (25)11.垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收 (26)12 EJB的优点有哪些? (26)13在Servlet处理请求的方式为 (27)14如何利用ServletContext和ServletConfig对象获得初始化参数 (27)15说出Servlet的生命周期,并说出Servlet和CGI的区别 (27)16.访问修饰符public,private,protected,以及不写(默认)时的区别? (27)17. Math.round(11.5) 等于多少? Math.round(-11.5)等于多少? (27)18、float f=3.4;是否正确? (28)19、int和Integer有什么区别? (28)20. 请解释&和&&、|和||的区别? (29)21. 解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。
(29)22.swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上? (31)23、用最有效率的方法计算2乘以8? (31)24.数组有没有length()方法?String有没有length()方法? (31)25. 在Java中,如何跳出当前的多重嵌套循环 (31)26. 构造器(constructor)是否可被重写(override) (32)27. 重载和重写区别 (32)28.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? (32)29、是否可以继承String类? (33)30、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? (33)31、String和StringBuilder、StringBuffer的区别? (34)32. 描述一下JVM加载class文件的原理机制 (34)33. 抽象类(abstract class)和接口(interface)有什么异同 (35)34. 静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同 (36)35、Java 中会存在内存泄漏吗,请简单描述。
java前端面试题目(3篇)
第1篇一、Java基础知识1. 请简述Java的基本特点。
2. 什么是JVM?简述JVM的运行原理。
3. 请简述Java中的四种访问控制符及其作用。
4. 请解释Java中的静态变量和静态方法。
5. 请简述Java中的继承和多态。
6. 请解释Java中的final关键字。
7. 请简述Java中的异常处理机制。
8. 请解释Java中的集合框架,包括List、Set和Map等。
9. 请简述Java中的泛型。
10. 请解释Java中的反射机制。
二、Java Web基础知识1. 什么是Servlet?简述Servlet的工作原理。
2. 什么是JSP?简述JSP的工作原理。
3. 请解释Java Web中的请求和响应。
4. 什么是MVC模式?请简述MVC模式在Java Web中的应用。
5. 什么是JDBC?请简述JDBC的使用方法。
6. 什么是JPA?请简述JPA的作用和特点。
7. 什么是Spring框架?请简述Spring框架的主要功能和优势。
8. 什么是Spring MVC框架?请简述Spring MVC框架的工作流程。
9. 什么是Spring Boot?请简述Spring Boot的特点和优势。
10. 什么是RESTful API?请简述RESTful API的设计原则。
三、前端基础知识1. 请简述HTML的基本结构。
2. 请解释HTML中的标签和属性。
3. 请简述CSS的基本语法和选择器。
4. 请解释JavaScript的基本语法和特点。
5. 请简述DOM的基本概念和操作方法。
6. 请解释JavaScript中的事件处理机制。
7. 请简述JavaScript中的闭包和原型链。
8. 请解释JSON的基本语法和特点。
9. 请简述AJAX的工作原理和实现方法。
10. 请解释前端性能优化的方法。
四、框架与工具1. 请简述React的基本原理和特点。
2. 请简述Vue的基本原理和特点。
3. 请简述Angular的基本原理和特点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2019年java面试题大全(整理版) 1、面向对象的特征有哪些方面? - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
- 继承:继承是从已有类得到继承信息创建新类的过程。提供继承的类叫父类(超类、基类)、得到继承的类叫子类(派生类)。
- 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事情)。
- 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。实现多态需要做两件事:1). 方法重写(子类继承父类并重写父类中的方法);2). 对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)
2、访问修饰符public,private,protected,以及不写(默认)时的区别? 修饰符 当前类 同 包 子 类 其他包 public √ √ √ √ 修饰符 当前类 同 包 子 类 其他包 protected √ √ √ × default √ √ × × private √ × × × 3、String 是最基本的数据类型吗? 答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。
4、float f=3.4;是否正确? 答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。
5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗? 答:对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
6、int和Integer有什么区别? 答:Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。 class AutoUnboxingTest {
public static void main(String[] args) { Integer a = new Integer(3); Integer b = 3; // 将3自动装箱成Integer类型 int c = 3; System.out.println(a == b); // false 两个引用没有引用同一对象 System.out.println(a == c); // true a自动拆箱成int类型再和c比较 } }
最近还遇到一个面试题,也是和自动装箱和拆箱有点关系的,代码如下所示:
public class Test03 {
public static void main(String[] args) { Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
System.out.println(f1 == f2); System.out.println(f3 == f4); } }
如果不明就里很容易认为两个输出要么都是true要么都是false。首先需要注意的是f1、f2、
f3、f4四个变量都是Integer对象引用,所以下面的==运算比较的不是值而是引用。装箱的本质是什么呢?当我们给一个Integer对象赋一个int值的时候,会调用Integer类的静态方法valueOf public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } 简单的说,如果整型字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象,所以上面的面试题中f1==f2的结果是true,而f3==f4的结果是false。
7、&和&&的区别? 虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(“”),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
8、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。 栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间 String str = new String("hello"); 上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而”hello”这个字面量放在静态区。
9、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少? 答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。 10、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上? expr可以是byte、short、char、int、enum、String类型,但是long类型不能 11、用最有效率的方法计算2乘以8? 答: 2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)。 12、数组有没有length()方法?String有没有length()方法? 答:数组没有length()方法,有length 的属性。String 有length()方法。JavaScript中,获得字符串的长度是通过length属性得到的,这一点容易和Java混淆。
13、构造器(constructor)是否可被重写(override)? 答:构造器不能被继承,因此不能被重写,但可以被重载。 14、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 答:不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;(2)如果两个对象的hashCode相同,它们并不一定相同
15、是否可以继承String类? 答:String 类是final类,不可以被继承。 16、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
答:是值传递。Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的
17、String和StringBuilder、StringBuffer的区别? 答:Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。
18、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求。
19、描述一下JVM加载class文件的原理机制?