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的,这是就需要这些基本数据类型的封装器类了。