java基础面试题
1. Java有哪些数据类型?
Java中有 8 种基本数据类型,分别为:6 种数字类型 (四个整数形,两个浮点型):byte、short、int、long、float、double,1 种字符类型:char,1 种布尔型:boolean。
2.什么是自动装箱拆箱?
装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。
3.基本数据类型和包装类型的区别?
1. 声明方式不同:基本类型不使用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;
2. 存储方式及位置不同:基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后通过引用来使用;
3. 初始值不同:基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null;
4. 使用方式不同:基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用到。
4.final 在 Java 中有什么作用?
final作为Java中的关键字可以用于三个地方。用于修饰类、类属性和类方法。
特征:凡是引用final关键字的地方皆不可修改!
(1)修饰类:表示该类不能被继承;
(2)修饰方法:表示方法不能被重写;
(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。
5.static都有哪些用法?
1、所有的人都知道static关键字这两个基本的用法:静态变量和静态方法.也就是被static所修饰的变量/方法都属于类的静态资源,类实例所共享.
2、除了静态变量和静态方法之外,static也用于静态块,多用于初始化操作。
3、最后一种用法就是静态导包,即 import static .import static是在JDK 1.5之后引入的新特性,可以用来指
定导入某个类中的静态资源,并且不需要使用类名,可以直接使用资源名
6.== 和 equals 的区别是什么?
对于基本类型和引用类型 == 的作用效果是不同的,如下所示:
基本类型:比较的是值是否相同;
引用类型:比较的是引用是否相同;
equals
equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。
总结
== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下
equals 比较的是值是否相等。
7.面向对象的特征
封装: 把描述一个对象的属性和行为的代码封装在一个模块中,也就是一个类中,属性用变量定义,行为用方法进行定义,方法可以直接访问同一个对象中的属性。
继承:子类继承父类的特征和行为。子类可以有父类的方法,属性(非private)。子类也可以对父类进行扩展,也可以重写父类的方法。
多态: 多态是同一个行为具有多个不同表现形式或形态的能力。覆盖和重载体现了多态性。
- 必须在继承体系下
- 子类必须要对父类中方法进行重写
- 通过父类的引用调用重写的方法
8. 多态现实意义理解:
现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。
Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。
1. 多态体现为父类引用变量可以指向子类对象。
2. 前提条件:必须有子父类关系。
9.Java创建对象有几种方式?
java中提供了以下四种创建对象的方式:
1.new创建新对象
2.通过反射机制
3.采用clone机制
4.通过序列化机制
10.Java 中操作字符串都有哪些类?它们之间有什么区别?
1.操作字符串的类有: String 、 StringBuffer 、 StringBuilder 。
2.String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象。
3.而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。
4.StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。
11. String 类的常用方法都有那些?
indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
getBytes():返回字符串的 byte 类型数组。
length():返回字符串长度。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字符。
substring():截取字符串。
equals():字符串比较。
12.Java有哪些数据类型
基本数据类型
- 整数类型(byte,short,int,long)
- 浮点类型(float,double)
- 字符型(char)
- 布尔型(boolean)
引用数据类型
- 类(class)
- 接口(interface)
- 数组([])
13.this关键字的用法
- this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。
- this的用法在java中大体可以分为3种:
- 1.普通的直接引用,this相当于是指向当前对象本身。
- 2.形参与成员名字重名,用this来区分:
- 引用本类的构造函数
14.super关键字的用法
super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。
super也有三种用法:
1.普通的直接引用
与this类似,super相当于是指向当前对象的父类的引用,这样就可以用super.xxx来引用父类的成员。
2.子类中的成员变量或方法与父类中的成员变量或方法同名时,用super进行区分
3.引用父类构造函数
- super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。
- this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。
15.static存在的主要意义
- static的主要意义是在于创建独立于具体对象的域变量或者方法。以致于即使没有创建对象,也能使用属性和调用方法!
- static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,
会按照static块的顺序来执行每个static块,并且只会执行一次。
3.为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。
16.面向对象的特征有哪些方面
- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽
象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
- 封装:把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界
访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个
类也没有什么意义了。
- 继承:是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功
能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前
的代码。
关于继承如下 3 点请记住:
子类拥有父类非 private 的属性和方法。
子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
子类可以用自己的方式实现父类的方法。(以后介绍)。
- 多态:父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。
在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖
接口中同一方法)。
17. 抽象类和接口的对比
- 声明方式:抽象类使用abstract关键字声明,接口使用interface关键字声明
- 实现方式:使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现;使用implements关键字来实现接口。它需要提供接口中所有声明的方法的实现
- 构造器:抽象类可以有构造器;接口不能有构造器访
- 访问修饰符:抽象类中的方法可以是任意访问修饰符;接口方法默认修饰符是public。并且不允许定义为 private 或者protected
- 多继承:一个类最多只能继承一个抽象类;一个类可以实现多个接口
- 字段声明:抽象类的字段声明可以是任意的;接口的字段默认都是 static 和 final的
接口和抽象类各有优缺点,在接口和抽象类的选择上,必须遵守这样一个原则:
- 行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量少用抽象类。
- 选择抽象类的时候通常是如下情况:需要定义子类的行为,又要为子类提供通用的功能。
18. 什么是值传递和引用传递?
值传递,是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
引用传递,一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身。
一般认为,Java 内的传递都是值传递,Java 中实例对象的传递是引用传递。