面试题-java


基础概念

什么是java?

Java是一门面向对象编程语言

什么是面向对象?

在面向对象这个概念之前,编程是面向过程的

面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。

面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现。

举个最简单点的例子来区分面向过程和面向对象,有一天你想吃鱼香肉丝了,怎么办呢?你有两个选择

  1. 自己买材料,肉,鱼香肉丝调料,蒜苔,胡萝卜等等然后切菜切肉,开炒,盛到盘子里。
  2. 去饭店,张开嘴:老板!来一份鱼香肉丝!

1是面向过程,2是面向对象。

java三大特性

封装、继承、多态

封装就是把对象的属性和操作结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。常见的set、get就是封装这个思想在开发时的应用。

继承就是子类继承父类的属性和方法,当然,如果在父类中拥有私有属性(private修饰),则子类是不能被继承的。

多态(重写,重载)

多态是同一个行为具有多个不同表现形式或形态的能力。

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。

重载指在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

this,super关键字

  1. super()关键字的用法
    子类的成员方法中,访问父类的成员变量。
    子类的成员方法中,访问父类的成员方法。
    子类的构造方法中,访问父类的构造方法。

  2. this关键字用法:
    本类成员方法中,访问本类的成员变量。
    本类成员方法中,访问本类的另一个成员方法。
    本类的构造方法中,访问本类的另一个构造方法。

注意:

  1. this关键字同super一样,必须在构造方法的第一个语句,且是唯一的。
  2. this与super不能同时存在。

抽象类、接口

抽象类abstract

[public] abstract class ClassName {
    abstract void fun();
}

接口

[public] interface InterfaceName {
    void fun();
}

共同点

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

区别

  1. 接口只有定义,不能有方法的实现
  2. 实现接口的关键字为implements,继承抽象类的关键字为extends。
  3. 一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。
  4. 接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public、abstract的。抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;
  5. 抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。

多个接口之间是继承关系。多个父接口当中默认方法如果重复,那么子接口必须进行默认方法的覆盖重写。

抽象类能使用 final 修饰吗?

不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类,如下图所示,编辑器也会提示错误信息:

==和equals

==比较引用对象,如果双方指向同一个引用对象,则为true。
equals比较值。

equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。

final关键字

final 修饰的类叫最终类,该类不能被继承。

final 修饰的方法不能被重写。

final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

数据类型

基础类型有 8 种:byte、boolean、char、short、int、float、long、double。

字符串

String str="i"与 String str=new String("i")一样吗?

不一样,因为内存的分配方式不一样。String str="i"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String("i") 则会被分到堆内存中。

字符串反转

stringBuffer的reverse()方法。

String 类的常用方法

indexOf():返回指定字符的索引。

charAt():返回指定索引处的字符。

replace():字符串替换。

trim():去除字符串两端空白。

split():分割字符串,返回一个分割后的字符串数组。

getBytes():返回字符串的 byte 类型数组。

length():返回字符串长度。

toLowerCase():将字符串转成小写字母。

toUpperCase():将字符串转成大写字符。

substring():截取字符串。

equals():字符串比较。

posted @ 2023-02-05 20:36  对CSDN使用炎拳吧  阅读(9)  评论(0编辑  收藏  举报