前期
马上进入金九银十的季节,很多公司岗位需求旺盛,会吸收很多全职和实习岗,那能不能把握这次机会还是看自己,虽然今年比较艰难,每个行业都很卷,但还是要自我做好准备随时战斗,不能松懈,为此整理了一系列的秋招经典的面试题,希望对大家有帮助,不必焦虑不必担忧不要停下学习的脚步。
1、java中break、continue、return 跳转语句的不同?
1、break:跳出循环而执行循环后面的语句
2、continue:跳过循环体中剩余的语句而执行下一次循环
3、return 结束方法的调用.
2、成员变量和局部变量的区别是什么?
作用域不同 :
局部变量的作用域仅限于定义它的方法
成员变量的作用域在整个类内部都是可见的
初始值不同 :
Java 会给成员变量一个初始值
Java 不会给局部变量赋予初始值
3、JAVA 中包的作用是什么?
1、允许类组成较小的单元(类似文件夹),易于找到和使用相应的文件
2、更好的保护类、属性和方法
3、防止命名冲突
4、Java 的访问修饰符是什么?
访问权限修饰符是表明类成员的访问权限类型的关键字。
使用这些关键字来限定程序的方法或者变量的访问权限。
它们包含:
public: 所有类都可以访问
protected: 同一个包内以及所有子类都可以访问
private: 只有归属的类才能访问,默认: 归属类及相同包下的子类可以访问
5、声明变量和定义变量有什么不同?
声明变量我们只提供变量的类型和名字,并没有进行初始化.定义包括声明和初始化两个阶段 String s;只是变量声明,String s = new String(“bob”);或者 String s = “bob”;是变量定义.
6、静态变量和实例变量的区别?
在语法定义上的区别:静态变量前要加 static 关键字,而实例变量前则不加.
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用, 静态变量则可以直接使用类名来引用。
7、String 和 StringBuffer 的区别
JAVA 平台提供了两个类:String 和 StringBuffer,它们可以储存和操作字符串,即包含
8、StringBuffer 与 StringBuilder 的区别
StringBuffer 和 StringBuilder 类都表示内容可以被修改的字符串,StringBuilder 是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用 StringBuilder。如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用 StringBuffer.。
9、什么是封装
封装是面向对象的三大特性之一,就是将类型的状态信息隐藏在类内部,不允许外部程序直接访问,而通过该类提供的方法来实现对隐藏信息的操作和访问。
封装的好处:隐藏类的实现细节;让使用者只能通过程序规定的方法来访问数据;可以加入存取控制语句,限制不合理操作.
10、this 关键字
this 关键字是对一个对象的默认引用。this 关键字用来表示以后调用当前方法的对象的引用。
this 使用举例:
1、使用 this 调用成员变量,解决成员变量和局部变量的同名冲突
2、使用 this 调用成员方法
3、使用 this 调用重载的构造方法,只能在构造方法中使用,必须是构造方法的第一条语句
11、什么是继承
在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。Java 中只支持单继承。无法继承父类的构造方法。
12、Overload 和 Override 的区别。Overload 的方法是否可以改变返回值的类型?
Overload 是重载的意思,Override 是覆盖的意思,也就是重写。
重载 Overload 表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同),与方法的作用域和返回类型无关。
重写 Override 表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的。
那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。
子类重写父类的方法时,不能扩大方法的异常范围,即只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。
子类重写父类的方法时,不能缩小作用范围,子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private 类型,那么,此时根本不属于重写方法的概念,相当于子类中增加了一个全新的方法。
扩展:
至于 Overloaded 的方法是否可以改变返回值的类型这个问题,要看你倒底想问什么呢?这个题目很模糊。如果几个Overloaded 的方法的参数列表不一样,它们的返回者类型当然也可以不一样。但我估计你想问的问题是:如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载 Overload。这是不行的,我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用map。remove(key)方法时,虽然 remove 方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java 就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。
13、super 关键字
super 代表对当前对象的直接父类对象的默认引用。在子类中可以通过spuer 关键字来访问父类成员。
注意:
1、super 必须出现在子类(子类的方法和构造方法)中,而不是其他位置
2、可以访问父类的成员,如父类的属性、方法和构造方法
3、注意访问权限的控制,如无法通过super 访问 private 成员
14、用 abstract 关键字修饰的类和方法。抽象类和抽象方法的特点:
1、抽象类和抽象方法都通过 abstract 关键字来修饰
2、抽象类不能实例化。抽象类可以没有、有一个或多个抽象方法,甚至全部方法都可以是抽象方法。
3、抽象方法只有方法声明,没有方法实现。有抽象方法的类必须声明为抽象类。子类必须重写所有抽象方法才能实例化,否则子类还是一个抽象类
15、final, finally, finalize 的区别
final 用于声明属性,方法和类,分别表示属性不可变,方法不可重写,类不可继承。内部类要访问局部变量,局部变量必须定义成 final 类型,例如,一段代码…… finally 是异常处理语句结构的一部分,表示总是执行。
finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以重写此方法提供垃圾收集时的其它资源回收,例如关闭文件等。JVM 不保证此方法总被调用