Java面试日常归纳(1)

声明一下:以下的题目均来自牛客网摘录

(1)什么是Java虚拟机?为什么Java被称为是平台无关的编程无言?

Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件能够被编译成能够被Java虚拟机执行的字节码文件。
Java语言有一次编译,到处运行的特点。因为我们在Java编程的时候并不会像C语言一样考虑程序运行的环境是什么,Oracle早已经根据运行时系统的不同为我们提供了不同的JVM,同样的字节码在JVM上运行的效果是相同的,所以说Java被认为是“平台无关的编程语言”。

(2)JDK和JRE的区别是什么?

JRE:Java运行时环境
JDK:Java开发工具包
JRE包括JVM,Java基础类库(这是因为在Java代码执行过程中需要Java基础类库的支持)。是使用Java语言编写的程序在运行过程中必须要有JRE,JRE是体工程Java程序运行使用的。
JDK:程序员使用Java开发过程中需要的开发工具包,是给程序员使用的
我感觉回答出 JRE和JDK是什么以及分别提供给谁使用就可以了。

(3)“static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?

static表示一个成员变量或城市成员方法可以在没有所属类的实例情况下被访问。
Java中static方法不能够被覆盖,因为方法的覆盖是基于运行时动态绑定的,而static方法是在编译器静态绑定的。
Java中不可以覆盖一个申明为private的方法,因为父类中private方法在子类中是没有访问权限的,所以子类是不可以覆盖父类中申明为private的方法。

(4)是否可以在static环境中访问非static变量?

static变量在Java中是属于类的,所有类实例共享static变量,当类被JVM装载的时候,会对static变量进行初始化,在static环境是不可以访问非static变量,因为这是虽然类经过JVM装载了,但是可能在内存中还没有该类的对象,所以非static变量可能根本不存在于内存中。

(5)Java支持的数据类型有那些?什么是自动拆箱?

Java语言的基本数据类型有:char short int long, float, double, boolean, byte
自动拆箱是Java编译器在基本数据类型和基本数据类型包装类之间做的一种转换。

(6)Java中方法覆盖(Override)和方法重载(overload)是什么意思?

Java的方法覆盖是说子类重新定义了父类的方法,方法的覆盖需要有相同的方法名,参数列表和返回值类型。
Java的重载是指在一个勒种有两个或两个以上方法名相同、但是参数不同的情况下。
这里强调一下方法的重写原则:
(1)重写方法的方法名称、参数列表必须和原方法相同,返回值类型可以相同或者是原类型的子类型(从JDK5开始支持)。
(2)重写方法不能比原方法访问性差(访问权限不允许缩小)。
(3)重写方法不能比原方法跑出更多的异常。
(4)被重写的方法不能够是final,因为final修饰的是不能够被重写的。
(5)被重写的方法不能被声明为private和static。如果父类申明为private,子类不构成重写。如果父类申明为static,,而重写的方法没有申明static,会产生编译错误。如果父类和子类都申明了static,并满足重写条件,但是也不会发生重写,因为静态方法是在编译的时候把静态方法和类的引用类型记性匹配。

(7)接口和抽象类的区别是什么?

(1)接口中的方法默认都是抽象方法,而抽象类只是该类包含抽象方法。
(2)类可以实现多个接口,但是只能继承一个抽象类 。
(3)抽象类可以在不提供抽象方法的实现的情况下实现接口。
(4)Java接口中声明的变量都是public final类型的,抽象类的成员变量无限制。
(5)Java接口中的抽象方法的访问权限都是public。

(8)什么是值传递?什么是引用传递?

值传递是对基本类型变量而言,传递的是该变量的一个副本,副本和元变量无任何关系。
而引用传递一般是对于对象型变量而言,传递的是该对象地址的一个副本,改变引用变量的值会影响到原始变量的值。

(9)进程和线程的区别是什么?

进程是执行着的应用程序,是操作系统资源分配和调度的基本单位,一个进程可以有多个线程。线程是CPU调用的基本单位。
进程之间的通信通过IPC机制,而线程之间的通信采用进程数据段(如全局变量)来进行通信。
线程之间的上下文切换要比进程快得多。

(10)创建线程有几种方式?你更喜欢哪一种?为什么?

有四种方式:
继承Thread类,重写run方法。
实现Runnable类,重写run方法。
实现Callable接口,Callable接口支持在线程运行过程中外界获取到该线程的运行信息。
使用Executor线程池来管理创建和分配线程。
我个人跟喜欢使用实现Runnable接口,因为Java机制中只允许单继承,但是允许多实现。同时,使用线程池也是非常高效的,管理起来十分方便。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值