栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA面试题总结——持续更新中

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA面试题总结——持续更新中

提示:JAVA面试题总结——持续更新

文章目录

前言一、Java基础

1. JAVA面向对象的特征?2.重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?3.阐述静态变量和实例变量的区别4.Java String类为什么是final的?5.String=“”与new String()的区别6.为什么函数不能根据返回类型来区分重载?7. String s=new String("abc") 创建了几个对象?8.String s = "Hello";s = s + " world!";这两行代码执行后,原始的 String 对象 中的内容到底变了没有?9.java 中操作字符串都有哪些类?它们之间有什么区别? 总结


前言

提示:以下是个人总结的java面试:

本文主要记录一些常见的java面试题和记录本人面试过程中遇到的面试题,帮助职场老人或者小白顺利找的心仪的工作


提示:以下是本篇文章正文内容,下面案例可供参考

一、Java基础 1. JAVA面向对象的特征?

封装:通过类来体现,将实体封装成类,其中包含属性和方法继承:类与类之间可以继承特点,使得代码重用 extends多态:通过传递给父类对象引用不同的子类从而表现出不同的行为抽象: 将一类实体的共同特性抽象出来,封装在一个抽象类中。 2.重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求。 3.阐述静态变量和实例变量的区别

在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。 4.Java String类为什么是final的?

为了实现字符串池为了线程安全为了实现String可以创建HashCode不可变性 5.String=“”与new String()的区别

    String a = “123”;String b = “123”;String c = new String(“123”);

1是存在常量储存区中的字符串常量池中,相同的字符串只会存在一个。3存储在堆中,每次new一个就会产生一个新的对象。1 在编译期间就会在内存中创建;3 在运行时在堆中创建
提示:下面案例可供参考1 == 2返回的结果为 true;1.equals(2)为true;1.equals(3)返回结果为true;1 == 3 返回结果为false; 6.为什么函数不能根据返回类型来区分重载?

因为调用时不能指定类型信息,编译器不知道你要调用哪个函数。 7. String s=new String(“abc”) 创建了几个对象?

答案是2个,大家肯定都知道。面试中经常出现的问题,今天分析一下。
1、 Sting s 定义了一个变量s,没有创建对象;
2、 = 赋值,将某个对象的引用(句柄)赋给s ,没有创建对象;
3、 “abc” 创建一个对象;
4、 new String()创建一个对象。 8.String s = “Hello”;s = s + " world!";这两行代码执行后,原始的 String 对象 中的内容到底变了没有?

没有。因为 String 被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s 原先指 向一个 String 对象,内容是 “Hello”,然后我们对 s 进行了“+”操作,那么 s 所指向的那个对象是否发生了改变呢?答案是没有,这时,s 不指向原来那个对象了,而指向了另一个 String 对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是 s 这个引用变量不再指向它了。 9.java 中操作字符串都有哪些类?它们之间有什么区别?

先看看 StringBuffer 和 StringBuilder 的类结构:

其实很简单,就是继承了一个抽象的字符串父
类:AbstractStringBuilder。

下面我们再来看看它们的三个区别

区别1:线程安全
StringBuffer:线程安全,StringBuilder:线程不安全。因为 StringBuffer 的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有 StringBuilder 修饰。

StringBuffer 代码片段:

@Override
public synchronized StringBuffer append(String str) {
    toStringCache = null;
    super.append(str);
    return this;
}

区别2:缓冲区
StringBuffer 代码片段:

private transient char[] toStringCache;

@Override
public synchronized String toString() {
    if (toStringCache == null) {
        toStringCache = Arrays.copyOfRange(value, 0, count);
    }
    return new String(toStringCache, true);
}

StringBuilder 代码片段:

@Override
public String toString() {
    // Create a copy, don't share the array
    return new String(value, 0, count);
}

可以看出,StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。
而 StringBuilder 则每次都需要复制一次字符数组,再构造一个字符串。
所以,缓存冲这也是对 StringBuffer 的一个优化吧,不过 StringBuffer 的这个toString 方法仍然是同步的。

区别3:性能
既然 StringBuffer 是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,StringBuilder 的性能要远大于 StringBuffer。

总结
所以,StringBuffer 适用于用在多线程操作同一个 StringBuffer 的场景,如果是单线程场合 StringBuilder 更适合。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785328.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号