Java试题

1、写出内部类的特点

Java中的内部类共分为四种:
    静态内部类:只可以访问外部类的静态成员和静态方法,包括了私有的静态成员和方法生成静态内部类对象的方式为:
		OuterClass.InnerClass inner = new OuterClass.InnerClass();
  成员内部类:它可以访问它的外部类的所有成员变量和方法,不管是静态的还是非静态的都可以。
		在外部类里面创建成员内部类的实例:this.new Innerclass();
		在外部类之外创建内部类的实例:(new Outerclass()).new Innerclass();
		在内部类里访问外部类的成员:Outerclass.this.member
  局部内部类:像局部变量一样,不能被public, protected, private和static修饰。只能访问方法中定义的final类型的局部变量。
		局部内部类在方法中定义,所以只能在方法中使用,即只能在方法当中生成局部内部类的实例并且调用其方法。
  匿名内部类:匿名内部类就是没有名字的局部内部类,不使用关键字class, extends, implements, 没有构造方法。
		生成的.class文件中,匿名类会生成OuterClass$1.class文件,数字根据是第几个匿名类而类推。

2、写出&和&&的区别,并计算出3&4的结果。

&和&&都可以做逻辑运算,运算的两边都必须为真才返回真,不同的是&&运算左边时如果为false则后面就不判断了,而&运算会把表达式运算完。
&也叫位与,是按二进制进行与计算,它的计算规则是:
&&也叫逻辑与,是按逻辑计算,它的计算规则是一假必假。
3&4是按位运算,3的二进制表示为011,4的二进制为100,所以结果为0;如果是3&&4的话则是按逻辑运算,3,4都不为0所以结果为真,即为1.

3、break、continue、他们的作用分别是什么?

break是跳出的意思,应用于多重循环中跳出当前循环。
continue是继续的意思,应用于逻辑结构中继续。

4、什么是强制类型转换?int i=0;double s=1;int res = i+s;有没有错?

从高精度数据类型转成低精度数据类型的形式叫强制类型转换。
有错,s是double类型,而i是int类型,res也是int类型,所以需要强制转换。

5、final、finally、finalize的区别是什么?

final是修饰符,用于修饰变量,方法,被他修饰的变量不可以改变值,被他修饰的方法不能被继承
finlly是捕捉异常语句的一部分,代表无论会不会报异常,都会执行finally语句块里面的代码。
finalize是java中的序列化关键字。

6、使用final关键字修饰的变量是引用不能变还是引用的对象不能变?

   final修饰的变量是不变的,是指引用不能变的,而引用的对象是可以变的

7、==和equals方法的区别?

 ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,
     只能用==操作符。
   equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的

8、静态变量和实例变量的区别

   在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
   在程序运行时的区别:实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

9、为什么不可以从static方法内部发出对非static方法的调用

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

10、基本数据类型以及他们的封装类有哪些区别,为什么有了基本数据类型还要有对应的封装类?

   区别:
   基本数据类型里面的数据是提供给封装类的
   封装类提供了多个与整数相关的操作方法
   1.声明方式不同:
     基本数据类型不使用new关键字,而封装类型需要使用new关键字来在堆中分配存储空间;
   2.存储方式及位置不同:
     基本数据类型是直接将变量值存储在栈中,而封装类型是将对象放在堆中,然后通过引用来使用;
   3.初始值不同:
     基本数据类型的初始值如int为0,boolean为false,而封装类型的初始值为null;
   4.使用方式不同:
     基本数据类型直接赋值直接使用就好,而封装类型在集合如Collection、Map时会使用到。
		
   第二问:
   我们知道Java是一个面相对象的编程语言,基本数据类型并不具有对象的性质,为了让基本数据类型也具有对象的特征,
   就出现了封装类型(如我们在使用集合类型Collection时就一定要使用封装类型而非基本数据类型),它相当于将基本数据类型“封装起来”,使得它具有了对象的性质,
   并且为其添加了属性和方法,丰富了基本数据类型的操作。另外,当需要往ArrayList,HashMap中放东西时,像int,double这种基本数据类型是放不进去的,
   因为容器都是装object的,这是就需要这些基本数据类型的封装器类了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值