Java基础面试题

                                              Java基础面试题


1、面向对象的特征方面有哪些?怎么理解?

面向对象的三大特征:

封装,继承,多肽

1.继承:保留父类的属性,开拓新的东西,通过子类可以全部实现继承,子类继承所有的状态和行为,同时添加自己的状态和行为。

2.封装:就是类的私有化,将代码及处理数据绑定在一起的一种编程机制,该机制保证程序和数据不受外部干扰。

3.多肽:是允许将父对象设置成为和一个和多个它的子对象相等的技术。包括重载和重写。重载为编译时多态,重写是运行时多态。


2、访问修饰符public,private,protected,以及不写(默认)时的区别?

在这里插入图片描述

3、String是最基本的数据类型吗?

不是。Java中的基本数据类型只有8种,byte(1字节),short(2字节),int(4字节),long(8字节),float(4字节),double(8字节),char(2字节),boolean(1字节),String属于对象。


4、float f=3.4;是否正确?

不正确,因为3.4也是双精度,将双精度型(double)赋值给浮点型(float)属于下转型,会造成精度损失,因此需要强制型转换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 si = 1; s1 += 1; 可以正确编译,因为s1 += 1; 相当于s1 = (short) s1+1; 其中含有隐藏的强制转换类型。


6、Java有没有 goto?

因为 goto 是保留字,在目前的 Java 中没有使用。根据关键字列表,其中有 goto 和 const,但是这两个是目前无法使用的关键字,因此有些地方称为保留字。


7、int和Integer有什么区别?

1、int 是基本数据类型 ,Integer 是包装类型.
2、int 不需要实例化,Integer 必须实例化(创建对象)之后才能使用.
3、int 是直接存储数据值,Integer 实际是对象的引用,当 new 一个 Integer 时,实际上是生成了一个指针指向对象.
4、int 的默认值是0 ,Integer 的默认值是 null.


8、&和&&的区别?

& 运算符有两种用法,(1)按位与; (2)逻辑与; && 运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然两者都要求运算符左右两端的布尔值都是 true 整个表达式才是 true。&& 之所以称为短路与是因为,如果 && 左边的表达式的值是 false ,右边的表达式会直接被直接短路掉,不会进行运算。


9、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。向右取整


10、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

在 Java 5 以前,switch只能在 byte, int, short, char。从 Java 5开始,Java 中引入了枚举,也可以是enum类型,从 Java 7 开始,可以使 String 类型上,但是长整型(long)在任何版本中都不能使用。


11、用最有效率的方法计算2乘以8?

2 < < 3 (左移动3位相当与2的3次方,右移动3位相当于除以2的3次方)


12、数组有没有length()方法?String有没有length()方法?

数组没有 length() 方法,有 length 属性,String 有 length() 方法


13、在Java中,如何跳出当前的多重嵌套循环?

在最外层循环循环前加一个标记如 A ,然后用 break A; 可以跳出多重循环。


14、构造器(constructor)是否可被重写(override)?

构造器不能被继承,因此不能被重写,但可以被重载。(比如无参构造,有参构造)


15、重载(Overload)和重写(Override)的区别?

方法的重载和重写都是实现多肽的方式,区别在于前者是实现的是编译时的多肽性,后者是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类和父类当中,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类方法重写更加好访问,不能比父类被重写方法声明更多的异常。重载对返回类型没有区分,不能根据返回类型进行区分。


16、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

不对,如果两个对象 x 和 y 满足 x.equals(y) == true, 它们的 hash code 应该相同。Java 对于 equals 方法和 hashCode 方法是这样规定的: (1) 如果两个对象相同(equals 方法返回 true),那么他们的 hashCode 值一定要相同;(2)如果两个对象的 hashCode 相同,x.equals(y) == true 不一定相同。


17、是否可以继承String类?

String 类是 final 类,不可以被继承。


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

是传递值,Java 语言的方法调用只支持参数的传递值。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用。对象的属性可以在被调用过程中改变,但对对象引用的改变是不会影响到调用者的。


19、java中操作字符串都有哪些类? String 和 StringBuilder、StringBuffer的区别?

操作字符串的类有: String、StringBuffer、StringBuilder。

String 和 StringBuffer 、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会产生新的 String 对象,然后将指针指向新的对象,而 StringBuffer 、StringBuilder 可以再原有的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用String。

StringBuffer 和 StringBuilder 最大的区别在于 StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但是 StringBuilder 的性能高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程情况下推荐使用 StringBuffer。


20、char 型变量中能不能存贮一个中文汉字,为什么?

char 类型可以存储一个中文汉字,因为 Java 中使用的编码是Unicode,一个 char (16比特)类型占两个字节,所以放一个中文是没有问题的。


21、抽象类和接口有什么区别?

实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。

构造函数:抽象类可以有构造函数;接口不能有。

实现数量:类可以实现多个接口,但是只能继承一个抽象类

访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。


22、JDK 和 JRE 有什么区别?

JDK: Java Development Kit 的简称, Java 开发工具包,提供了 java 的开发环境和运行环境。

JRE: Java Runetime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。

具体来说就是 JDK 包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说,如果你要运行 java 程序,只需要安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。


23、== 和 equals 的区别是什么?

总结:== 对于基本类型来说是值比较,对于引用类型来说比较的是引用;而 equals 默认情况下是引用比较,只是很多类重写了 equals 方法,比如 String 、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。


24、final 在 java 中有什么作用?

final 修饰的类叫最终类,该类不能被继承

final 修饰的方法不能被重写

final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。


25、String str=“i” 与 String str=new String(“i”)一样吗?

不一样,因为内存的分配方式不一样。String str=“i” 的方式,java 虚拟机会将其分配到常量池中;而 String str=new String(“i”) 则会被分配到堆内存中。

26、如何将字符串反转?

使用 StringBuilder 或者 StringBuffer 的 reverse() 方法。


27、抽象类必须要有抽象方法吗?

不需要,抽象类不一定非要有抽象方法。

abstract class Cat {
     public static void sayHi(){
          System.out.println(" hi ");
}
}


28、普通类和抽象类有哪些区别?

普通类不能包含抽象方法,抽象类可以包含抽象方法

抽象类不能实例化,普通类可以直接实例化。


29、抽象类能使用 final 修饰吗?

不能。定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类。

30、java 中 IO 流分为几种?

按功能来分:输入流(input) 、输出流(output)。

按类型来分: 字节流和字符流

字节流和字符流的区别是:字节流按8位传输以字节为单位输入输出数据,字符流按16位传输字节复为单位输入输出数据。


31、BIO、NIO、AIO有什么区别?

BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。

NIO:New IO 同步非阻塞式 IO ,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。

AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO, 异步 IO 的操作基于事件和回调机制。


32、Files 的常用方法都有哪些?

Files.exists():检测文件路径是否存在。
Files.createFile():创建文件。
Files.createDirectory():创建文件夹。
Files.delete():删除一个文件或目录。
Files.copy():复制文件。
Files.move():移动文件。
Files.size():查看文件个数。
Files.read():读取文件。
Files.write():写入文件。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值