Java基础面试题(1)

1.八种基本数据类型的大小,以及他们的封装类


2.Switch 能用String作为参数么

jdk1.7之前不可以

jdk1.7及以后版本可以将String作为switch参数进行传递,其原理就是将字符串转换成hashCode值,然后在进行equals比较,也就是编译器在编译期间给代码做了转换。


3.equals与==的区别

equals是判断两个变量或者实例指向同一个内存空间的值是不是相同

而==是判断两个变量或者实例是不是指向同一个内存空间

举个通俗的例子来说,==是判断两个人是不是住在同一个地址,而equals是判断同一个地址里住的人是不是同一个


4.Object 默认方法

Object是所有类的父类,任何类都默认继承Object。

clone

保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常

equals

在Object中与==是一样的,子类一般需要重写该方法

hashCode

该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到

hashCode 同一对象多次调用hashCode方法应该返回同一int值

getClass

final方法,获得运行时类型

wait

使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。

调用该方法后当前线程进入睡眠状态,直到以下事件发生:

1. 其他线程调用了该对象的notify方法

2. 其他线程调用了该对象的notifyAll方法

3. 其他线程调用了interrupt中断该线程

4. 时间间隔到了

此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常

notify

唤醒在该对象上等待的某个线程

notifyAll

唤醒在该对象上等待的所有线程

toString

转换成字符串,一般子类都有重写


5.java四种引用

强引用

软引用

虚引用

弱引用


6.Collection接口包结构,与Collections的区别

Collection是集合类的上级接口,子接口主要有Set 、List、Deque。

Collections是针对集合类的一个帮助类,提供了操作集合的工具方法:一系列静态方法实现对各种集合的搜索、排序、替换和线程安全化等操作。


7.try,catch,finally,try里面有return,finally一定会执行么

一定会执行,但是有一下这个情况:

执行完catch内的代码后,会把结果值暂时保存,然后执行finally中的代码,如果finally中没有return,则直接把保存的值返回。如果finally中有return,则值会被finally改变,再返回。

而如果finally中没有return,返回的值好像也有部分出乎我们的意料。可以这样理解吧,catch中的结果值会被final修饰,当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。


8.异常

运行时异常、检查时异常、error

1)RuntimeException及其子类都被称为运行时异常。

特点:Java编译器不会检查它。也就是说,当程序中可能出现这类异常时,倘若既"没有通过throws声明抛出它",也"没有用try-catch语句捕获它",还是会编译通过

2)Exception类本身,以及Exception的子类中除了"运行时异常"之外的其它子类都属于被检查异常。

特点 : Java编译器会检查它。 此类异常,要么通过throws进行声明抛出,要么通过try-catch进行捕获处理,否则不能通过编译。如自定义异常

3) Error类及其子类。

特点 : 和运行时异常一样,编译器也不会对错误进行检查。

当资源不足、约束失败、或是其它程序无法继续运行的条件发生时,就产生错误。程序本身无法修复这些错误的。例如,VirtualMachineError就属于错误。出现这种错误会导致程序终止运行。OutOfMemoryError、ThreadDeath。

常见的OOM

查询数据时,将大量用户加载都内存中


9.Java(OOP)面向对象的三个特征与含义

封装:将某事物的属性和行为包装到对象中,这个对象只对外公布需要公开的属性和行为,而这个公布也是可以有选择性的公布给其它对象。在Java中能使用private、protected、public三种修饰符或不用(即默认defalut)对外部对象访问该对象的属性和行为进行限制。

继承:子类可以继承父类的属性和行为,亦即父对象拥有的属性和行为,其子对象也就拥有了这些属性和行为。

多态:更倾向于使用java中的固定用法,即overriding和overload。多态则是体现在overriding上,而overload则不属于面向对象中多态的范畴,因为overload(过载)概念在非面向对象中也存在。overriding是面向对象中的多态,因为overriding是与继承紧密联系,是面向对象所特有的。多态是指父对象中的同一个行为能在其多个子对象中有不同的表现。也就是说子对象可以使用重写父对象中的行为,使其拥有不同于父对象和其它子对象的表现,这就是overriding。

多态的条件:一、要有继承;二、要有重写;三、父类引用指向子类对象。


10.int和Integer的区别

1)int比Integer更快更高效,因为int是基本数据类型,直接存储在方法区的常量池中,而integer存储的是对象(堆)的引用,两个Integer对象值相同,但是确不等。

2)integer允许为null,而int类型变量在使用时,必须初始化

3)自动拆箱和装箱

4)Integer可以为泛型,但是int不可


部分内容摘自网络,侵联删,谢谢

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。