面试题---基础篇

1…java源文件中是否可以包括多个类,有什么限制
可以包括多个类
但是只能有一个public修饰的类,且类名需和文件名相同
2.java中有没有goto
有,是java中的保留字,未使用
3.&和&&的区别
都是逻辑与,前后逻辑均为true才为true,一个为false就为false
单个&需要将两个逻辑都运行完成才会给出结果,可能会导致null指针异常
&&是短路与,只要第一个逻辑是false就结束整个逻辑的判断并返回结果
4.在java中如何跳出多重循环
使用break
5.switch是否可以作用在byte,string和long上
可以作用在byte和string上
6.short s1 = 1; s1 = s1 + 1; 以及short s1 = 1; s1 += 1
第一种写法会报错,s1为short类型,与1相加是int类型,但是int类型不能转回short类型
第二种写法没问题,因为+=是规定的运算符,不会出现转义错误
7.char是否可以存储一个汉字
可以的,char可以存储一个unicode编码字符,一个汉字是两个字节,一个char也可以存储两个字节内容
8.最有效率的2乘以8
2<<<3,左移三位,运算效率最快
9.使用final修饰变量
final修饰一个变量,该变量的地址值不可以发生改变,但是变量的内容是可以改变的
比如Stringbuffer被final修饰,不可以再new一个StringBuffer,但可以append接其他内容
10.静态变量和实例变量
静态变量前面要加static,属于类,只要加载类以后,就可以会分配空间
实例变量,属于某个实例对象,必须先创建对象后才可以被调用
11.是否可以从一个static方法内部发出对非static方法的调用
不可以
非static方法必须依赖实例对象才可以调用,而静态方法可以通过类名直接调用,如果一个static静态方法通过类名调用,而还没有实例化一个对象,就不会发生上面的情况
12.Integer和int的区别
int属于8个基本数据类型之一,而Integer是int的封装类,int默认为0,Integer默认为null,Integer中提供了很多操作int的方法
13.round,ceil,float
ceil:天花板,意思就是向上取整,ceil(11.3) = 12,ceil(-11.3) = -11
float:地板,向下取整,float(11.3) = 11,float(-11.3) = -12
round:四舍五入,算法为+0.5再向下取整,round(11.3) = 11,round(-11.3)=-11
14.Overload和Override
Overload:方法重载,同一个类中方法名相同,参数不同(个数,类型,顺序),和返回值类型无关
Override:方法重写,子类重写父类同一个方法,方法名和参数都相同,只是方法体不同。但是父类方法不能为私有,重写后异常要比父类更少
15.接口是否可以继承接口,抽象类是否可以实现接口
接口可以继承接口,可以继承多个接口,只要一个方法中含有抽象方法就是抽象方法
抽象类可以实现接口,可以实现多个接口,一般来说,一个接口中的方法均为抽象方法,当然也可能含有非抽象方法,但需要用default修饰
16.java中实现多态的机制
父类或接口引用变量指向子类或实现类的实例对象
17.抽象类和接口的区别
抽象类可以有构造方法,可以有普通成员变量,可以含有非抽象方法,静态方法,一个子类只能继承一个抽象类
接口不可以有构造方法,不可以有普通成员变量,一般上不会有非抽象方法,不可以有静态方法,一个实现类可以实现多个接口
18.abstract的方法是否可以是static的
不可以,因为abstract说明该方法是要被子类重写的,而static说明该方法是要类名直接调用的
19.内部类可以调用它的包含类的成员吗?
可以
如果不是静态内部类,是没有什么限制的,静态内部类只能访问包含类的静态资源
20.String s = “Hello”;s += “World”;执行后,原始的String对象的内容到底变了没
没有,因为String被设计为不可变类,所以他的所有对象都是不可变对象
s原先指向一个String对象,“hello”,后来进行+=操作,此时指向另一个String,而原先的String还存在内容,只是不再指向他了
21.String s = new String(“xyz”)创建了几个StringObject,是否可以继承String
如果缓存区中有xyz,则创建了一个对象,如果缓存区中没有xyz,则创建了两个对象
不可以继承String,因为String是被final修饰的不可以继承类
22.String和StringBuffer去呗
String数值不可以改变,只能存储到新的String中去
StringBuffer可以改变数值
23.String s = “a”+“b”+“c”+"d"共创建了几个对象
一个
String s1 = “a”;String s2 = s1 + “b”; String s3 = “a”+“b”
system.out.println(s2 == “ab”);system.out.println(s3 == “ab”);
第一个为false,第二个为true,说明字符串常量直接相加不必等到运行期再去进行加法运算处理
24.try{}中有一个return语句,finally中的code是否会执行,执行顺序是什么
可以执行
在return中间执行
25.final,finally,finallize区别
final:声明属性,方法和类,属性不可变,方法不可以重写,类不可继承
finally:异常语句的一部分,表示最后一定会执行的语句
finallize:是Object的一个方法,用于垃圾回收器执行的时候调用被回收对象的此方法
26.运行时异常和一般异常的区别
异常表示程序运行过程中出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见的运行错误
Java编译器要求必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常
27.error和exception的区别
error表示很难恢复的严重错误,比如内存溢出,程序无法处理这种错误
exception表示一种设计或实现问题,可以通过程序的设计避免这种异常
28.栈和堆的区别
栈:程序进入一个方法时,会给方法单独分配空间,存放方法内部的局部变量,方法结束时,分配的栈会释放,有压栈和弹栈,先进后出原则
堆:用于存放不在当前方法栈中的数据,比如new创建的对象都在堆中,不会随着方法的结束而消失,方法中局部变量使用final修饰后存放在堆中
29.int可以强制转换为byte吗
可以强制转换
int是32位,byte是8位,强转会将int高24位丢失
30.hashCode和equals的关系
hashCode()对应对象整型的hash值,基于hash集合类,和equals关系密切
两个使用equals比较的对象必须拥有相同的hashCode
31.描述一下JVM加载class文件的原理机制
JVM类的加载是由ClassLoader和他的子类来实现的,Java ClassLoader是一个重要的java运行时系统组件,他负责在运行时查找和装入类文件的类
32.GC是什么
垃圾收集
内存处理是程序员容易出现问题的地方,忘记处理垃圾文件容易导致程序崩溃,Java提供了GC功能可以自动监测对象是否超过作用域而到达自动回收的目的,Java中没有提供释放已分配内容的显示操作方法
33.垃圾回收的有点和原理
垃圾回收可以有效的防止内存泄漏,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别线程运行,不可预知的情况下对内存中已死亡或长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或全部对象进行垃圾回收
程序员可以调用system.gc()通知垃圾会搜,但是不能保证一定运行
回收机制有分代复制垃圾回收和标记垃圾回收
34.throw和throws的区别
throw用于抛出Throwable类中的一个实例化对象Exception
throws是作为方法声明和签名的一部分,方法被抛出相应的异常以便调用者能处理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值