Java面试题------基础

Java面试题------基础

1.JDK和JRE有什么区别

  • JDK是Java开发工具包,包含了Java运行环境JRE、Java工具和Java基础类库。
  • JRE是Java运行环境,包含JVM标准实现及Java核心类库。
  • JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

2.==和equals的区别

  • 如果是基本数据类型的比较则二者比较的结果相同,如果比较的是引用数据类型,双等于则比较的是地址值,如果该对象没有重写equals方法,则也是比较的是地址值,如果重写了equals方法也比较的是对象的内容是否相同。

3.两个对象的hashCode()相同,则equals()也一定为true,对吗?

  • 不一定相同。如果两个对象通过equals方法比较结果相同,那么他们的hashCode()返回的值也一定相同。如果不重写hashCode()方法,则返回的值不一定相同。
  • 如果根据 equals() 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。

4.final在Java中有什么作用

  • final在Java中可以修饰类,变量,方法。
  • 当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法。
  • final修饰的方法可以防止子类来修改方法的含义。
  • final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
  • 如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。

5.Java中的Math.round(-1.5)等于多少?

  • -1

6.String属于基础的数据类型吗?

  • 不是,String是引用数据类型,基本类型包括byte、short、int、long、float、double、boolean、char。

7.Java中操作字符串都有哪些类?它们之间有什么区别?

  • 操作字符串的类有StringBuilder、StringBuffer。他们都是final修饰的类,都继承与abstractStringBulider抽象类。
  • StringBuffer存在的时间比StringBuilder更长,StringBuffer可以对字符串进行拼接,并且是单线程操作,线程安全,效率比StringBuilder低。
  • StringBuilder是在jdk1.5出来的,它同样可以拼接字符串,但是他是线程异步,所以线程不安全,效率比较高。

8.String str="i"与String str=new String(“i”)一样吗?

  • 结果是不一样的。
  • String str=“i”,其实在底层是在常量池中寻找室友有一个"i"对象,如果有则将这个对象的应用传给str,如果没有则创建一个然后再把地址值传送给str。
  • String str=new String(“i”),这行代码则是直接在堆中直接创建一个对象,然后再将该对象的引用给str,然后堆中的这个对象再去常量池中寻找"i"对象,找到则把引用传给堆中的那个对象,不在则创建然后传送引用给该对象。

9.如何将字符串进行反转?
在StringBuilder,StringBuffer类中有一个reverse()方法,可以将字符串进行反转。

10.抽象类和接口的区别?

  • 首先,从语法角度来说。abstract类方法中可以有自己的数据成员,也可以有非 abstract的成员方法,并赋予方法的默认行为,而在interface方式中一般不定义成员数据变量,所有的方法都是abstract,方法不能拥有默认的行为。
  • 从编程的角度来说。abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系,而一个类可以实现多个interface。
  • 从问题域角度来说。abstract class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在is a"关系,即父类和派生类在概念本质上应该是相同的。对于interface来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。

11.普通类和抽象类有哪些区别?

  • 抽象类的修饰符为abstract,普通类可以是public、private等。
  • 抽象类例可以有抽象方法,普通类里不能有抽象方法。
  • 抽象类不能直接用new来实例化,需要子类继承来实现它的抽象方法。
  • 抽象类可以应用多态,普通类不可以。

12.抽象类能用final修饰吗?

  • 不能
  • 抽象类是不能直接通过new实例化,所以就得通过子类继承,如果用final修饰抽象类,该类成为了一个最终类,不能被继承,所以产生冲突。

13.Java中io流分为几种?

  • Java中有字节流、字符流。
  • 字节输入流的父类为InputStream、字节输出流的父类为OutputStream;字符输入流的父类为Reader、字符输出流的父类为Writer。

14.BIO,NIO,AIO有什么区别?

  • BIO,阻塞时IO,线程发起io请求后,一直阻塞,直到数据就绪后(死等)
  • NIO,非阻塞时IO,线程发起io请求后,立即返回。用户线程不阻塞等待,但是用户线程回定时轮询查数据是否就绪。
  • AIO,异步IO,基于事件驱动思想,线程发起io请求后,立即返回,也不再轮询,数据就绪后由os主动通知应用程序。

15.请描述一下JVM加载class文件的原理机制?

  • JVM中类的装载是由ClassLoader和它的子类来实现的JavaClassLoader是—个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。

16.什么是OOAD?OOAD怎么实现?

  • OOAD(Object Orient Analysis Design,面向对象的分析与设计)是现代软件企业广为采用的一项有效技术。OOAD方法要求在设计中要映射现实世界中指定问题域中的对象和实体,例如:顾客、汽车和销售人员等。这就需要设计要尽可能地接近现实世界,即以最自然的方式表述实体。
  • 使用UML建模语言创建系统的分析模型与设计模型是OOAD实现的主要手段。

17.阐述一下static关键字的作用?

  • 修饰成员变量。用static修饰的成员变量不属于对象的数据结构;static变量是属于类的变量,通常可以通过类名来引用static成员,static成员变量和类的信息一起存储在方法区,而不是在堆中,一个类的static成员变量只有"一份",无论该类创建了多少对象。
  • 修饰成员方法。static修饰的方法则不需要针对某些对象进行操作,其运行结果仅仅与输入的参数有关,调用时直接用类名引用。由于static在调用时没有具体的对象,因此在static方法中不能对非static成员(对象成员)进行访问。static方法的作用在于提供一些"工具方法"和"工厂方法"等。
  • static块:属于类的代码块,在类加载期间执行的代码块,只执行一次,可以用来在软件中加载静态资源。

18.GC是什么?为什么要有GC?

  • GC是垃圾收集的意思(Gabage Collection ) ,内存处理是编程人员容出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的。Java程序员编程的时候不用考虑变量不用时释放内存,Java虚拟机可以自动判断出并收集到垃圾。

19.int和Integer有什么区别?

  • Java语言是一个面向对象的语言,但是Java中的基本数据类型却不是面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(wrapperClass)
  • Java语言提供两种不同的类型:引用类型和基本数据类型;int是Java语言中的原始数据类型,Integer是Java为int提供的包装类。Java为每一个基本数据类型提供了封装类,其中,基本数据类型包括byte、short、int、long、float、double,char、boolean这八个基本数据类型,这八个基本数据类型对应的封装类为Byte、Short、Integer、Long、Float、Double、Character、Boolean
  • 在这八个类名中,除了Integer和Character类以外,其它六个类的类名和基本数据类型一致,只是类名的第一个字母大写即可。对于包装类说,这些类的用途主要包含两种:
    1)作为和基本数据类型对应的类类型存在,方便涉及到对象的操作;
    2)包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
  • 13
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值