Java面试大总结(01)

面试题库从网上百度而来。

解答完全是纯个人理解版,由于刚刚深入接触到Java开发,才学疏浅,希望内容中有错误的地方大家给予多多改正。

导读:

​​​​​1、面向对象都有哪些特性?谈一谈你对这些特性的理解?

2、访问权限修饰符(公共)public、private(私有)、protected(保护)、default(缺省)的区别。

3、JAVA中有没有goto语句?

4、& 和 &&的区别。

5、在Java中如何跳出当前的多重循环?

6、两个对象值相等(a.equals(b) == true),但是却有两个不同的hashCode。这句话对不对?

7、是否可以继承String类。

8、重载和重写的区别?

9、重载为什么与返回值类型无关。

10、char类型变量能否储存一个汉字,问什么?

11、抽象类和接口有什么区别。

12、静态变量和实例变量的区别。

13、==和equals的区别。

14、break和continue的区别。

15、java中是否可以包括多个类?有什么限制?

16、switch(e)语句中e的类型。

17、static方法内部是否可以对非static方法调用?

18、has-a和is-a


​​​​​1、面向对象都有哪些特性?谈一谈你对这些特性的理解?

封装:就是将数据和对数据的操作绑定起来,外界对数据的访问只能通过已定义的接口。通常来说我们编写的一个类就是对数据和对数据操作的封装。封装就是把能隐藏的东西都隐藏起来,对外界只提供简单的编程接口。

继承:就是从现有的类中得到继承信息派生出新的类。提供继承信息的类为父类(基类、超类),得到继承信息的类为子类。

多态:就是不同的子类型对象,调用相同的方法,做出了不同的反应。简单来说,就是相同的对象,调用了相同的方法,做出了不同的事情。多态又分为运行时多态,和编译时多态。运行时多态主要用到方法的重写,编译时多态主要用到方法的重载。

抽象:就是把一组对象的共同特征总结出来构造出新的类。包括行为抽象和数据抽象。

注:当说有三大特性时,没有抽象。只有封装、继承、多态。

2、访问权限修饰符(公共)public、private(私有)、protected(保护)、default(缺省)的区别。

public:      同类、子类、同包、其他包

protected:同类、子类、同包

default:    同类、同包

private:    同类

3、JAVA中有没有goto语句?

goto是Java的保留字,目前Java版本中没有此语句。

保留字扩展:const 也是保留字

保留字:无法被使用的关键字;也可以更广法说在系统类库中被赋予特殊意义的单词或者单词组合。

4、& 和 &&的区别。

&(逻辑与) 和&&(短路与)都是左右两边同时为真(true)时,整个运算才为真。

当&的左边为假(false)时,右边也需要判断真假。

当&&的左边为假时,右边会造成短路,不需要判断是真还是假。

扩展:&也有按位与的用法,即&两边的表达式不是boolean类型时。

5、在Java中如何跳出当前的多重循环?

在最外层循环前加个标记A,然后使用break A:即可跳出多重循环。

6、两个对象值相等(a.equals(b) == true),但是却有两个不同的hashCode。这句话对不对?

不对,如果两个对象值相等a.equals(b) == true,那么它们应该有相同的hashCode。

Java中对于equals方法和hashCode方法是这样规定的:1、当两个对象相同(equals方法返回true)那么他们的hashCode的值一定要相同。2、如果两个对象的hashCode相同,它们不一定相同。

7、是否可以继承String类。

不可以,因为String类被final修饰,不可被继承。

8、重载和重写的区别?

两者都是实现多态的方式,编译时多态由重载实现,运行时多态主要由重写实现。

重载:发生在一个类中,具有相同的方法名,参数列表不同(数据类型不同、参数个数不同),与返回值类型无关,与权限修饰符无关。

重写:发生在父类与子类之间的,具有相同的方法名,相同的参数列表,相同的返回值类型,子类权限修饰符,不能严于父类(也就是子类权限访问不能比父类被重写方法的访问权限低)

9、重载为什么与返回值类型无关。

因为调用时若不指定类型信息,编译器不知道要调用哪个函数。

简单来说返回值类型就是函数运行完之后的“状态”,虽然是方法的调用者和被调用者之间保持通信的关键,但是并不能作为方法的“标识”。

10、char类型变量能否储存一个汉字,问什么?

能,因为现在Java采用Unicode编码,而且char类型占两个字节,完全可以储存一个汉字。

Unicode:不选择任何特定的编码,使用字符在字符集中的编号,统一的唯一方法。 

11、抽象类和接口有什么区别。

版本一:

语法定义不同:抽象类abstract修饰,内部可以有抽象方法,也可以没有抽象方法;接口定义interface,实现类implements,内部变量用final static修饰,方法全部都是抽象方法。

概念不同:抽象类体现的是一种继承关系,父类和子类在概念上是一致的,是一种is-a的关系。接口并不要求接口的定义和实现类在概念上是一致的,类似是一种契约,has-a的关系。

设计模式不同:抽象类是对整个类体,包括行为和属性上进行抽象,而接口仅仅是对局部的行为进行抽象。抽象类是自底向上设计,接口是从顶向下设计的。

版本二:

不同:

抽象类:
1.抽象类中可以定义构造器
2.可以有抽象方法和具体方法
3.接口中的成员全都是 public 的
4.抽象类中可以定义成员变量
5.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法
6.抽象类中可以包含静态方法
7.一个类只能继承一个抽象类
接口:
1.接口中不能定义构造器
2.方法全部都是抽象方法
3.抽象类中的成员可以是 private、默认、protected、public
4.接口中定义的成员变量实际上都是常量
5.接口中不能有静态方法
6.一个类可以实现多个接口
相同:
1.不能够实例化
2.可以将抽象类和接口类型作为引用类型
3.一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要
被声明为抽象类

12、静态变量和实例变量的区别。

语法定义不同:静态变量用static修饰,实例变量不用其修饰

内存空间不同:静态变量在内存上只有一块内存空间,实现多个对象共享内存。实例变量每次创建实例对象,都会为其分配内存空间。

程序运行时不同:实例变量只有创建实例对象后,通过这个对象才能够使用实例变量。而静态变量直接通过  类名 .  直接使用静态变量。

补充:静态变量属于类,是变量,不属于任何一个对象。

13、==和equals的区别。

== 在比较基本数据类型时,比较的是值;在比较引用型数类型时比较的是地址

equals 不能作用基本数据类型的变量;如果没用重写equals方法,那么比较的引用型数据变量指向的对象的地址,若重写equals方法则比较的是两个对象的内容是否相等

14、break和continue的区别。

break:跳出本层循环,执行本层循环以外的语句。

continue:不跳出本层循环,跳出本次循环,执行下次循环。

15、java中是否可以包括多个类?有什么限制?

可以有多个类,,但是只能有一个public的类,而且public的类名必须和文件名相同。

16、switch(e)语句中e的类型。

整数表达式或者枚举常量,

整数表达式:int类型或者integer类型,还有可以转换成int类型的byte,short,char,java7之后String可用。

枚举常量:一般使用enum关键字定义的

17、static方法内部是否可以对非static方法调用?

不可以,非static要与对象连在一起使用,即创建对象后,必须通过这个对象对方法实现调用,而static方法,不需要创建实例对象就可以直接调用。

18、has-a和is-a

has-a:表示组合,包含关系,,例如:兔子有腿,有鼻子

is-a:表示属于关系,,例如:兔子属于一种动物(继承)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值