【Java面试题】1.Java面试题,基础知识

1.Java语言有什么特点?和C++有什么关系和区别?

面向对象(封装,继承,多态);

平台无关性,具体表现在,Java是“一次编写,到处运行”的语言。因此采用Java语言编写的程序具有很好的可移植性,而保证这一点的原始是Java的虚拟机机制。在引入虚拟机之后,Java语言在不同的平台上运行不需要重新编译;

可靠性,安全性;

 支持多线程。C++语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而Java语言提供了多线程支持;

支持网络编程并且很方便。Java语言诞生就是为了简化网络编程设计的,因此Java语言不仅支持网络编程而且很方便;      

编译与解释并存。

Java和C++的关系和区别

Java

C++

面向对象,支持封装,继承和多态

没有指针

支持指针

不支持多继承,但允许一个类实现多个接口

支持多继承

自动进行无用内存回收操作

必须由程序释放内存资源

不支持操作符重载

支持操作符重载

没有结束符

字符串或者字符数组最后都会有一个额外的字符“\o”来表示结束

不提供goto语句,但goto作为关键字

提供goto语句

2.关于JVM,JDK和JRE之间的关系

JDK(Java Development Kit),是功能齐全的Java SDK。它拥有JRE所拥有的一切,还有编译器javac和工具,如javadoc和jdb。它能够创建和编译程序。

JRE(Java Runtime Environment),它是运行已编译Java程序所需的所有内容的集合,包括Java虚拟机JVM,Java类库,java命令和其他的一些基础构件。但是,它不能用于创建新程序。

JDK包含JRE,JRE包含JVM。

 

JVM:Java虚拟机,即为JVM,是运行Java字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,他们都会给出相同的结果。字节码和不同系统的JVM实现是Java语言“一次编译,到处运行”的关键。

如果只是为了运行一下Java程序的话,只需要安装JRE即可;如果需要进行Java编程方面的工作,那就需要安装JDK。有时,即使你不需要进行Java开发,也需要安装JDK。比如

用JSP部署Web应用程序,应用程序服务器会将JSP转换为Java servlet,并且需要使用JDK来编译servlet。

那什么是字节码?采用字节码的好处?

在Java中,JVM可以理解的代码叫做字节码,即扩展名为.class的文件。字节码文件是由十六进制组成,JVM以两个十六进制值为一组,即以字节为单位进行读取。它不面向任何特定的处理器,只面向虚拟机。Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行比较高效。而且由于字节码并不针对一种特定的机器,因此,Java程序无需重新编译既可在多种不同操作系统上的计算机上运行。

Java从源代码到运行一般是下面3步:

 

Java是编译执行的语言,还是解释执行的语言?

需要注意.class->机器码这一步。这一步JVM类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种执行速度会相对比较慢。而且有些方法和代码块是经常需要被调用的(热点代码),所以后面引进了JIT编译器,JIT属于运行时编译。当JIT编译器完成第一次编译后,会将字节码对应的机器码保存下来,下次直接使用。机器码的运行效率高于Java解释器的。这就解释了Java是编译与解释共存的语言。

3.Java有哪些数据类型?

数据类型分为两种:基本数据类型和引用数据类型

基本数据类型:boolean(布尔型),float(单精度浮点型),char(字符型),byte(字节型),

Short(短整型),int(整型),long(长整型),double(双精度浮点型)

 

引用数据类型:建立在基本数据类型上,包括数组,类和接口。

Java不支持C++中的指针类型,结构类型,联合类型和枚举类型。

字符型常量和字符串常量的区别?

包装类型是什么?基本类型和包装类型有什么区别?

Java为每一个基本数据类型都引入了对应的包装类型,int的包装类就是Integer。

原始类型:boolean,char,byte,short,int,long,float,double

包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

那么基本类型和包装类型的区别是什么?

包装类型可以为null,而基本类型不可以。 这使得包装类型可以用于POJO中,而基本类型则不行。

那为什么POJO的属性必须要用包装类型呢?

数据库的查询结果可能为null,如果使用基本类型,因为要自动拆箱(将包装类型转为基本类型,比如从Integer对象转为int),就会抛出NullPointerException异常。

包装类型可用于泛型,基本类型不可以。泛型使用基本类型时会编译出错。因为泛型在编译时会进行类型擦除,最后只保留原始类型,而原始类型只能是Object类及其子类,基本类型是个特例。

基本类型比包装类型更高效。基本类型在栈中直接存储的具体数值,而包装类型则存储的是堆中的引用。比起基本类型,包装类型需要占用更多的内存空间。

那什么是自动装箱和自动拆箱?

从Java5中开始引入了自动装箱/拆箱机制,把基本类型转换成包装类型的过程叫做装箱;反之,把包装类型转换成基本类型的过程叫做拆箱,使二者可以相互转换。

自动装箱:把基本数据类型重新转化为对象。成为一个对象之后就可以调用对象所声明的所有的方法。

自动拆箱:将对象重新转化为基本数据类型。

 

因为对象时不能直接进行运算的,而是要转化为基本数据类型后才能进行加减乘除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值