Java八股文面试题

目录

1、java 中有哪些基本类型?

2、java 为什么能够跨平台运行?

3、比较一下 Java 和 JavaSciprt。

4、String 是基本数据类型吗?我可不可以写个类继承于 String?

5、谈谈&和&&的区别?

6、Switch 语句里面的条件可不可以是 byte、long、String?使用时候还应注意什么?

7、short s1=1;s1=s1+1;有什么错?short s1 = 1;s1+=1 有什么错?

8、Java 中 ++ 操作符是线程安全的吗?

9、3*0.1 == 0.3 将会返回什么?true 还是 false?

10、char 为什么能存贮一个汉字?

11、final 关键字的用法?

12、静态变量和实例变量的区别?

13、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

14、面向对象的基本特征是什么?

15、作用域 public,private,protected,以及不写时的区别?

16、Overload 和 Override 的区别。

17、为什么方法不能根据返回类型来区分重载?

18、构造器可不可以被重载或重写?

19、在 Java 中定义⼀个不做事且没有参数的构造⽅法的作⽤

20、成员变量与局部变量的区别有哪些?

21、⾃动装箱与拆箱

22、hashCode 的作用是什么

23、为什么要有 hashCode

24、hashCode()与 equals()的相关规定

25、为什么 Java 中只有值传递?

26、Java 中有没有多继承?

27、抽象类和接口的区别?

28、java 中实现多态的机制是什么?

29 、 String 和 StringBuffer 的区别? StringBuffer 和

StringBuilder 区别?

30、数组中有没有 length()方法,String 中有没有 length()方法?

31、final, finally, finalize 的区别。

32、‘==’和 equals 的区别?

34、有没有可能两个不相等的对象有有相同的 hashcode?

35、两个相同的对象会有不同的的 hash code 吗?

36、我们可以在 hashcode() 中使用随机数字吗?

37、Java 中 java.util.Date 与 java.sql.Date 有什么区别?

38、接口是什么?为什么要使用接口而不是直接使用具体类?

39、heap 和 stack 有什么区别。

40、GC 是什么? 为什么要有 GC?

41、什么是内部类?分为哪几种?

42、为什么需要内部类?

43、数字转字符有多少种方式,分别是什么

44、Java 创建对象有几种方式

45、说出十种常见的异常

46、什么是检查性异常和非检查性异常?

47、Java 的异常处理机制是什么?

48、throw 和 throws 的区别

49、一个静态方法,里面可不可以用 this 和 super 关键字

50、java8 新特性


1、java 中有哪些基本类型?

整形:byte 8 short 16 int 32 long 64 位

浮点类型:float、double

字符类型:char 表示字符 utf-16

布尔类型:boolean true/false

2、java 为什么能够跨平台运行?

因为 Java 程序编译之后生成.class 文件,不是能被硬件系统直接运行的代码,而是一种 “中间码”——字节码。然后不同的硬件平台上安装有不同的 Java 虚拟机(JVM),由 JVM 来把字节码再“翻译”成所对应的硬件平台能够执行的代码。因此对于 Java 编程者来说,不需要考虑硬件平台是什么。所以 Java 可以跨平台。

3、比较一下 Java 和 JavaSciprt。

基于对象和面向对象:Java是一种真正的面向对象的语言,即使是开发简单的程序,也必须设计对象;JavaScript 是种脚本语言,它是一种基于对象(Object-Based)和事件驱动(Event-Driven)的编程语言,本身提供了非常丰富的内部对象供设计人员使用。

解释和编译:Java 的源代码在执行之前,必须经过编译。JavaScript 其源代码不需经过编译,由浏览器解释执行。

强类型变量和弱类型变量:Java 采用强类型变量检查,所有变量在编译之前必须作声明;JavaScript中变量是弱类型的,甚至在使用变量前可以不作声明,其解释器在运行时检查推断其数据类型。代码格式不一样。

4、String 是基本数据类型吗?我可不可以写个类继承于 String?

不是,String 是引用类型;String 是 final 的类,是不可以被继承的。

5、谈谈&和&&的区别?

&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为 true 时,整个运算结果才为 true,否则,只要有一方为 false,则结果为 false。

&&还具有短路的功能,即如果第一个表达式为 false,则不再计算第二个表达式。

&还可以用作位运算符,当&操作符两边的表达式不是 boolean 类型时,&表示按位与操作.。

6、Switch 语句里面的条件可不可以是 byte、long、String?使用时候还应注意什么?

switch 里面的条件必须是能隐式的转化成为 Int 的故 long 不行,byte 可以;jdk1.7 之后

String 类型的也可以。使用 Switch 时候还应注意它的穿透,即每个 case 后要跟 break;

7、short s1=1;s1=s1+1;有什么错?short s1 = 1;s1+=1 有什么错?

对于 short s1 = 1; s1 = s1 + 1; 由于 s1+1 运算时会自动提升表达式的类型,所以结果是 int 型,再赋值给 short 类型 s1 时,编译器将报告需要强制转换类型的错误。

对于 short s1 = 1; s1 += 1;由于 += 是 java 语言规定的运算符,java 编译器会对它进行特殊处理,因此可以正确编译。

8、Java 中 ++ 操作符是线程安全的吗?

不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,然后存储回内存,并不是原子性的操作,这个过程可能会出现多个线程交差。解决方案:对i++操作的方法加同步锁或者使用支持原子操作的类比如 java.util.concurrent.atomic.AtomicInteger

9、3*0.1 == 0.3 将会返回什么?true 还是 false?

false,因为有些浮点数不能完全精确的表示出来。

对于0.1来说,其本质是1/10,用二进制表示是1/1010是一个除不尽的无穷循环

==>0.000110011001100...其中0011循环,但是恰恰double类的精度可以表现出0.1*3的结果为0.30000000000000004,所以造成double中运算不精准,返回结果false。

10、char 为什么能存贮一个汉字?

char 型变量是用来存储 Unicode 编码的字符的,unicode 编码字符集中包含了全世界所有的字体。

11、final 关键字的用法?

final 用于修饰类、属性、方法

final 修饰的类,不能被继承

final 修饰的属性,是常量,值不可以改变 final 修饰的方法,不可以被重写

12、静态变量和实例变量的区别?

静态变量也称为类变量,归全类共有,它不依赖于某个对象,可通过类名直接访问;而实例变量必须依存于某一实例,只能通过对象才能访问到它。

静态变量存在方法区内存 实例变量存在堆内存

13、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是值传递。Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。

14、面向对象的基本特征是什么?

1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

2)继承:子类拥有父类一切非私有的属性和方法。

3)封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面 向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装 的对象,这些对象通过一个受保护的接口访问其他对象。

4)多态性:同一种事物的不同种表现形式。

15、作用域 public,private,protected,以及不写时的区别?

         作用域        当前类        同包       子孙类

其他

         public                   √           √          √

         protected              √           √           √

×

         default                  √           √          ×

×

         private                  √           ×          ×

×

16、Overload 和 Override 的区别。

(Overload)重载:发生在同一个类之中,方法名相同、参数列表不同(个数,类型),与返回值无关、与 final 无关、与修饰符无关、与异常无关。

(Override)重写:发生在子类和父类之间,方法名相同、参数列表相同、返回值相同、不能是 final 的方法、重写的方法不能有比父类方法更为严格的修饰符权限、重写的方法所抛出的异常不能比父类的更大。

如果父类私有的方法,子类拥有方法签名相同的方法,子类不属于重写父类的方法,该方法属于子类的新方法。

17、为什么方法不能根据返回类型来区分重载?

因为java方法被调用时返回值可以舍弃,也可以使用父类/接口类型接收返回值,所以如果有相同的参数列表的方法,编译器无法确定具体要调用的方法。

重载只和参数列表相关并且方法名称相同,和方法签名的其他关键字无关。

18、构造器可不可以被重载或重写?

构造器不能被继承,

  • 6
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值