java面试题答案——java基础

Java 基础

1. JDK 和 JRE 有什么区别?
    JDK(Java Development Kit):Java开发工具包,是整个java的核心,它包含了jre,java工具(java,javac,jdb等)和java基础类库。它面向开发人员。
    JRE(Java Runtime Environment):java运行环境,包含了jvm,java核心类库。它面向程序使用者,它不包含任何开发工具比如编译器和调试器。
        (JVM是整个java实现跨平台的最核心的部分,能够运行以java语言写作的软件程序)
    二者最明显的区别在于JDK的bin目录下有javac,而JRE没有。

    
2. == 和 equals 的区别是什么?
    ==:若是基本数据类型,比较的是二者的值;若是引用类型,比较的是二者的地址值。
    equals(Object o):不能比较基本数据类型,基本数据类型不是类类型。
    
    具体内容参考:https://blog.csdn.net/qq_36522306/article/details/80550210

3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
    错误。
    若x.equals(y)返回true,那么俩对象的hashCode()值相等;
    若x.equals(y)返回false,那么俩对象的hashCode()值可能相等,可能不等。

4. final 在 Java 中有什么作用?
    a) final可以修饰类,这样的类不能被继承。

    b) final可以修饰方法,这样的方法不能被重写。(重写:只要子类方法与父类方法同名同参数就是重写)

    c) final可以修饰变量,这样的变量的值不能被修改,是常量。

5. Java 中的 Math.round(-1.5) 等于多少?(-1)
    Math.round原理是参数+0.5,然后在向下取整,返回值long类型。
    -1.5+0.5=-1.0,向下取整是-1。
    向下取整(是说取比它小的第一个整数或者和它相等的整数):Math.floor(),返回值double类型
    向上取整(是说取比它大的第一个整数或者和它相等的整数):Math.ceil(),返回值double类型
    
    具体内容参考:https://blog.csdn.net/fenggering/article/details/55806408
    
6. String 属于基础的数据类型吗?
    不属于。
    基础类型有8个:
    整数类型:byte,short,int,long
    浮点类型:float,double
    逻辑类型:boolean
    字符类型:char

7. Java 中操作字符串都有哪些类?它们之间有什么区别?
    String:不可变类(指的是不能修改字符串本身),线程不安全
    StringBuffer:可变类,线程安全
    StringBuilder:可变类,线程不安全,和stringBuffer类似
    StringTokenizer:分割字符串的工具类
    
    1).四个字符串类型底层都是使用char数组进行实现.

    2).从jdk1.7以后,StringBuffer和StringBuilder均继承自AbstractStringBuilder。提供的方法基本相似,StringBuffer不提供线程同步,StringBuilder是线程同步的,故StringBuilder效率不如StringBuffer

    3).对字符串进行操作时,由于String、StringBuffer、StringBuilder都是由char数组实现的,类似append的操作都会重新产生一个新char数组,只不过由于StringBuffer和StringBuilder的char数组并不是final的,所以表现为没有产生新的StringBxxxxx对象,但是内部的char数组value的指向是发生了变化的。

    4).对字符串进行操作时,由于String的char数组是final的所以任何对String的操作都会产生一个新的对象,StringBuffer和StringBuilder可以反推。
    
8. String str="i"与 String str=new String(“i”)一样吗?
    ""创建的字符串保存在常量池中,而new一个实例会保存在内存中。
    二者的==返回false,equals()返回true。
    
    具体内容参考:https://blog.csdn.net/Qian15116170940/article/details/80673949

9. 如何将字符串反转?
    String str = "Hello World!";
    str.reverse();

10. String 类的常用方法都有那些?
    String();equals();length();toLowerCase();toUpperCase();trim();replace()...
    
    具体内容参考:https://blog.csdn.net/qq_25406669/article/details/79021911

11. 抽象类必须要有抽象方法吗?
    抽象类可以没有抽象方法,但抽象方法必须有抽象类。
    
    抽象类的定义可参考:https://blog.csdn.net/dove_dove_1802/article/details/82054417

12. 普通类和抽象类有哪些区别?
    1).抽象类不能被实例化。

    2).抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。

    3).抽象方法只需申明,而无需实现,抽象类中可以允许普通方法有主体

    4).含有抽象方法的类必须申明为抽象类

    5).抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类。

13. 抽象类能使用 final 修饰吗?
    final关键字不能用来抽象类和接口。
    
    final用法参考:https://www.cnblogs.com/huiyuantang/p/5422317.html

14. 接口和抽象类有什么区别?
    接口:由全局静态常量和抽象方法组成
    抽象类:必须用abstract关键字声明,可以声明抽象方法
    
    二者的共同点:
    I).都不能被实例化
    II).抽象方法都没有方法体
    III).二者的子类都只有实现了他们当中的所有抽象方法后才能被实例化
    IIII).如果接口的实现类不能全部实现当中抽象方法,那么该类只能是抽象类,抽象类也是一样,他的继承类不能全部实现当中全部抽象方法,它也只能是抽象类
    不同点:
    I).接口中只能声明抽象方法;
        抽象类中既可以声明抽象方法,还可以实现普通方法;
    II).接口中的成员变量只能public static final,即使不用关键字声明,也是一样的;
        抽象类的成员变量和普通类的一样;
    III).接口中的抽象方法只能是public abstract的,即使不用关键字声明,也是一样的;
        抽象类中的抽象方法必须用abstract声明,且不能是private的,不能是static的,因为要被子类实现
    IIII).接口可以多实现;
        抽象类只能单继承
    

15. Java 中 IO 流分为几种?
    根据处理类型的不同分为:字节流和字符流,
    根据流向的不同分为:输入流和输出流
    
    具体内容参考:https://www.cnblogs.com/QQ846300233/p/6046388.html

16. BIO、NIO、AIO 有什么区别?
    BIO:线程发起IO请求,不管内核是否准备好数据,线程一直阻塞,直到IO操作完成。
        ##同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
    NIO:线程发起IO请求,立即返回。内核做好数据准备后,通过调用注册的回调函数通知线程做IO操作,线程阻塞,直到操作完成。
        ##同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
    AIO:线程发起IO请求,立即返回。内核做好数据准备后,并且进行IO操作,直到操作完成或者失败,再通过调用注册的回调函数通知线程操作成功或失败。
        ##异步非阻塞,服务器实现模式为一个有效请求一个线程,即客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。
        
    具体内容参考:https://blog.csdn.net/u013068377/article/details/70312551

17. Files的常用方法都有哪些?
    请参考:https://www.cnblogs.com/wangjinlong-padan/p/6382924.html
    
---------------------------------------------------------------------------------------------------------------------------
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值