Java面试题

1、一个“.java”源文件中是否可以包括多个类?有什么限制?
可以有多个类,但只能有一个public类,并且public类名必须与文件名一致。

2、Java有没有goto?
Java中的保留字,现在没有在Java中使用。

3、说说&和&&的区别?
①&和&&都可以用做逻辑运算符,表示逻辑与,当运算两边的表达式都为true时,整个运算符才能为true,否则只要有一方为false,则结果为false。
②&&具有短路功能,即如果第一个表达式为false,则不计算第二表达式。
③&可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。
例:if(str != null && !str.equals(""))表达式,当str为null时,后面的表达式不会执行,所以不会出现空指针异常,相反则会抛出异常。

4、在Java中如何跳出当前的多重嵌套循环?
①在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出外层循环。
例:

		ok: for (int i = 0; i < 10; i++) {
					for (int j = 0; j < 10; j++) {
						System.out.println("i = " + i + "j = " + j);
						if (j == 5)
							break ok;
					}
				}

②然外层的循环条件表达式的结果可以受到里层循环体代码的控制。

5、switch语句能否作用在byte上,能否作用在long上,能否作用在string上?
①在swich(表达式)中。表达式只能是一个整数表达式或者是枚举常量,整数表达式可以是int基本类型或Integer包装类型,由于byte,short,char都是可以隐含转为int类型,所以这些类型以及这些类型的包装类也是可以的。
②long和strin类型不符合switch的语法规范,并且不能隐含转为int类型,所以不能用于switch语句中。
③另外JDK1.7中,引入新特性,switch语句可以接收一个string类型的值,string可以作用在switch。

6、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编译器会对他进行特殊处理,因此可以正确编译。

7、char类型变量中能不能贮一个中文汉字?为什么?
①char类型变量是用来存储Uniecode编码的字符,Uniecode编码字符集中包含了汉字,所以char类型变量可以存储汉字。
②但是某个特殊的汉字,没被包含在Uniecode编码里,那么char就不能存储这个汉字。

8、用最有效率的方法算出2乘以8等于几?
2<<3,因为一个数左移n位,就相当于乘以了2的n次方,那么一个数乘以8,只要将其左移3位即可,因为位运算cpu直接支持,效率最高。

9、使用final关键字修饰一个变量时,是引用不能变还是引用的对象不能变?
使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
例如,对于如下语句:final StringBuffer a = new StringBuffer("immutable");
执行如下语句将报告编译期错误:a = new StringBuffer("");
但是,执行如下语句则可以通过编译:a.append(" broken!");
有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:public void method(final StringBuffer param){ }
实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:param.append("a");

10、“= =”和equals方法有什么区别?
①对于"=="比较的事值是否相等。
如果作为基本数据类型的变量,则直接比较存储的值是否相等。
如果作为引用类型变量,则比较的事所指对象的地址。
②对于equals方法,注意:equals不能作用于基本数据类型的变量。
equals继承了Object类,比较的是内容是否相同。
③如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象地址。
④如果String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

11、Integer与int的区别?
①int是Java提供的8种基础数据类型之一,存储的是数值,默认值为0。
②Integer是Java为int提供的包装类,Integer变量必须实例化后才能用,默认值为null。
③所以Integer可以区分未赋值和值为0的区别,int则无法表达出未赋值的情况。

12、请说出作用域public、private、protected、以及不写时的区别。

            作用域       当前类    同一package   子孙类     其他package
            
            public         √          √          √           √

           protected       √          √          √           ×

           friendly        √          √          ×           ×

           private         √          ×          ×           ×

13、静态变量和实例变量的区别?
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

14、是否可以从一个static方法内部发出对非static方法的调用?
不可以!
因为非static方法是要与对象关联在一起的,必须在创建出一个对象后,才能通过这个对象,调用非static方法,而static方法可以直接通过类名来调用,不需要创建对象。
也就是说,在一个static方法被调用时,可能还没创建任何实例对象,此时如果从static内部发出对非static方法的调用,非static方法是无法关联到对象的,所以不可以。

15、重载(Overload)和重写(Override)的区别?重载的方法是否可以改变返回值的类型?
①重载和重写都是多态的体现,区别是重载是编译时的多态,重写是运行时的多态。
②重载:只发生在同一个类中,通过同方法名,不同参数类型或者参数个数来区分,与返回值类型没有关系。
③重写:发生在父类与子类之间,重写要求子类的重写方法,必须和父类被重写的方法有相同的返回值类型,比父类的访问权限大,比父类抛出的异常少。
④重载的方法可以改变返回值的类型(重载和返回值类型没有关系,它可以改变,但是我们不能通过返回值是否相同来判断是否构成重载)。

16、构造器Construtor是否可以被重写(Override)?
构造器不能被继承,因此不能重写,但是可以被重载。

17、接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承具体类?抽象类中是否可以有静态的main方法?
①接口可以继承接口,并且可以继承多个接口。
②抽象类可以实现接口。
③抽象类可以继承实体类,但是和实体类的继承一样,也要求父类可继承,并拥有子类可以访问的构造函数。
④抽象类中可以有静态的main方法。

18、抽象类和接口(interface)有什么区别?
①包含抽象方法的类是抽象类,由abstract关键字修饰,抽象类是为了把相同的东西提取出来,可以有抽象方法,也可以有普通方法,抽象类其子类使用extends关键字来继承抽象类,如果子类不是抽象类,那么其子类需要复写起父类所有的抽象方法。
②接口是为了降低模块耦合性,其子类可以实现多个接口,接口方法固定由public abstract修饰,接口常量固定由public static final修饰,接口中不能有构造方法,且所有方法必须是抽象的,其子 类使用关键字implement来实现。

19、String和StringBuffer的区别?
①String和StringBuffer都可以储存和操作字符串。
②String对象一旦产生就不能被修改,重赋值属于连个对象。
③StringBuffer对象的内容可以修改,在字符串进行处理时,不生成新的对象,在内存使用上更优于String类。
在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的。

20、final、finally,finalize的区别?
(1)final用于声明:
①被final修饰的变量是常量,只能赋值一次。
②被final修饰的方法,不可以被重写。
③被final修饰的类,不可以被继承。
④内部类要访问局部变量,局部变量必须定义成final类型。
(2)finally是异常处理语句结构的一部分,表示总是执行。
(3)finalize是Object类的一个方法,这个方法是在垃圾收集器在确定了,被清理对象没有被引用的情况下调用的,其子类可以覆盖finalize()方法,来整理系统资源或者执行其他清理工作。

21、error和exception有什么区别?
error表示恢复不是不可能,但很困难的情况下的一种严重问题,比如内存溢出,不可能指望程序能处理这样的情况。
exception表示一种设计或实现问题,也就是说,他表示如果程序运行正常,从不会发生的情况。

22、例举常见的5个runtime exception?
①NullPointerException:空指针异常
②ArrayIndexOutOfBoundsException:数组下标越界
③NumberFormatException:数字转化异常
④InstantiationException:对象初始化异常
⑤ArithmeticException:算数异常

23、Java中有几种类型的流,为每种类型的流,提供了哪些抽象类?
字节流和字符流。
InputStream是所有以字节为单位的输入流的父类,其子类有FileInputStream。
OutputStream是所有以字节为单位的输出流的父类,其子类有FileOutputStream。
Reader是所有以字符为单位的输入流的父类,其子类有FileReader。
Writer是所有以字符为单位的输出流的父类,其子类有FileWriter。

24、Java如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常么?
①throws用在方法上,后面可以跟多个异常类,用来规避异常。
②throw用在方法体内,后面跟的是异常类的对象,用来抛出异常。
③try-catch-finally是在一起使用的,当某段代码在运行期间,可能会发生异常而终止执行时使用,结构如下:

		try {
			//可能发生异常的代码		
		} catch (Exception e) {//具体的异常对象
			//异常发生时的处理方式			
		} finally {
			//不管是否发生异常,都要执行的代码
		}

25、包装类,包装类的自动装箱和自动拆箱
包装类,包装类的自动装箱和自动拆箱

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值