Java基础【面试知识点总结】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuzhenya1994/article/details/79958452

1. 方法的重载(overload)和重写(Override)

判断方法重载的依据:1)必须是在同一个类中;2)方法名相同,方法中参数的类型、个数和顺序至少有一个不同;3)与方法的修饰符,返回值没有关系。

方法重写:如果子类对从父类继承的方法不满意,可以重写此方法。1)返回值类型,方法名,参数的类型和个数都要与从父类继承的方法相同,才叫方法的重写;2)子类中重写的方法不能缩小父类方法的访问权限,且不能抛出比父类方法更多的异常;3)关键字final修饰的方法不允许被覆盖(重写)。

2. 多态

多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量进行的方法调用在编译时并不确定,而是在程序运行期间才能确定(动态绑定)。实现多态的三个必要条件:【1】继承【2】重写父类方法【3】父类引用指向子类对象。

动态绑定(Dynamic binding):是指在程序执行期间判断所引用对象的实际类型,根据其实际的类型调用相应的方法。

父类的引用既可以指向父类的对象,也可以指向子类的对象。创建父类对象时,调用的方法为父类方法;创建子类对象时,调用的方法为子类重写的方法或者继承的方法。

3. Java和C++的区别

【1】Java是解释型语言,其运行过程:程序源代码经过Java编译器(compiler)编译成字节码,然后由JVM解释执行。C++是编译型语言,源代码经过编译和链接后生成可执行的二进制代码,可直接执行。因此,C++的执行速度比Java快。

【2】Java具有平台无关性,即对每种数据类型都分配固定长度的空间。而C++数据类型的大小与平台有关,同一种数据类型在不同的平台上会分配不同的字节数。

【3】与C++相比,Java语言中没有指针的概念,这有效防止了C++中因操作指针可能引起的系统安全问题。

【4】与C++相比,Java不支持多重继承,但引入了接口的概念,可以同时实现多个接口。

【5】在C++语言中,需要开发人员对内存的分配进行管理,包括申请和释放。而Java提供了垃圾回收器来实现垃圾的自动回收,不需要程序显示地管理内存的分配。

【6】与C++相比,Java不支持运算符重载、默认函数参数,没有预处理器,不提供goto语句,不支持自动强制类型转换,不包含struct和union类型。

4. static关键字

static是静态修饰符。在程序中任何变量或代码都是在编译时由系统自动分配内存来存储的,而所谓静态是指编译后所分配的内存会一直存在,直至程序退出才会释放此空间。

(1)static修饰变量

Java中被static修饰的变量称为静态变量或类变量,它为整个类所有,而不是某个对象所有,即被类的所有对象共享。静态变量可以使用类名直接访问,也可以使用对象名进行访问。

(2)static修饰方法

静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如果希望在静态方法中调用非静态变量或非静态方法,可以通过创建类的对象,通过对象来访问。

声明为static的方法不能以任何方式引用this或super。

在普通成员方法中,可以直接访问同类的非静态变量和静态变量。

可以直接使用类名调用静态方法。

(3)static修饰语句块

静态语句块只在类加载时执行,且只会执行一次。

(4)static修饰内部类

静态内部类不能直接访问外部类中的非静态成员。静态内部类可以独立于外部类,在创建内部类的对象前,不需要提前创建外部类的实例。

5. final关键字

(1)修饰类,该类不允许被继承。

(2)修饰方法,该方法不能被覆盖(重写),但可以被继承。

(3)修饰成员变量,该变量的值只能被赋值一次,即变为常量。

6. String.valueOf()

这个方法是静态的,可以通过类名(String)直接调用。该方法的内部实现:

public static String valueOf(Object obj){
    return (obj == null) ? "null" : obj.toString();
}

7. 字符串的indexOf()

Java的字符串中子串的查找共有四种方法:

【1】int indexOf(String str):返回第一次出现的指定子字符串在此字符串中的索引;

【2】int indexOf(String str, int startIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引;

【3】int lastIndexOf(String str):返回在此字符串中最右边出现的指定子字符串的索引;

【4】int lastIndexOf(String str, int startIndex):从指定的索引处开始向后搜索,返回在此字符串中最后一次出现的指定子字符串的索引。

8. StringBuilder类和StringBuffer类

StringBuilder和StringBuffer类似于String类,区别在于String类是不可改变的。

java.lang.StringBuffer用于创建线程安全的可变字符序列。java.lang.StringBuilder用于创建一个可变的字符序列,但不保证同步。

如果是多任务并发访问,就使用StringBuffer,因为在这种情况下需要同步以防止StringBuffer崩溃(线程安全)。而如果是单任务访问,使用StringBuilder会更有效(非线程安全)。

9. Java中String类能否被继承,这种设计有什么好处?

在Java中,String类是被final修饰的类,不能被继承。

【1】安全性

在Java类中,String被广泛用作方法的参数,比如打开网络连接时传递主机名和端口号作为参数,传递数据库URL用于连接数据库。在这些情况下,如果字符串是可变的,就可能导致安全问题。

不可变对象可以在多线程间共享,不需要任何同步处理(线程安全)。

【2】效率

缓存String的hashcode。在HashMap中,因为String是不可变的,一旦hashcode被缓存,在使用此字符串的hashcode时,就不用重新计算,这使得String作为key的HashMap更加高效。

总之,String被设计成不可变的主要目的是为了安全和高效。

10. Java中的Integer.parseInt(str),Integer.valueOf(str)以及toString()

【1】Integer.parseInt(str)将String类型转化为int类型

String str = "211";
int value = Integer.parseInt(str);

【2】Integer.valueOf(str)将String类型转化为Integer类型

String str = "985";
Integer inter = Integer.valueOf(str);
int value = inter.intValue();

【3】String.valueOf(inter)将Integer类型转化为String类型

Integer inter = new Integer(863);
String str = String.valueOf(inter);

【4】toString()将引用数据类型转化为String类型

Integer inter = new Integer(973);
String str = inter.toString();

 

阅读更多

没有更多推荐了,返回首页