2021-08-17

@[面向对象]Java
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言这里为大家罗列出来几个常见的面向对象的面试题,欢迎大家来参观

这里为大家罗列出来几个常见的面向对象的面试题,欢迎大家来参观


提示:以下是本篇文章正文内容


正文

提示:这里对文章进行总结:

1.面向对象. final 在 java中有什么作用 ?

 - final 修饰的类叫最终类,该类不能被继承。
 - final 修饰的方法不能被重写。
 - final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

2.重载和重写的区别 ?

	重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
	重写:重写指的是在Java的子类与父类中有两个名称、参数列表都相同的方法的情况。 由于他们具有相同的方法签名,所以子类中的新方法将覆盖父类中原有的方法。

3.Java 面向对象编程三大特性 ?

	封装:: 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法, 如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。
	继承:继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加 新的数据或新的功能,也可以用父类的功能,通过使用继承我们能够非常方便地复用以前的代码。
	多态:多态就是同一个接口,使用不同的实现,而执行不同的操作。多态的三个必要条件:继承(extends),重写(子类重写父类的同名方法),父类引用指向子类的对象。

4.谈谈final、finally、finalize的区别?

final:类不能被继承,没有子类,final类中的方法默认是final的。
final:不能用于修饰构造方法。
final:成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final:方法不能被子类的方法覆盖,但可以被继承。
finally:是关键字,在异常处理中,try子句中执行需要运行的内容,catch子句用于捕获异常,finally子句表示不管是否发生异常,都会执行。finally可有可无。但是try…catch必须成对出现。
finalize:方法名,Object类的方法。

5.String StringBuffer 和 StringBuilder 的区别 是什么 String 为什么是不可变的 ?

	String:String类是一个不可变类,即创建String对象后,该对象中的字符串是不可改变的,直到这个对象被销毁。
	StringBuffer和StringBuilder:在AbstractStringBuilder中也是使用字符数组保存字符串,是可变类。

 总结:
 StringBuffer与StringBuilder都提供了一系列插入、追加、改变字符串里的字符序列的方法,它们的用法基本相同,只是StringBuilder是线程不安全的,StringBuffer是线程安全的。如果只是在单线程中使用字符串缓冲区,则StringBuilder的效率会高些,但是当多线程访问时,最好使用StringBuffer。
 
 综上所述:
 在执行效率方面,StringBuilder最高,StringBuffer次之,String最低,对于这种情况,一般而言,如果要操作的数量比较小,应优先使用String类;如果是在单线程下操作大量数据,应优先使用StringBuilder类;如果是在多线程下操作大量数据,应优先使用StringBuilder类。

6. 谈谈Java抽象类与接口的区别?

	抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。
	抽象类的特点:

		a、抽象类不能被实例化只能被继承;
		
		b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;
		
		c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;
		
		d、一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类;
		
		e、抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。
 
     接口:Java中接口使用interface关键字修饰
     接口的特点:
        a、接口可以包含变量、方法;变量被隐士指定为public static final,方法被隐士指定为public abstract(JDK1.8之前);

		b、接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题;

 		c、一个类可以实现多个接口;
相同点

(1)都不能被实例化 (2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。

不同点

(1)接口只有定义,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。

(2)实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。

(3)接口强调特定功能的实现,而抽象类强调所属关系。

(4)接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是publicabstract的。抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被privatestaticsynchronizednative等修饰,必须以分号结尾,不带花括号

7. 成员变量与局部变量的区别有那些 ?

成员变量与局部变量的区别

1、在类中的位置不同

成员变量:在类中方法外面

局部变量:在方法或者代码块中,或者方法的声明上(即在参数列表中)

2、在内存中的位置不同,可以看看Java程序内存的简单分析

成员变量:在堆中(方法区中的静态区)

局部变量:在栈中

3、生命周期不同

成员变量:随着对象的创建而存在,随着对象的消失而消失

局部变量:随着方法的调用或者代码块的执行而存在,随着方法的调用完毕或者代码块的执行完毕而消失

4、初始值

成员变量:有默认初始值

局部变量:没有默认初始值,使用之前需要赋值,否则编译器会报错

8. == 与 equals ?

       = : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同 一个对象。(基本数据类型比较的是值,引用数据类型比较的是内存地址)
equals() : 类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个 对象时,等价于通过==比较这两个对象。 类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来 两个对象的内容相等;若它们的内容相等,则返回 true 。

9.对象的相等与指向他们的引用相等,两者有什么 不同?

对象的相等是指对象所存储的内容是否相等,引用相等是指引用所指向的地址是否相等。

10.对象的四大引用?

  	强引用(Strong Reference)

		强引用表示一个对象处在【有用,必须】的状态,是使用最普遍的引用。如果一个对象具有强引用,那么垃圾回收器绝不会回收它。就算在内存空间不足的情况下,Java虚拟机宁可抛出OutOfMemoryError错误,使程序异常终止,也不会通过回收具有强引用的对象来解决内存不足的问题。
Student student = new Student(); // 这就是强引用
软引用(Soft Reference)

软引用表示一个对象处在【有用,但非必须】的状态。在内存空间足够的情况下,如果一个对象只具有软引用,那么垃圾回收器就不会回收它,但是如果内存空间不足,垃圾回收器就会回收这个对象(回收发生在OutOfMemoryError错误之前)。只要垃圾回收器没有回收它,这个对象就能被程序使用。

软引用可以用来实现内存敏感的高速缓存。

软引用可以和一个引用队列(Reference Queue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中,以便在恰当的时机将该软引用回收。但是由于GC线程的优先级较低,通常手动调用System.gc()并不能立即执行GC,因此软引用所引用的对象并不一定会被马上回收。
Student student = new Student();
SoftReference softReference = new SoftReference(student);
弱引用(Weak Reference)

弱引用表示一个对象处在【可能有用,但非必须】的状态。类似于软引用,但是强度比软引用更弱一些:只具有弱引用的对象拥有更短暂的生命周期。GC线程在扫描它所管辖的内存区域的过程中,一旦发现只具有弱引用的对象,就会回收掉这些被弱引用关联的对象。也就是说,无论当前内存是否紧缺,GC都会回收被弱引用关联的对象。不过,由于GC是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

弱引用同样可以和一个引用队列(Reference Queue)联合使用,如果弱引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。
Student student = new Student();
WeakReference weakReference = new WeakReference(student);
虚引用(Phantom Reference)

虚引用表示一个对象处在【无用】的状态。这意味着虚引用等同于没有引用,在任何时候都可能被GC回收。设置虚引用的目的是为了被虚引用关联的对象在被垃圾回收器回收的时候,能够收到一个系统通知(用来跟踪对象被GC回收的活动)。

虚引用和弱引用的区别在于:虚引用的使用必须和引用队列(Reference Queue)联合使用。
ReferenceQueue referenceQueue = new ReferenceQueue();
PhantomReference phantomReference = new PhantomReference(object, queue);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值