java基础面试题

JAVA面试精选【Java基础第一部分】

JAVA面试精选【Java基础第二部分】

JAVA面试精选【Java基础第三部分】

JAVA面试精选【Java算法与编程一】

JAVA面试精选【Java算法与编程二】

 

1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
	可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。

2、Java数据类型
	基本数据类型
		byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0;
		short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0;
		int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0;
		long:长整型,在内存中占64位,即8个字节-2^63~2^63-1,默认值0L;
		float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0;
		double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0;
		char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空;
		boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false;
	引用数据类型
		类
		接口
		数组

3、面向对象思想有哪些特征?
	封装:隐藏对象的属性和实现的细节,仅对外提供公共的访问方式。
	继承:把多个类中的相同的属性和行为进行抽取,封装到一个类中,然后再建立新类的时候,不需要从头做起,继承刚才定义的那个类即可。	
		好处:
			A:提高代码的复用性。
			B:让类与类之间产生了一个关系,是多态的前提。
		特点:
			A:Java只支持单继承,不支持多继承。为什么?如果支持多继承,就会有调用不明确的问题。
			B:Java支持多层(重)继承。
	多态:对象在不同时刻表现出来的不同状态。
		前提:
			A:要有继承或者实现关系。
			B:要有方法的重写/实现。
			C:要有父类引用或者父接口引用指向子类对象。
		好处:
			可以提高代码的扩展性和可维护性。

4、逻辑运算符有哪些?
	与(&),或(|),非(!),异或(^),与(&&),或(||)

	&:有false则false
	|:有true则true
	!:true变false,false变true
	^:相同false,不同true
	&&:有false则false
	||:有true则true
	&&和&的区别是:如果左边有false了,右边将不再执行。
	||和|的区别是:如果左边有true了,右边将不再执行。

5、说说逻辑运算符&和&&的区别。
	&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
	&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null&& !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 &++y>0) y会增长,If(x==33 && ++y>0)不会增长
	&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。
	备注:这道题先说两者的共同点,再说出&&和&的特殊之处,并列举一些经典的例子来表明自己理解透彻深入、实际经验丰富。

6、Java中break return continue 区别
	continue:跳出本次循环继续下一次循环
	break:   跳出循环体,继续执行循环外的函数体
	return:   跳出整个函数体,函数体后面的部分不再执行

7、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
	在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。

8、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
	对于short s1 = 1; s1 = s1 + 1;由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
	对于short s1 = 1; s1 += 1;由于 +=是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

9、Java中的堆和栈
	一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。
	堆内存用于存放由new创建的对象和数组。

10、用最有效率的方法算出2乘以8等於几?
	2 << 3

11、Java中的final关键字
	是一个关键字,可以用于修饰类,成员变量,成员方法。
	修饰的类不能被继承
	修饰的成员变量是一个常量
	修饰的成员方法不能被子类重写
	修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的(如集合)。

12、==与equals区别?
	1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
    如果作用于引用类型的变量,则比较的是所指向的对象的地址

      2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量
    如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址,如果重写了,就按照重写后的规则进行比较。
    诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

13、Java类中各成员初始化顺序?
	a.静态成员变量按照在类中定义的顺序初始化(包括静态代码块)
	b.普通成员初始化按照在类中定义的顺序初始化(包括构造代码块)
	c.构造代码块
	d.构造函数初始化

14、是否可以从一个static方法内部发出对非static方法的调用?
	不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。

15、Integer与int的区别?
	int是基本数据类型,Integer是引用数据类型;
	Ingeter是int的包装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。

16、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
	Math类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英文名称的含义相对应,例如,ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;floor的英文意义是地板,该方法就表示向下取整,Math.ceil(11.6)的结果为11,Math.ceil(-11.6)的结果是-12;最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。

17、下面的代码有什么不妥之处?
	if(username.equals(“zxx”){}
  	username可能为NULL,会报空指针错误;改为"zxx".equals(username)

18、重载与重写的区别?
	重载:
		方法名相同,参数不同(个数或类型或顺序);
		返回值类型一样;
		异常类型和数目可以不一样
		若方法名形同,参数不同,返回值不同,则只是定义了一个新方法,与重载无关
		
	重写:
		方法名和参数完全相同
		返回值类型相同
		抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类
		被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖

19、子类是否继承父类构造方法?
	java继承中对构造函数是不继承的,只是调用(隐式或显式)。
	a.子类的构造过程中必须调用其基类的构造方法。
	b.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。
		使用this(argument_list)调用本类的另外构造方法。
		如果调用super,必须写在子类构造方法的第一行。
	c.如果子类的构造方法中没有显示的调用基类的构造方法,则系统默认调用基类的无参数构造方法。
	d.如果子类构造方法中既没有显示调用基类构造方法,而基类又没有无参数的构造方法,则编译出错。

20、Java中的多态?
	前提:
		A:要有继承或者实现关系。
		B:要有方法的重写/实现。
		C:要有父类引用或者父接口引用指向子类对象。
	好处:
		可以提高代码的扩展性和可维护性。

21、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
	没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

22、String F=new String("Microstrong");创建了几个String对象?
	答案是两个,一个是字符串字面常数,在字符串池中。一个是new出来的字符串对象,在堆中。
	

23、StringBuffer与StringBuilder区别?
	StringBuffer是同步的,线程安全的;StringBuilder是不同步的,线程非安全的,执行速度快。

24、Java数组与集合的区别?
	数组:大小固定,可存储基本类型或引用类型,同一数组只能存储同一类型数据;
	集合:大小可变,只能存储引用类型,同一集合可以存储不同类型数据。
	

 

  • 11
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值