## 1.1 基础知识
1. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。
Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
2. JDK和JRE的区别是什么?
Java运行时环境(JRE)。它包括Java虚拟机、Java核心类库和支持文件。它不包含开发工具(JDK)--编译器、调试器和其他工具。
Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。
3. ”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。
java中也不可以覆盖private的方法,因为private修饰的变量和方法只能在当前类中使用,如果是其他的类继承当前类是不能访问到private变量或方法的,当然也不能覆盖。
4. 是否可以在static环境中访问非static变量?
static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
5. Java支持的数据类型有哪些?什么是自动拆装箱?
Java支持的数据类型:int,byte,char,short,long,float,double,boolean
自动装箱:将包装类自动转换为对应的基本数据类型
自动装箱:将基本数据类型自动转化为对应的包装类
6. Java中的方法覆盖(Overriding)和方法重载(Overload)是什么意思?
Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同情况。
Java中的方法的覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它覆盖的方法的访问。
7. Java中,什么是构造方法?什么是构造方法重载?什么是复制构造方法?
8. 什么是值传递和引用传递
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身。一般认为Java内的基础类型数据传递都是值传递,Java中实例对象的传递是引用传递。
9. 进程和线程的区别是什么
进程是执行着的应用程序,而线程时进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。
10. 创建线程有几种不同的方式?
1. 继承Thread类
2. 实现Runnable接口
3. 实现程序可以使用Executor框架来创建线程池
4. 实现Callable接口
11. 线程的几种可用状态
新建(new)
可运行(runnable)
运行(running)
阻塞(block)
死亡(dead)
12. 同步方法和同步代码块的区别是什么
同步方法默认用this或者当前类class对象作为锁
同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法。
同步方法使用关键字synchronized修饰方法,而同步代码块主要是修饰需要进行同步的代码,用synchronized(object){代码内容}进行修饰。