面试相关-Java基础-基础知识

Java工程师知识树 / 面试相关


1、重载与重写的区别?

重载:发生在一个类里方法名必须相同,参数类型不同(参数类型不同包括:个数不同,顺序不同,类型不同),方法返回值与访问修饰符么有限制。

重写:发生在父子类中,方法名、参数列表必须相同;返回值返回需要小于或等于父类,比如父类返回值为List,之类返回值可以是ArrayList,但不能是Collection;抛出异常的范围也是小于或等于父类;但是,针对非private的访问修饰符范围大于或等于父类,而父类的访问修饰符为private时,子类不能重写该方法。

2、String,StringBuffer,StringBuilder的区别?String为什么是不可变的?

三者可通过可变性、线程安全性与性能三方面比较:

可变性:

String类中使用final关键字修饰字符数组保存字符串,private final char value[],所以String对象是不可变的,每次更改String都会创建一个新的String对象。

StringBuilderStringBuffer继承AbstractStringBuilder类,而AbstractStringBuilder也是使用char value[],但是没有使用final关键字修饰,所以这两种对象都是可变的。

线程安全性:

String中的对象是不可变的,也就是常量,是线程安全的。

AbstractStringBuilderStringBuilderStringBuffer的公共父类,定义了一些字符串的基础操作。

StringBuffer对方法加了同步锁或者对调用的方法加了同步锁(synchronized),所以StringBuffer对象是线程安全的。

StringBuilder并没有对方法加同步锁,所以是线程不安全的。

性能:

每次对String类型对象进行值变更时,都会生成一个新的String对象,然后将指针指向新的String对象。

StringBuffer每次都会对StringBuffer对象本地进行操作,而不会生成新的对象。相同情况下的StringBuilder相比使用StringBuffer仅能获取10%-15%左右的性能提升,但是却是线程不安全的。

使用场景:

1、更改操作少的字符串数据 = String

2、单线程操作字符串缓冲区下大量数据 = StringBuilder(线程不安全)

3、多线程操作字符串缓冲区下大量数据 = StringBuffer(线程安全)

String为什么是不可变的?

一、程序中对字符串操作太过频繁,以空间换时间,使用不可变对象可以增加程序效率;

二、程序中对集合有大量操作,字符串不可变可以更好的结合集合使用,比如实现Mapkey的唯一性。

3、自动装箱与自动拆箱

自动装箱:将基本数据类型用对应的引用类型包装类包装起来。intInteger对象

自动拆箱:将引用类型的包装类转换为基本数据类型。Integer对象转int

4、==与equals

equals方法为所有类父类Object类的方法,用于判断两个对象是否相等,在子类不重写equals方法的情况下,与==逻辑一致。重写equals,一般逻辑为判断两个对象的内容是否一致,也可以只判断对象的某几个属性。注:字符串String类的equals方法重写了,方法逻辑为比较字符串对象的值

==:用于判断两个对象的内存地址是否是相等,即判断两个对象是否是同一个对象。==针对基本数据类型比较的是值,引用数据类型比较的内存地址

5、final关键字理解

通过final修饰的类,方法,变量三方面理解

类:使用final修饰一个类时,表示该类不能被继承,并且类中的方法隐式的被指定final修饰。

方法:使用final修饰一个方法时,表示该方法被锁定,不能被重写从而影响方法的含义。使用private修饰符修饰的方法隐式的指定为final修饰。

变量:分两种,一修饰基本数据类型变量,则其数值一经初始化就不可再更改;二修饰引用类型变量,则对其初始化后便不能再让其指向另一个对象。

6、父子类加载顺序

  1. 先静态。具体是父类静态-->子类静态
  2. 先父后子。父类的全部-->子类的全部。
  3. 代码块的优先级:父类 > 子类;静态代码块> 非静态代码块> 构造函数
  4. 静态代码块与位置的前后有关系 ;
    非静态代码块与位置的前后有关系;
    构造函数与位置的前后无关系

7、Java中的异常处理

所有的异常都有一个父类java.lang.ThrowableThrowable有两个重要子类:Exception(异常)和Error(错误)。

Error:是程序无法处理的错误,表示运行的应用程序中较严重的问题。一般是JVM出现的问题。

Exception:是程序本身可以处理的异常,通过Java语言关键字try…catch…finally组合处理。

8、接口与抽象类的区别

在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

区别:

  1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
  2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
  3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
  4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
    注:JDK 1.8 以后,接口里可以有静态方法和方法体了。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容