Java面试题之OOP面试题基础
1. JavaOOP面试题
面试题一:什么是JDK?什么是JRE?
- JDK:java development kit:java开发工具包,是开发人员所需要安装的环境
- JRE:java runtime environment:java运行环境,java程序运行所需要安装的环境
面试题二:Java的数据结构有那些?
1.线性表(ArrayList)
2.链表(LinkedList)
3.栈(Stack)
4.队列(Queue)
5.图(Map)
6.树(Tree)
面试题三:类与对象的关系?
类是对象的抽象,对象是类的具体,类是对象的模板,对象是类的实例
面试题四:什么是隐式转换,什么是显式转换?
显示转换就是类型强转,把一个大类型的数据强制赋值给小类型的数据;隐式转换就是大范围的变量能够接受小范围的数据;隐式转换和显式转换其实就是自动类型转换和强制类型转换。
面试题五:Char类型能不能转成int类型?能不能转化成string类型,能不能转成double类型?
Char在java中也是比较特殊的类型,它的int值从1开始,一共有2的16次方个数据;
Char<int<long<float<double;Char类型可以隐式转成int,double类型,但是不能隐式转换成string;如果char类型转成byte,short类型的时候,需要强转。
面试题六:什么是拆装箱?
- 装箱就是自动将基本数据类型转换为包装器类型(int–>Integer);
- 拆箱就是自动将包装器类型转换为基本数据类型(Integer–>int)。
面试题七:一个java类中包含那些内容?
属性、方法、内部类、构造方法、代码块。
面试题八:面向对象的特征有哪些方面?
- 抽象:
抽象是将一类对象的共同特征总结出来构造类的过程。 - 继承:
继承是从已有类得到继承信息创建新类的过程. - 封装:
通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问 - 多态性:
多态性是指允许不同子类型的对象对同一消息作出不同的响应。
面试题九:String 是最基本的数据类型吗?
不是。Java 中的基本数据类型只有 8 个:byte、short、int、long、float、double、 char、boolean;除了基本类型(primitive type),剩下的都是引用类型(reference type),Java 5 以后引入的枚举类型也算是一种比较特殊的引用类型。
面试题十:重载和重写的区别?
重写总结:
1.发生在父类与子类之间
2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同
3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
重载总结:
1.重载Overload是一个类中多态性的一种表现
2.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)
3.重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准
面试题十一:equals与==的区别?
= =:
= = 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是
指相同一个对象。比较的是真正意义上的指针操作。
equals:
equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以
适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的
equals方法返回的却是==的判断。
面试题十二:数组实例化有几种方式?
- 静态实例化:创建数组的时候已经指定数组中的元素
- 动态实例化:实例化数组的时候,只指定了数组程度,数组中所有元素都是数组类型的默认值
面试题十三:Java中各种数据默认值?
Byte,short,int,long默认是都是0
Boolean默认值是false
Char类型的默认值是’’
Float与double类型的默认是0.0
对象类型的默认值是null
面试题十四:Object类常用方法有那些?
Equals
Hashcode
toString
wait
notify
clone
getClass
面试题十五:java中是值传递引用传递?
理论上说,java都是引用传递,对于基本数据类型,传递是值的副本,而不是值本身。对于对象类型,传递是对象的引用,当在一个方法操
作操作参数的时候,其实操作的是引用所指向的对象。
面试题十六:实例化数组后,能不能改变数组长度呢?
不能,数组一旦实例化,它的长度就是固定的
面试题十七:假设数组内有5个元素,如果对数组进行反序,该如何做?
创建一个新数组,从后到前循环遍历每个元素,将取出的元素依次顺序放入新数组中
面试题十八:构造方法能不能显式调用?
不能,构造方法当成普通方法调用,只有在创建对象的时候它才会被系统调用
面试题十九:构造方法能不能重写?能不能重载?
可以重载,但不能重写。
面试题二十:内部类与静态内部类的区别?
静态内部类相对与外部类是独立存在的,在静态内部类中无法直接访问外部类中变量、方法。如果要访问的话,必须要new一个外部类的对
象,使用new出来的对象来访问。但是可以直接访问静态的变量、调用静态的方法;
普通内部类作为外部类一个成员而存在,在普通内部类中可以直接访问外部类属性,调用外部类的方法。
如果外部类要访问内部类的属性或者调用内部类的方法,必须要创建一个内部类的对象,使用该对象访问属性或者调用方法。
如果其他的类要访问普通内部类的属性或者调用普通内部类的方法,必须要在外部类中创建一个普通内部类的对象作为一个属性,外同类可
以通过该属性调用普通内部类的方法或者访问普通内部类的属性
如果其他的类要访问静态内部类的属性或者调用静态内部类的方法,直接创建一个静态内部类对象即可。
面试题二十一:Static关键字有什么作用?
Static可以修饰内部类、方法、变量、代码块
Static修饰的类是静态内部类
Static修饰的方法是静态方法,表示该方法属于当前类的,而不属于某个对象的,静态方法也不能被重写,可以直接使用类名来调用。在static方法中不能使用this或者super关键字。
Static修饰变量是静态变量或者叫类变量,静态变量被所有实例所共享,不会依赖于对象。静态变量在内存中只有一份拷贝,在JVM加载类的时候,只为静态分配一次内存。
Static修饰的代码块叫静态代码块,通常用来做程序优化的。静态代码块中的代码在整个类加载的时候只会执行一次。静态代码块可以有多个,如果有多个,按照先后顺序依次执行。
面试题二十二:final在java中的作用,有哪些用法?
- 被final修饰的类不可以被继承
- 被final修饰的方法不可以被重写
- 被final修饰的变量不可以被改变.如果修饰引用,那么表示引用不可变,引用指向的内容可变.
- 被final修饰的方法,JVM会尝试将其内联,以提高运行效率
- 被final修饰的常量,在编译阶段会存入常量池中.
一般只要记住前三个即可。
面试题二十三:StringString StringBuffffer 和 StringBuilder 的区别是什么?
String:
String是只读字符串,它并不是基本数据类型,而是一个对象。从底层源码来看是一个fifinal类型的字符
数组,所引用的字符串不能被改变,一经定义,无法再增删改。每次对String的操作都会生成新的
String对象
StringBuffer和StringBuilder:
StringBuffer与StringBuilder都继承了AbstractStringBulder类,而AbtractStringBuilder又实现了CharSequence接口,两个类都是用来进行字符串操作的。在做字符串拼接修改删除替换时,效率比string更高。
StringBuffer与StringBuilder都继承了AbstractStringBulder类,而AbtractStringBuilder又实现了CharSequence接口,两个类都是用来进行字符串操作的。在做字符串拼接修改删除替换时,效率比string更高。
StringBuffer是线程安全的,Stringbuilder是非线程安全的。所以Stringbuilder比stringbuffer效率更高,StringBuffer的方法大多都加了synchronized关键字
面试题二十四: String类的常用方法有那些?
charAt:返回指定索引处的字符
indexOf():返回指定字符的索引
replace():字符串替换
trim():去除字符串两端空白
split():分割字符串,返回一个分割后的字符串数组
getBytes():返回字符串的byte类型数组
length():返回字符串长度
toLowerCase():将字符串转成小写字母
toUpperCase():将字符串转成大写字符
substring():截取字符串
format():格式化字符串
equals():字符串比较
面试题二十五:Super与this表示什么?
Super表示当前类的父类对象
This表示当前类的对象
面试题二十六:普通类与抽象类有什么区别?
普通类不能包含抽象方法,抽象类可以包含抽象方法
抽象类不能直接实例化,普通类可以直接实例化
面试题二十七:什么是接口?为什么需要接口?
接口就是某个事物对外提供的一些功能的声明,是一种特殊的java类,接口弥补了java单继承的缺点
面试题二十八:接口有什么特点?
接口中声明全是public static final修饰的常量
接口中所有方法都是抽象方法
接口是没有构造方法的
接口也不能直接实例化
接口可以多继承
面试题二十九:抽象类和接口的区别?
- 抽象类:
- 抽象方法,只有行为的概念,没有具体的行为实现。使用abstract关键字修饰,没有方法体。子类必须重写这些抽象方法。
- 包含抽象方法的类,一定是抽象类。
- 抽象类只能被继承,一个类只能继承一个抽象类
- 接口:
- 全部的方法都是抽象方法,属性都是常量
- 不能实例化,可以定义变量。
- 接口变量可以引用具体实现类的实例
- 接口只能被实现,一个具体类实现接口,必须实现全部的抽象方法
- 接口之间可以多实现
- 一个具体类可以实现多个接口,实现多继承现象。
面试题三十:&和&&的区别?
&是位运算符。&&是布尔逻辑运算符,在进行逻辑判断时用&处理的前面为false后面的内容仍需处理,用&&处理的前面为false不再处理后
面的内容。
面试题三十一:是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
不可以,静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,在调用静态方法时可能对象并没有被初始化。
本篇文章讲述的是OOP面试题,有点重点的基本都标注了,还有一些比较深入的问题就没写上去,因为深入的问题,对于初学者来说很少提问。以上文章如有侵权请联系本人删除
&spm=1001.2101.3001.5002&articleId=109850299&d=1&t=3&u=04f92121a25948ba88509ea968738b72)
535

被折叠的 条评论
为什么被折叠?



