1,面向对象的特征有哪些方面?
答:面对对象的特征主要有以下几个方面:
-抽象:抽象是将一类对象的共同特征总结出来构造累的过程,包括数据抽象和行为抽象两个方面,抽象只注对象有哪些属性和行为,并关注这些行为的细节是什么。
-继承:继承是从已有类得到继承信息创建新类的过程。
-封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口,面向对象的本质是将现实世界描绘成一系列完全自治,封闭的对象。
-多态性:多太性是指允许不同子类型的对象对同一消息作出不同的响应。
2,访问修饰符public,private,protected,以及不写(默认)时的区别?
答:
修饰符 |
当前类 |
同包 |
子类 |
其他包 |
Public |
Yes |
Yes |
Yes |
Yes |
Protected |
Yes |
Yes |
Yes |
No |
Default |
Yes |
Yes |
No |
No |
Private |
Yes |
No |
No |
No |
类的成员不写访问修饰时默认为Default。默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private)。受保护(protected)对于子类相当于公开,对不是同一个包中没有父子关系的类相当于私有,java中,外部类的修饰只能是public或默认,类的成员(包括内部类)的修饰符可以是以上四种。
3,String是最基本的数据类型吗?
答:不是,java中的基本数据类型只有8个:byte,short,int,long,float,double,char,boolean;除了基本数据(primitive type)类型,剩下的都是引用数据(reference type)类型,java5以后引入了枚举,也算是一种比较特殊的引用类型。
4,float f=3.4;是否正确?
答:不正确,3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于向下转型会造成精度损失,因此需要强制类型转换float f=(float)3.4;或者写成float f=3.4F;
5,java有没有goto?
答:goto 是java中保留字,在目前的版本中没有使用。
6,short s1 = 1; s1=s1 + 1; 有错吗? short s1=1; s1+=1;有错吗?
答:对于short s1=1;s1= s1+1;由于1是int类型,因此s1+1运算结果也是int类型,需要强制转化才能赋给short型,而short s1 = 1;s1 +=1;可以真确编译,因为s1+=1;相当于s1=(short)(s1+1)其中隐含的强制类型转换。
7,int 和Integer有什么区别?
答:java为了编程的方便还是引入基本数据类型,但是为了能够将这些基本数据类型当成对象操作,java为每一个基本数据类型引入了对应的包装类型(wrapper class),
Int包装类就是Integer,存java5开始就引入了自动装箱、拆箱机制,使得二者可以相互转化。
补充:java为每个原始类型提供了包装类型:
-原始类型:boolean,char,byte,short,int,long,float,double
-包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
强调:如果是包装数据类型进行比较的话,他们比较的不是值,而是引用,装箱的本质就是你给Integer赋给一个int值的时候,会调用Interger类的静态方法valueOf。
当我们看过valueOf的方法之后,我们不难发现,如果整型字面量的值在-128到127,不会new出一个新的Integer对象,而是直接引用常量池中的Integer对象。如果Integer的值大于这个范围,他们的地址就不一样了。
8,解释内存中的栈(stack)堆(heap)和方法区(method area)的用法。
答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数的调用的现场保存在使用JVM的栈空间; 而通过new的关键字和构造器创建的对象则放在对空间,堆是垃圾收集器管理的主要区域,由于现在垃圾收集器都采用分代收集的算法,所以堆空间还可以分为新生代和老生代。方法区和堆都是各个线程共享的内存区域。
String str = newString(“hello”);
上面的语句中的变量str是放在栈中的,而new创建出来的字符串对象是放在堆上的。而“hello”这个字面量是放在方法区的。
9,Math.Round(11.5) 等于多少?Math.Round(-11.5)等于多少?
答:Math.Round(11.5)的返回值是12,Math.Round(-11.5)的返回值是-11,原因:四舍五入的原理是在参数上加上0.5然后取整。
10.switch 是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:在java5以前,switch(expr)中,expr只能是byte,short,char,int。从java5开始,java中引入了枚举类型,expr也可以是enum类型,从java7开始还可以是字符串(String),但是长整型(long)在目前所有版本都不可以。