1. Java的特点有哪些

Java 语言是一种分布式的面向对象语言,具有

    面向对象、

    平台无关性、

    简单性、

    解释执行、

    多线程、

    安全性等很多特点

2. JDK和JRE和JVM的区别

JDK:java se development kit

jre:java runtime eviroment 

jvm:java virtual machine

3.

java面试题_字符串
 

4 引用数据类型分3种:类,接口,数组

基本数据类型:数据存储在 栈 中

引用数据类型:栈中存储地址,堆中存储内容

判断是否相等:

基本:++ !=

引用:equals()方法

==和!=是比较数值的。而equals()方法是比较内存地址的。

5. a=a+b与a+=b有什么区别吗?

+= 操作符会隐式的进行自动类型转换,此处a+=b隐式的将加操作的结果类型强制转换为持有结果的类型,而a=a+b则不会自动进行类型转换

+= 操作符会对右边的表达式结果强转匹配左边的数据类型

6. final 在 Java 中有什么作用?

final作为Java中的关键字可以用于三个地方。用于修饰类、类属性和类方法。

特征:凡是引用final关键字的地方都不可以改变!

(1)修饰类:表示该类不能被继承;

(2)修饰方法:表示方法不能被重写;

(3)修饰变量:表示变量赋值后不可修改(常量)。

(如果修饰引用,那么表示引用不可变,引用指向的内容可变

被final修饰的方法,JVM会尝试将其内联,以提高运行效率

被final修饰的常量,在编译阶段会存入常量池中)

7. static都有哪些用法?

修饰类:静态内部类,可以直接通过类来调用,而不需要new

修饰变量:静态变量,分配在内存堆上,所有实例都会指向这一个地址而不会重新分配内存

修饰方法:静态方法

也就是被static所修饰的变量/方法都属于类的静态资源,类实例所共享

修饰块:静态块,多用于初始化操作

 

修饰包:静态导包,可以用来指定导入某个类中的静态资源,并且不需要使用类名,可以直接使用资源名

8.==和equals()的区别

== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重写了equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下equals 比较的是值是否相等。

9.hashCode()

hashCode方法可以这样理解:它返回的就是根据对象的内存地址换算出的一个值。这样一来,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次

10. 面向对象的特征

抽风极多:抽象,封装,继承,多态

11.访问修饰符

 

java面试题_java_02
12.jdk 和 jre:
1. JDK 用于开发,JRE 用于运行java程序 ;如果只是运行Java程序,可以只安装JRE,无序安装JDK
2. JDk包含JREJDK JRE 中都包含 JVM
3. JVM Java 编程语言的核心并且具有平台独立性。

13.byte
byte 数据类型是8位、有符号的,以二进制补码表示的整数;
最小值是 -128-2^7
最大值是 1272^7-1
默认值是 0
byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四
分之一;
例子:byte a = 100byte b = -50

14. 什么是java序列化,

我们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,
要将java对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个java
对象变成某个格式的字节流再传输。

15.Java虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等

16. 多态体现为父类引用变量可以指向子类对象。

 
17.重写与重载
重写:
1.发生在父类与子类之间
2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同
3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
重载:
1.重载Overload是一个类中多态性的一种表现
2.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)
3.重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准
 
18.java中提供了以下四种创建对象的方式:new创建新对象通过反射机制采用clone机制
通过序列化机制

19. Java IO 流分为几种?
按功能
来分:输入流(input)、输出流(output)。
按类型来分:字节流和字符流


Java I0 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。
InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。


20. StringStringBufferStringBuilder区别
1、数据可变和不可变
 String 不可变
StringBuffer StringBuilder 可变
2、线程安全
StringBuilder 是线程不安全的,效率较高;而 StringBuffer 是线程安全的,效率较低
3、 相同点
操作可变字符串速度: StringBuilder > StringBuffer > Strin
 
可变性:String 类中使用 final 关键字字符数组保存字符串, private final char value[],所以 String 对象是不可变的。
    而 StringBuilder StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder中也是使用字符数组保存字符串 char[]value
    但是没有用 final 关键字修饰,所以这两种对象都是可变的。
线程安全性:String 中的对象是不可变的,也就可以理解为常量,线程安全。
      StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。
      StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。
性能:每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将
   指针指向新的 String 对象。 StringBuffer 每次都会对 StringBuffer 对象本身
  进行操作,而不是生成新的对象并改变对象引用。相同情况下使用
  StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,
  但却要冒多线程不安全的风险
使用总结:
1. 操作少量的数据 = String
2. 单线程操作字符串缓冲区下操作大量数据 = StringBuilder
3. 多线程操作字符串缓冲区下操作大量数据 = StringBuffer


21.& 和 && 的区别(2017-11-12-wl)
&运算符有两种用法: (1)按位与; (2)逻辑与。
&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是
true 整个表达式的值才是 true。

22. 阐述静态变量和实例变量的区别?
静态变量: 是被 static 修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不
管创建多少个对象,静态变量在内存中有且仅有一个拷贝;
实例变量: 必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对
象共享内存。

23.
&和&&的区别?
&运算符有两种用法:(1)按位与;(2)逻辑与(两边有一边是boolean的时候)
&&:短路与。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是
true 整个表达式的值才是 true。&&之所以称为短路运算是因为,如果&&左边的
表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。很多时候我
们可能都需要用&&而不是&


24、内存中的栈(stack)、堆(heap)和方法区(method area)
的用法
栈:变量,引用(保存 基本数据类型的变量,对象的引用,函数调用的现场)
堆:对象
方法区:常量,静态变量。保存 已经被JVM加载的  类信息,常量,静态变量,JIT编译器编译后的代码
程序中的字面量(literal)如直接书写的 100,“hello”和常量都是放在常量池中,常量池是方法区的一部分

25.math.round()
四舍五入的原理:在参数上加 0.5 然后进行下取整

26.java异常
java面试题_字节流_03

 

 error:程序无法处理的错误。代码运行时jvm出现的问题

 

exception:程序本身可以处理的异常。

Exception 类有一个重要子类 RuntimeExceptionRuntimeException 异常由 Java 虚拟机抛出。
NullPointerException(要访问的变量没有引用任何对象时,抛出该异常)、
ArithmeticException(算术运算异常,一个整数除以 0 时,抛出该异常)和
ArrayIndexOutOfBoundsException (下标越界异常)。

try:捕获异常

catch:处理异常

finally:无论是否捕获或处理异常, finally 块里的语句都会被执行

 

1. Java 中实现多态的机制是什么?
靠的是父类定义的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动
态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变
量的类型中定义的方法

2. 字符串的+操作其本质是创建了 StringBuilder 对象进行 append 操作,

3.java5大改动,加入了很多新东西

4.自动装箱/自动拆箱

java面试题_java_04

 

 

3.字符串和基本数据类型间的转化 

1)、 字符串如何转基本数据类型?
调用基本数据类型对应的包装类中的方法 parseXXX(String)或 valueOf(String)即可返回相应基本类型。
(2) 、基本数据类型如何转字符串?
一种方法是将基本数据类型与空字符串(“”)连接(+)即可获得其所对应的字符串;另一种方法是调用 String
类中的 valueOf()方法返回相应字符串。

3. 如何将一个 java 对象序列化到文件里
在 java 中能够被序列化的类必须先实现 Serializable 接口,该接口没有任何抽象方法只是起到一个标记作用。

4. 字节流和字符流的区别(2017-11-23-wzz)
字节流读取的时候,读到一个字节就返回一个字节; 字符流使用了字节流读到一个或多个字节(中文对应的字节
数是两个,在 UTF-8 码表中是 3 个字节)时。先去查指定的编码表,将查到的字符返回。 字节流可以处理所有类型数
据,如:图片, MP3, AVI 视频文件,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符
流,除此之外都用字节流。 字节流主要是操作 byte 类型数据,以 byte 数组为准,主要操作类就是 OutputStream、
InputStream

5. 如何实现对象克隆?
1). 实现 Cloneable 接口并重写 Object 类中的 clone()方法;
2). 实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆,


6.集合分类

 java面试题_字节流_05

 

 10. List a=new ArrayList()和 ArrayList a =new ArrayList()的区别?

List list = new ArrayList();这句创建了一个 ArrayList 的对象后把上溯到了 List。此时它是一个 List 对象了,有些
ArrayList 有但是 List 没有的属性和方法,它就不能再用了。

而 ArrayList list=new ArrayList();创建一对象则保留了
ArrayList 的所有属性。 所以需要用到 ArrayList 独有的方法的时候不能用前者。