Java面试大全(面向对象编程108题)

前言:

再网上看了很多的java面试题,有很多都是零零碎碎的,有或者是需要付费加密??的,加个vip什么的,故而以下是博主整理的有关java面试题的以下内容,我想以一种幽默风趣??的风格来给大家分享和探讨。另外附加有一些公司的面试真题(内部分享)下面我就开启??耳机模式。并且?是重要部分,要记易考噢。

1、什么是B/S架构么是C/S架构/strong>
Java面试大全(面向对象编程108题)

  1. JDK:java development kit:java开发工具包,是开发人员所需要安装的环境
  2. JRE:java runtime environment:java运行环境,java程序运行所需要安装的环境

4、Java语言有哪些特点/strong>

  1. 简单易学、有丰富的类库
  2. 面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高)
  3. 与平台无关性(JVM是Java跨平台使用的根本)
  4. 可靠安全
  5. 支持多线程

5、面向对象和面向过程的区别?

  1. 面向过程:

一种较早的编程思想,顾名思义就是该思想是站着过程的角度思考问题,强调的就是功能行为,功能的执行过程,即先后顺序,而每一个功能我们都使用函数(类似于方法)把这些步骤一步一步实现。使用的时候依次调用函数就可以了。

  1. 面向对象: 一种基于面向过程的新编程思想,顾名思义就是该思想是站在对象的角度思考问题,我们把多个功能合理放到不同对象里,强调的是具备某些功能的对象。

具备某种功能的实体,称为对象。面向对象最小的程序单元是:类。面向对象更加符合常规的思维方式,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性。
在软件工程上,面向对象可以使工程更加模块化,实现更低的耦合和更高的内聚。
6、什么是数据结构/strong>

计算机保存,组织数据的方式

7、Java的数据结构有那些/strong>
.

8、什么是OOP/strong>
Java面试大全(面向对象编程108题)

类的成员不写访问修饰时默认为 default。默认对于同一个包中的其他类相当于公 开(public),对于不是同一个包中的其他类相当于私有(private)。受保护 (protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私 有。Java 中,外部类的修饰符只能是 public 或默认,类的成员(包括内部类)的 修饰符可以是以上四种。

21、String 是最基本的数据类型吗/strong>

不是。Java 中的基本数据类型只有 8 个:byte、short、int、long、float、double、 char、boolean;除了基本类型(primitive type),剩下的都是引用类型(reference type),Java 5 以后引入的枚举类型也算是一种比较特殊的引用类型。

22、float f=3.4;是否正确/strong>

23、short s1 = 1; s1 = s1 + 1;有错吗hort s1 = 1; s1 += 1; 有错
吗/strong>
答:不正确。3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换 float f =(float)3.4; 或者写成 float f =3.4F;。

对于 short s1 = 1; s1 = s1 + 1;由于 1 是 int 类型,因此 s1+1 运算结果也是 int 型,需要强制转换类型才能赋值给 short 型。而 short s1 = 1; s1 += 1;可以正确 编译,因为 s1+= 1;相当于.1 =vip(short)(s1 +1);其中有隐含的强制类型转换。

24、重载和重写的区别
重写**(Override)**

从字面上看,重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(子类中方法的返回值是父类中方法返回值的子类时Java )都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。

原因: 在某个范围内的整型数值的个数是有限的,而浮点数却不是。
重写 总结: .

重载(Overload)
1.发生在父类与子类之间

2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同

3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)
则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载。

重载总结:
1.重载Overload是一个类中多态性的一种表现

2.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)

3.重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准
25、equals与==的区别

==: .

== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是

指相同一个对象。比较的是真正意义上的指针操作。
1、比较的是操作符两端的操作数是否是同一个对象。

2、两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。

3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:
.
int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆。

equals:

equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。

总结:

所有比较是否相等时,都是用equals 并且在对常量相比较时,把常量写在前面,因为使用object的 equals object可能为null 则空指针在阿里的代码规范中只使用equals ,阿里插件默认会识别,并可以快速修改,推荐安装阿里插件来排查老代码使用“==”,替换成equals

36、++i与i++的区别

i++:先赋值,后计算 ++i:先计算,后赋值

37、程序的结构有那些/strong>

顺序结构

选择结构

循环结构

38、数组实例化有几种方式/strong>
静态实例化:创建数组的时候已经指定数组中的元素,

动态实例化:实例化数组的时候,只指定了数组程度,数组中所有元素都是数组类型的默认值
39、Java中各种数据默认值

Byte,short,int,long默认是都是0

Boolean默认值是false
Char类型的默认值是’’
Float与double类型的默认是0.0
Java .
对象类型的默认值是null

40、Java常用包有那些/strong>

Java.lang

Java.io

Java.sql

Java.util

Java.awt

Java.net

Java.math

41、Object类常用方法有那些/strong>

Equals

Hashcode toString wait notify clone getClass

42、java中有没有指针/strong>

有指针,但是隐藏了,开发人员无法直接操作指针,由jvm来操作指针

43、java中是值传递引用传递/strong>

理论上说,java都是引用传递,对于基本数据类型,传递是值的副本,而不是值本身。对于对象类型,
传递是对象的引用,当在一个方法操作操作参数的时候,其实操作的是引用所指向的对象。
44、实例化数组后,能不能改变数组长度呢
不能,数组一旦实例化,它的长度就是固定的

45、假设数组内有5个元素,如果对数组进行反序,该如何做/strong>

创建一个新数组,从后到前循环遍历每个元素,将取出的元素依次顺序放入新数组中vip
46、形参与实参区别
实参(argument):
.
全称为”实际参数”是在调用时传递给函数的参数. 实参可以是常量、变量、表达式、函数等, 无论实参

是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应https://www预先用赋值,输入等办法使实参获得确定值。
形参(parameter):

全称为”形式参数” 由于它不是实际存在变量,所以又称虚拟变量。是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数.在调用函数时,实参将赋值给形参。因而,必须注意实参的个数,类型应与形参一一对应,并且实参必须要有确定的值。

形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。

形参和实参的功能是作数据传送。发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。

1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回

主调函数后则不能再使用该形参变量。

2.实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形

参。 因此应预先用赋值,输入等办法使实参获得确定值。

3.实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。

4.函数调用中发生的数据传送是单向的。 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值

发生改变,而实参中的值不会变化。

5.当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该

函数运行结束的时候形参被释放,而实参内容不会改变。

而如果函数的参数是指针类型变量,在调用该函数的过程中,传给函数的是实参的地址,在函数体内部使
用的也是实参的地址,即使用的就是实参

本身。所以在函数体内部可以改变实参的值。
47、构造方法能不能显式调用/strong>
不能,构造方法当成普通方法调用,只有在创建对象的时候它才会被系统调用
军 .
48、什么是方法重载/p>

方法的重载就是在同一个类中允许同时存在一个以上的同名方法,只要它们的参数个数或者类型不同即
可。在这种情况下,该方法就叫被重载了,这个过程称为方法的重载(override)
Java .
49、构造方法能不能重写不能重载/strong>
可以重载,但不能重写。

50、内部类与静态内部类的区别/strong>

静态内部类相对与外部类是独立存在的,在静态内部类中无法直接访问外部类中变量、方法。如果要访问的话,必须要new一个外部类的对象,使用new出来的对象来访问。但是可以直接访问静态的变量、调用静态的方法;

普通内部类作为外部类一个成员而存在,在普通内部类中可以直接访问外部类属性,调用外部类的方法。

如果外部类要访问内部类的属性或者调用内部类的方法,必须要创建一个内部类的对象,使用该对象访问属性或者调用方法。

如果其他的类要访问普通内部类的属性或者调用普通内部类的方法,必须要在外部类中创建一个普通内部类的对象作为一个属性,外同类可以通过该属性调用普通内部类的方法或者访问普通内部类的属性

如果其他的类要访问静态内部类的属性或者调用静态内部类的方法,直接创建一个静态内部类对象即可。

51、Static关键字有什么作用/strong>

Static可以修饰内部类、方法、变量、代码块

Static修饰的类是静态内部类

Static修饰的方法是静态方法,表示该方法属于当前类的,而不属于某个对象的,静态方法也不能被重写,可以直接使用类名来调用。在static方法中不能使用this或者super关键字。

Static修饰变量是静态变量或者叫类变量,静态变量被所有实例所共享,不会依赖于对象。静态变量在内存中只有一份拷贝,在JVM加载类的时候,只为静态分配一次内存。

Static修饰的代码块叫静态代码块,通常用来做程序优化的。静态代码块中的代码在整个类加载的时候只会执行一次。静态代码块可以有多个,如果有多个,按照先后顺序依次执行。

  1. 被fifinal修饰的类不可以被继承整理

  2. 被fifinal修饰的方法不可以被重写vip

  3. 被fifinal修饰的变量不可以被改变.如果修饰引用,那么表示引用不可变团,引用指向的内容可变.

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

  5. 被fifinal修饰的常量,在编译阶段会存入常量池中军…

StringBu?er是线程安全的,Stringbuilder是非线程安全的。所以Stringbuilder比stringbu?er效率更高,StringBu?er的方法大多都加了synchronized关键字

54、String str=”aaa”,与String str=new String(“aaa”)一样吗/strong>

一共有两个引用,三个对象。因为”aa”与”bb”都是常量,常量的值不能改变,当执行字符串拼接时候,会创建一个新的常量是” aabbb”,有将其存到常量池中。

55、讲下java中的math类有那些常用方法/strong>

Pow():幂运算 Sqrt():平方根 Round():四舍五入 Abs():求绝对值 Random():生成一个0-1的随机数,包括0不包括1
56、String类的常用方法有那些/strong>

charAt:返回指定索引处的字符 indexOf():返回指定字符的索引 replace():字符串替换 trim():去除
字符串两端空白 split():分割字符串,返回一个分割后的字符串数组 getBytes():返回字符串的byte类

型数组 length():返回字符串长度 toLowerCase():将字符串转成小写字母 toUpperCase():将字符串
转成大写字符 substring():截取字符串 format():格式化字符串 equals()整:字符串比较
57、Java中的继承是单继承还是多继承 .

Java中既有单继承,又有多继承。对于java类来说只能有一个父类,对于接口来说可以同时继承多个接口

58、Super与this表示什么?.

Super表示当前类的父类对象 This表示当前类的对象
59、普通类与抽象类有什么区别/strong>

普通类不能包含抽象方法,抽象类可以包含抽象方法 抽象类不能直接实例化,普通类可以直接实例化

60、什么是接口什么需要接口/strong>

接口就是某个事物对外提供的一些功能的声明,是一种特殊的java类,接口弥补了java单继承的缺点

61、接口有什么特点/strong>

接口中声明全是public static final修饰的常量 接口中所有方法都是抽象方法 接口是没有构造方法的 接口也不能直接实例化 接口可以多继承

62、抽象类和接口的区别/strong>

抽象类:

  1. 抽象方法,只有行为的概念,没有具体的行为实现。使用abstract关键字修饰,没有方法体。子类必须重写这些抽象方法。

SoftReference wrf = new SoftReference(new String(“str”));
可用场景: 创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。
弱引用
弱引用就是只要JVM垃圾回收器发现了它,就会将之回收,使用方式:

63、Hashcode的作用?

List
Set
set
的集合有两类,一类是 ,还有一类是 。前者有序可重复,后者无序不重复。当我们在 中插入的时候怎么判断是否已经存在该元素呢,可以通过equals方法。但是如果元素太多,用这样的方法就会比较满。军 . 于是有人发明了哈希算法来提高集合中查找发元素的效率。 这种方式将集合分成若干个存储区域,每个对象可以计算出一个哈希码,可以将哈希码分组,每组分别对应某个存储区域,根据一个对象的哈希码就可以确定该对象应该存储的那个区域。
hashCode方法可以这样理解:它返回的就是根据对象的内存地址换算出的一个值。这样一来,当集合研要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。
如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equ ls方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。
64、 ava的四种引用,强弱软虚
强引用
强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收,使用方式:
String str = new String(“str”);
软引用
软引用在程序内存不足时,会被回收,使用方式:
// 注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的,
// 这里的软引用指的是指向new String(“str”)的引用,也就是SoftReference类中

  1. 全部的方法都是抽象方法,属性都是常量

  2. 不能实例化,可以定义变量。

  3. 接口变量可以引用具体实现类的实例

  4. 接口只能被实现,一个具体类实现接口,必须实现全部的抽象方法

  5. 接口之间可以多实现

  6. 一个具体类可以实现多个接口,实现多继承现象

  7. 包含抽象方法的类,一定是抽象类。

  8. 抽象类只能被继承,一个类只能继承一个抽象类。接口:

WeakReferencewrf=newWeakReference(str);

可用场景:Java源码中的java.util.WeakHashMap中的key就是使用弱引用,我的理解就是,

一旦我不需要某个引用,JVM会自动帮我处理它,这样我就不需要做其它操作。

  • 来源:zgrjddd

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年2月6日
下一篇 2021年2月6日

相关推荐