一 .java基础

1.java语言有哪些特点?

  • 面向对象(封装,继承,多态);
  • 平台无关性,平台无关性的具体表现在于,Java是"一次编写,导出运行(Write once,Run any Where)"的语言,因此采用java语言编写的程序具有很好的移植性,而保证这一点的正是Java的虚拟机机制,在引入虚拟机之后,Java语言在不同的平台上运行不需要重新编译,
  • 可靠性,安全性;
  • 支持多线程,C++语言没有内置的多线程机制,因此必须调用操作系统的多线程程序设计,而java语言却提供了多线程支持;
  • 支持网络编程并且很方便,Java语言诞生本身就是为了简化网络编程设计的,因此Java语言不仅支持网络编程而且很方便;
  • 编程与解释并存;

2.Java和C++有什么关系,它们有什么区别?

  • 都是面向对象的语言,都支持封装,继承和多态;
  • C++支持指针,而Java没有指针的概念;
  • C++支持多继承,而Java不支持多重继承,但允许一个类实现多个接口;
  • Java自动进行无用内存回收操作,不在需要程序员进行手动删除,而C++中必须由程序释放内存资源,这就增加了程序员的负担,
  • Java不支持操作操作符重载,操作符重载则被认为是C++的突出特征;
  • Java是完全面向对象的语言,并且取消了C/C++中的结构和联合,使编译程序更加简洁;
  • C和C++不支持字符串变量,在C和C++程序中,使用了"Null"终止符代表字符串的结束,在Java中字符串是用类对象(String 和 StringBuffer)来实现的;
  • goto语言是C和C++的"遗物",Java不提供goto语言,虽然Java指定goto作为关键字,但不支持它的使用,这使程序更简洁易读;

3 JVM , JRE 和JDK的关系是什么?

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

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

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

这个问题,面试官可以拓展提问,Java是编译执行的语言,还是执行的语言?

Java之所以可以"一次编译,到处运行",一是因为JVM针对各种操作系统,平台都进行了定制,二是因为无论在什么平台,都可以编译生成固定格式的字节码,(.class文件)供JVM使用,因此,可以看出字节码对于Java生态的重要性。

之所以称之为字节码,是因为字节码文件由十六进制值组成,而JVM以两个十六进制值一组,即以字节为单位进行读取,在Java中一般用javac命令编译源代码为字节码文件,一个.java文件从编译到运行的实列如图所示,

Java语言通过字节码的方式,在一定程度上解决了传统解释性语言执行效率低的问题,同时也保留了解释性语言可移植的特点,所以Java运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无需重新编译,便可以在多种不同的计算机上运行。

5.Oracle JDK和OpenJDK的区别是什么?

可能在看到这个问题之前,很多人和我一样,并没有接触和使用过OpenJDK,下面通过我收集到的一些资料对你解答这个被很多人忽视的问题。

  • Oracle JDK版本将每三年发布一次,而OpenJDK版本每三个月发布一次;
  • OpenJDK是一个参考模型并且是安全开源的,而OracleJDK是OpenJDK的一个实现,并不是完全开源的;
  • Oracle JDK比OpenJDK更稳定,OpenJDK和OracleJDK的代码几乎相同,但OracleJDK有更多的类和一些错误修复,因此,如果你想开发企业/商业软件,建议选择OracleJDC,因为它经过了彻底的测试和稳定,某些情况下,有些人提到在使用OpenJDK可能遇到了很多应用程序崩溃的问题,但是,只需要切换到OracleJDC就可以解决问题;
  • 在响应和JVM性能方面,OracleJDK与openJDK相比提供了更好的性能;
  • OracleJDK不会为即将发布的版本提供长期支持,用户每次都必须通过更新到最新版本获得支持来获取最新版本;
  • OracleJDK根据二进制代码许可协议获得许可,而OpenJDK根据GPLv2许可获得许可。

6.Java有哪些数据类型?

Java语言的数据类型分为两种:基本数据类型和引用数据类型。

7.switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?

Java5以前swich(expr)中,expr只能是byte,short,char,int.

从Java5开始,Java中引入了枚举类型,expr也可以是enum类型。

从Java7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

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

Java中,可以使用使用访问控制符来保护对类,变量,方法和构造方法的访问,Java支持4种不同的访问权限。

  • default(即默认,什么也不写):在同一包内可见,不适用任何修饰符,使用对象:类,接口,变量,方法。
  • private:在同一类内可见,使用对象:变量,方法。注意,不能修饰类(外部类)
  • public:对所有类可见,使用对象:类,接口,变量,方法
  • protected:对统一包内的类和所有子类可见,使用对象:变量,方法,注意:不能修饰类(外部类)。

9.break,continue,return的区别及作用?

  • break跳出总上一层循环,不在执行循环(结束当前的循环体)
  • continue跳出本次循环,继续执行下一次循环(结束正在执行的循环,进入下一个循环条件)
  • return程序返回,不在执行下面的代码(结束当前的方法,直接返回)

10.final , finally , finalize的区别?

final用于修饰变量,方法和类。

  • final变量:被修饰的变量不可变,不可变分为引用不可变,和对象不可变,final指是引用不可变,final修饰的变量必须初始化,通常被修饰的变量为常量。
  • final方法:被修饰的方法不允许任何子类重写,子类可以使用该方法。
  • final类:被修饰的类不能被继承,所有方法不能被重写。

finally作为异常处理的一部分,它只能在try/catch语句中,并且附带一个语句块表示这段语句最终一定被执行(无论是否抛出异常),经常被用在需要释放资源的情况下,System.exit(0)可以阻断finally执行。

finalize是在java.lang.Object里定义的方法,也就是说每一个对象都有这么个方法,这个方法在gc启动,该对象被回收的时候被调用。

一个对象的finalize方法只会被执行一次,finalize被调用不一定会立即回收该对象,所以有可能调用finalize后,该对象又不需要被回收了,然后到了真正被回收的时候,因为前面调用过一次,所以不会再次调用finalize了,进而产生问题,异常不推荐使用finalize方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值