创作立场声明
主要记录本人在面试准备过程中遇到并收集的面试题,由简单到困难,由浅入深。加以个人理解并记录在册,方便记忆与查阅
假如你发现了笔记中有任何问题,欢迎提出,我会及时改正并学习
面试题集合
- 是否可以从一个static方法内部发出对非static方法的调用?
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那非static方法是关联到哪个对象上的呢?此逻辑无法成立 - Integer和int的区别
int是java提供的8种原始数据类型之一。java为每个原始类型都提供了封装类,Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况。
另外,Integer还提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了整数的最大值、最小值的常量 - Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
Math类中提供了三个与取整有关的方法:ceil、floor、round
ceil:ceil的英文意思为天花板,所以则表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果为-11
floor:floor的英文意思为地板,所以则表示向下取整,Math.floor(11.6)的结果为11,Math.floor(-11.6)的结果为-12
round:round的英文意思为环绕,所以则表示四舍五入,具体算法为Math.floor(x+0.5),即将原来的数字加上0.5之后在向下取整,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11 - Overload和Override的区别?Overloaded的方法是否可以改变返回值的类型?
Overload是重载的意思,Override是覆盖的意思,也就是重写
重载Overload表示在同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)
重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。
如果两个方法的参数列表完全一样,不可以使他们的返回值不同来实现重载Overload。 - 接口是否可继承接口?抽象类是否可实现接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?
接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类中可以有静态的main方法。
只要记住抽象类和普通类的唯一区别就是抽象类不能创建实例对象和允许有abstract方法。
抽象类的其他表现和普通类一样。 - java中实现多态的机制是什么?
靠的是父类或者接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存中正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。 - abstract class和interface语法上有什么区别?
1.抽象类可以有构造方法,接口中不能有构造方法
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法
4.抽象类中的抽象方法的访问类型可以是public,protected和默认类型。接口中的抽象方法只能是public类型的,并且默认即为public abstract类型
5.抽象类中可以包含静态方法,接口中不能包含静态方法
6.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型
7.一个类可以实现多个接口,但只能继承一个抽象类 - abstract的method是否可以同时是static,是否可以同时是native?
abstract的method不可以是static的,因为抽象的方法是需要子类进行实现的,而static关键字跟子类扯不上关系
abstract的method也不可以是native的,native是需要用另外一种依赖平台的编程语言实现,不存在被子类实现的问题。 - 内部类可以引用它的包含来的成员吗?有没有限制?
可以引用,静态内部类有限制
静态内部类不能访问外部包含类的普通成员变量,只能访问外部类的静态成员变量,即static关键字修饰的变量。 - String s=“Hello”; s = s+“world!”;这两行代码执行后,原始的String对象中的内容到底变了没有?
没有变化。因为String被设计成不可变类(immutable),所以它的所有对象都是不可变对象。在原来代码中,s原先指向一个String对象,内容是“Hello”,然后我们对s进行了+操作,那么s所指向的那个对象并没有发生改变,原来的对象“Hello”还存在内存之中,只是s这个引用变量不再指向它了。