文章目录提示: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提供了大量能使我们快速便捷地处理数据的函数和方法。



