1、面向对象的特征有哪些方面?
答:抽象、封装、继承和多态。
抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。
封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
继承:继承是一种联结类的层次模型,允许和鼓励类的重用,它提供了一种明确表述共性的方法。
多态:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性,具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
2、访问修饰符public,private,protected,以及不写(默认)时的区别?
答:public表示公开的,是当前类、子孙类(其他包的继承当前类的其他类)、同一个包其他类、其他包的类都可以直接调用;private表示私有的,只有当前类才可以直接调用,其他的都不行;protected表示保护的,当前类、子孙类和同一个包的其他类都可以直接调用,不同包的类不可以;默认的default则是当前类和同一个包的其他类可以调用,子孙类和其他包的类不可以。
3、String 是最基本的数据类型吗?
答:String不是基本数据类型,而是一个类,一个被final修饰的不可改变的类;基本数据类型有int、float、double、long、short、char、boolean、byte。
4、float f=3.4;是否正确?
答:不正确,应该是3.4f。3.4是双精度数,在java中没小数点默认是int,有小数点默认是double,所以将double赋值给float(浮点型)会造成精度损失,故需要强制转换。
float f = (float) 3.4;或者float f = 3.4f;
5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
答:第一个不正确,第二个正确。赋值表达式“=”的转换规则是右侧向左侧的看齐,即右侧的表达式要转换成和左侧一样的数据类型。Short s1 = 1,s1是short类型,1是int类型,s1会自动转换为int类型;而s1 = s1 + 1;s1+1等于2,是int类型,左边的s1是short类型,这就需要强制类型转换。应该是:s1=(short)(s1+1)。而s1+=1,实际上就是s1=(short)(s1+1),有一个强制转换的过程,所以正确。
6、Java有没有goto?
答:有,但java中的goto是保留字,即以后可能会启用变成关键字。
java有如下保留字:
byValue, cast, future, generic, inner, operator, outer, rest, var , goto ,const
7、int和Integer有什么区别?
答:int是基本数据类型,integer则是它的包装类。Integer必须实例化后才能使用,实际上是对象的引用,指向new的integer对象,默认值是null;而int可以直接存储数据,默认值是0。
8、&和&&的区别?
答:当&和&&都表示逻辑运算符时,&不管左右两边表达式是否正确,会一直执行下去,最后再判定结果;而&&则是当左边的表达式是false时就不再执行剩下的表达式,直接判定为false。
9、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。
答:栈保存的是基本数据类型变量,对象的引用变量和函数调用的现场保存;堆保存的是new出来的对象和构造器创建的对象;静态区用来存放程序中的字面量(literal)如直接书写的“100”,“hello”和常量。栈空间很小但是操作快,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。
String str = new String(“hello”);
上面语句中变量str放在栈中,用new创建出来的字符串对象放在堆上,而“hello”这个字面量放在静态区。
补充:较新版本的Java(从Java 6的某个更新开始)中使用了一项叫"逃逸分析"的技术,可以将一些局部对象放在栈上以提升对象的操作性能。
10、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
答:round()方法是将括号内的数加上0.5之后向下取整数值。所以Math.round(11.5)=12,Math.round(-11.5)=-11。