0
点赞
收藏
分享

微信扫一扫

12 Java程序员面试宝典视频课程之面向对象

鱼板番茄 2022-01-09 阅读 96

一、简述面向对象和面向过程的区别和联系?
答:
两者都是软件开发思想,先有面向过程,后有面向对象。在大型项目中,针对面向过程的不足推出了面向对象开发思想
区别
编程思路不同:
面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完成功能
封装性:
都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据
和功能。面向对象具有继承性和多态性,而面向过程没有继承性和多态性;

二、对象和类的关系是?
答:
类是抽象的
对象是具体的,是类抽象概念的实物表达

三、栈的特点是?存放什么内容?
答:
栈的特点:
先进后出
存放什么内容
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。
image_1c9ffdh3d1s49eo51v2ibf61ohum.png-85.4kB
四、堆得特点是?存放什么内容?
答:
堆内存的特点:
堆内存有内存地址,都是将内存的地址赋值给引用变量
堆内存变量无用后由垃圾回收机制不定时回收
堆内存会自动初始化
存放什么内容
堆内存存放引用数据类,及 new 出来的都在堆内存里面
image_1c9ffdd6f1ekdanrj9c10p819mo9.png-85.4kB

五、局部变量、成员变量、静态变量分别怎么声明?
答:
局部变量:
在方法或代码块中声明的变量称为局部变量
成员变量:
在类中声明的变量称为成员变量
静态变量:
使用 static 修饰的成员变量称为静态变量

六、局部变量使用之前,必须要手动初始化吗?
答:
局部变量在使用之前,必须要手动初始化

七、如果不手动指定成员变量的值,系统将会自动初始化。那么初始化的规则是?
答:
整型初始化为 0
浮点型初始化为 0.0
引用数据类型初始化为 null
boolean 类型初始化为 false
char 类型的初始化为\u0000

八、成员变量属于谁?静态变量又叫什么属于谁?局部变量属于谁?
答:
成员变量
从属于对象
静态变量
又叫类变量从属于类
局部变量
从属于方法或代码块

九、构造方法的作用是两个:一个构造类的对象,另一个作用是初始化对象的属性。这种说法对不?
答:

十、构造方法的名称必须保持跟类名一致吗?
答:
是的,必须与类名一致;

十一、构造方法有没有返回值?
答:
构造方法没有返顺值,也不可以写 void 关键字

十二、构造方法如何被调用?
答:
构造方法在创建对象时被调用,使用关键字 new

十三、构造方法中能不能有 return 语句?
答:
构造方法中不能使用 return 关键字以及语句;

十四、系统一定会给我们添加无参数的构造方法吗?
答:
如果手动编写了构造方法之后,系统就不会添加无参构造方法了,直接覆盖自带的无参的构造方法

十五、下面的代码有什么问题?
public class Person {
private String name;
private Integer age;
public Person(String name, Integer age) {
super();
name = name;
age = age;
}
}
答:
当局部变量名称与成员变量名称相同时,使用this代表成员变量
正确代码为:

public class Person {
private String name;
private Integer age;
public Person(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
}
十六、Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
答:
1、Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况
2、方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。

十七、构造方法能不能重载?
答:
构造方法可以重载

十八、this 在普通方法中,指的是哪个对象?
答:
普通方法:
指向调用该方法的对象

十九、this 在构造方法中,指的是?
答:
构造方法:
指向正要初始化的对象

二十、static 关键字是什么意思?
答:
表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问

二十一、static 变量在内存中放置在哪个区?
答:
static 变量存在数据区;

二十二、static变量和方法为什么被称为类变量和类方法?
答:
static 变量和方法归类所有,使用类名去调用;

二十三、static 变量可以被该类所有对象共享吗?
答:
可以被该类的所有对象所共享;

二十四、可以在static环境中访问非static变量?
答:
不可以
1、static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。
2、如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来

二十五、静态初始化块和 main 方法哪个先被执行?
答:
静态初始化块先执行

二十六、一个构造方法调用另一个构造方法怎么调用?this(),这样的调用方式必须位于第一句吗?
答:
this()调用本类的无参构造方法
this(实参列表)调用本类的带参构造方法
super()调用直接父类的无参构造方法
super(实参列表)调用直接父类的带参构造方法
this()调用必须位于构造方法的第一句

二十七、package 的两个作用是什么?
答:
解决类之间的重名问题
为了便于管理类:合适的类位于合适的包

二十八、import 是用于导入包还是导入类?
答:
import 是用于导入其它包中的类

二十九、import Java.util.*; 会不会降低程序运行速度?为什么?
答:
不会降低程序的运行速度
因为是导入该包下的所有的类,会降低编译速度

三十、import static静态导入的作用是导入类还是导入类的静态属性和静态方法
答:
导入类的静态属性和静态方法

三十一、如果同时导入:Java.util.Date;Java.sql.Date;在程序中怎么区分它们?
答:
只能用包名+类名来显示调用相关类
java.util.Date date=new java.util.Date();

三十二、面向对象中的封装,追求的是"高内聚,低耦合"。解释一下,内聚什么?什么叫耦合?
答:
内聚:程序内的各个模块之间的关系紧密程度
耦合:外部程序(子程序)之间的关系紧密程度

三十三、封装的几个关键字:private,default,protected,public的含义。代表的是访问权限
答:
private:私有的,只能本类访问
default:默认的,本类,子类,本包中的其它类都可以访问
protected:受保护的,本类,本包及其它包中的子类可以访问
public:公共的,本类,子类,本包及其它中的类都可以访问

三十四、一般属性是否要设置为 private?
答:
是, 属性就不能被赋值上任何非法的值了

三十五、如果属性设置为 private,如何让外部访问该属性?
答:
编写公有的取值的 get 方法

三十六、Java中是否可以覆盖(override)一个private或者是static的方法?
答:
1、Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关
2、Java中也不可以覆盖private的方法,因为private修饰的变量和方法只能在当前类中使用,如果是其他的类继承当前类是不能访问到private变量或方法的,当然也不能覆盖。

三十七、提供 getter、setter 方法的操作,eclipse 中如何实现?
答:
鼠标右键菜单栏>Source>Generate getters and setters

三十八、对于 boolean 类型的属性,提供的 getter 方法是:getXXX 或是 isXXX?
答:
isXXX

public boolean isBoo() {
    return boo;
}

三十九、Javabean 就是只包含属性和相关getter、setter方法,不包含业务逻辑处理的类,这种说法对吗?
答:
不对
Javabean 既可以封装数据同时也可以封装业务逻辑

四十、继承的好处是什么?
答:
继承的本质在于抽象。类是对,对象的抽象,继承是对某一批类的抽象
为了提高代码的复用性

四十一、Java 中有多继承吗?单继承相比多继承优势在什么地方?
答:
java 中类只有单继承;接口可以多继承
使用单继承有利于系统的维护,使得类与类之间的关系简单

四十二、定义某个类时,如果没有使用 extends,那么继承了哪个类?
答:
如果没有使用 extends,那么继承了 Object 类

四十三、Java 中,类有没有多继承? 为什么取消了多继承?
答:
java 中没有多继承
使用单继承有利于系统的维护,使得类与类之间的关系简单

四十四、重写(override)指的是什么?
答:
指的是子类对父类中方法的重写

四十五、父类有main方法,请问子类能不能继承mian方法?
答:
不能 因为main方法属于主函数并且是静态的

四十六、Object 是所有类的根类吗?是所有类的直接父类吗?
答:
Object 是所有类的根类
不是所有类的直接父类

四十七、Object 类中的 toString 方法能否被子类重写?
答:

四十八、封装的定义和好处有哪些?
答:
1、封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据
好处:
1、通过隐藏对象的属性来保护对象内部的状态。
2、提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。
3、禁止对象之间的不良交互提高模块化。
4、提高了代码的重用性,封装成工具类以后能够减少很多繁琐的步骤

四十九、super 指的是什么?
答:
super 指的是直接父类

五十、构造方法中,第一个话总是 super 吗?
答:
不,也可以是 this();

五十一、继承的定义?
答:
1、继承给对象提供了从基类获取字段和方法的能力。
2、继承提供了代码的重用行,也可以在不修改类的情况下给现存的类添加新特性。

五十二、有继承结构时,构造方法的调用顺序?
答:
1、如果子类的构造方法中没有通过 super 显式调用父类的有参构造方法,也没有通
过 this 显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。
2、如果子类的构造方法中通过 super 显式调用父类的有参构造方法,那将执行父类
相应构造方法,而不执行父类无参构造方法。
3、特别注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次;向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止。

五十三、重写中,子类的返回值类型可不可以跟父类不完全一致?说出你的理由。
答:
可以
子类的返回值可以与父类相同,也可以是父类方法返回值的子类

五十四、如何判断两个对象内容是否相同?重写 equals()有什么要求?
答:
判断两个对象的内容是否相同,需要重写 Object 类的 equals 方法

@Override
public boolean equals(Object obj) {
Test18 d1 = null;
if (obj instanceof Test18) {//如果传进来的对象是D1的子类那么就对属性做比较
d1 = (Test18) obj;
if (d1.name == name && d1.age == age)
return true;
else
return false;
}else
return false;
}
五十六、多态的的定义与三个必要条件是什么?
答:
1、多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。
2、一个多态类型上的操作可以应用到其他类型的值上面。
3、继承 方法重写 父类引用指向子类对象

五十七、什么是向上转型?什么是向下转型?
答:
向上转型:
AA aa=new BB();//父类应用指向子类的实例/向上转型之后,子类自有的属性和方法不可见
向下转型:(先发生向上在发生向下)
AA a = new BB();//同过强制转换,将被父类类型所引用的子类类型,转换为实际的子类,类型.注意引用类型要与引用对象类型相同
BB er = (BB)a;//(BB)a强制转换.将父类强制转换子类

五十八、多态的常用使用场合有哪些?
答:
使用父类做方法的形参,实参可以是该父类的任意子类类型
使用父类做方法的返回值类型,返回值可以改父类的任意子类对象

五十九、Java 的方法绑定采用动态绑定还是静态绑定?
答:
静态方法,构造器,private 方法,用关键字 super 调用的方法是静态绑定
通过对象调用的方法,采用动态绑定

六十、final 修饰变量、方法、类分别表示什么含义?
答:
final 修饰的变量不可改变,一旦赋了初值,就不能被重新赋值,称为常量
final 修饰的方法不能被子类重写
final 修饰的类不能有子类

六十一、final 修饰的方法能不能被重载?能不能被重写?
答:
final 修饰的方法可以重载
final 修饰的方法不能重写

六十二、String 类能不能被继承?为什么?
答:
String 类不能被继承
因为 String 类是使用 final 修饰的类

六十三、包含抽象方法的类是抽象类吗? 抽象类一定包含抽象方法吗?
答:
包含抽象方法的类是抽象类
抽象类中不一定含有抽象方法

六十四、面向对象软件开发的优点有哪些?
答:
1、代码开发模块化,更易维护和修改。
2、代码复用。
3、增强代码的可靠性和灵活性。
4、增加代码的可理解性
5、面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象。

六十五、抽象的定义?
答:
1、抽象是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类。
2、Java支持创建只暴漏接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。

六十六、抽象和封装的不同点?
答:
1、抽象关注对象的行为;封装关注对象行为的细节。
2、一般是通过隐藏对象内部状态信息做到封装,因此封装可以看成是用来提供抽象的一种策略。

六十七、抽象类中能不能有普通方法?能不能定义构造方法?
答:
抽象类中可以有普通方法
抽象类中可以定义构造方法

六十八、抽象类能不能被 new 出来?即抽象类的构造方法能不能被调用?
答:
抽象类不能被 new 出来
抽象类的构造方法能被子类调用

六十九、接口中只能定义常量和抽象方法吗?
答:
JDK1.7 之前,接口中只能定义静态常量和公共的抽象方法
JDK1.8 中,接口中可以定义静态方法

七十、接口中的常量一定是 public static final吗?抽象方法一定是public abstract吗?
答:
是的

七十一、接口中能不能定义普通变量,普通方法?从设计接口的角度说明为什么这么做?
答:
接口中不能定义普通变量,也不能定义普通方法
因为接口就是一种规范,定义一种规则

七十二、接口能不能被 new?
答:
接口不能被 new

七十三、接口中有没有多继承?
答:
接口中有多继承

七十四、一个类能不能实现多个接口?
答:
可以实现多接口

七十五、接口和抽象类的区别是什么?
答:
1、接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
2、类可以实现很多个接口,但是只能继承一个抽象类
3、类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
4、Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量
5、Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
6、接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化;

七十六、GC 指的是什么?垃圾回收机制中,程序员能不能调用垃圾回收器?
答:
GC:是指垃圾回收
程序员无权调用垃圾回收器

七十七、System.gc()指的是什么意思?
答:
运行垃圾回收器

七十八、finalize 方法可以用来做什么?
答:
是在垃圾收集器删除对象之前对这个对象进行调用
从内存中清除出去前,做必要的清理工作

七十九、Java中,对象什么时候可以被垃圾回收?
答:
当对象对当前使用这个对象的应用程序变得不可触及的时候,这个对象就可以被回收了。

举报

相关推荐

0 条评论