1.说明Java中String str=null与String str=""的区别?
String str = null 表示声明了一个String对象的引用str,但是没有为其分配内存空间。
String str = "" 表示创建了一个长度等于0的空字符串,并在内存中为其分配了内存空间。
String str = new String("tw"); str在内存中有两个对象,1.堆内存有一个 new Sting 2.常量池中有一个字符串。
2、使用运算符"= ="和方法equals() 进行比较对象的区别?
使用"= ="算符比较基本数据类型时,比较的是值相等;使用"=="算符比较对象时,比较的是内存地址和内容。
使用equals()方法 比较对象时,比较的是对象的内容,与地址无关,如果没有重写equals()方法就直接调用的是Object的equals()方法。
"=="比较的是外在和内涵;equals()比较的是外在。用博大精深的中文讲就是:一个相同,一个相似。
3、接口和抽象类有何区别?
(1)成员特点:
构造方法:接口没有构造方法;抽象类有构造方法。
成员变量:接口中只有常量;抽象类中可以是常量,也可以是变量。
成员方法:接口中只有抽象方法;抽象类中既有抽象方法,也有非抽象方法。
(2)关系特点:
类与类:类与类之间只有单继承,可以有多层继承。
类与接口:类与接口之间是实现关系,可以单实现,也可以多实现。
接口与接口:接口与接口之间是继承关系,可以单继承,也可以多继承。
(3)设计理念:
接口对应的设计模式是简单工厂设计模式,它被实现,这个接口中定义的是整个体现的扩展内容,体现:like a。
抽象类对象的设计模式是模板设计模式,它被继承,这个类中定义的是整体体现的共性内容,显现is a。
小编的理解:抽象类与接口类比为一个人的亲爹和干爹,亲爹血浓于水,感情深,爱你发自内心;干爹各种机缘认来的(中国式干爹你懂得)。
4、简述方法的重写与重载
重写是指重新实现基类中的方法。在运行过程中,如果将子类创建的对象赋值给子类的引用或父类的引用,则无论通过哪个类型的引用,真正调用的方法都将是在子类中重写的方法。 如果希望调用父类中的方法,则需要通过父类创建类的实例,然后通过该实例才能访问父类定义的方法。重写方法时实现多态的一个重要表现。
在Java中,一个类的内部可以定义多个同名的方法,但是它们的方法参数要有所不同。重写的是与父类同名的方法,与返回值有关。重载是同名方法,与返回值无关,与参数有关,如:个数、类型、排列。
重写注意事项:
(1)父类中的私有方法不可以被重写
(2)子类方法访问权限一定要大于父类的访问权限
(3)静态的方法只能被静态的方法重写,这个其实不能算对象的关系。
5、final、finally、finallize有何区别?
final表示一个修饰符,如果用它来修饰一个类,则该类是不能继承的;如果用它来修饰一个变量,则该变量一旦赋值之后就不能再修改;如果用它来修饰一个方法,则该方法不能够被重写。
finally用于异常处理,它用来修饰一个代码块,即使前面的代码处理异常,该代码块中的代码也会执行。它通常用于释放资源。finally代码块之前有调用System.exit()方法的话,finally里面的代码就不会执行。
finallize表示Object类中定义的一个方法,他可以重写,用于回收资源。
6、编程计算3乘8等于几,什么方法效率更高?
位运算的方法效率更高。编程运算其实质是二进制的运算,运用位运算的方法移动后补位即可得结果,比一般的3*8更高效。
7、不借用第三方变量,互换两个变量。
n=11,m=3
(2)n=n^m;
m=n^m;//(n^m)^m一个数异或另一个数两次,还是得原来那个数
n=n^m//n^(n^m)
小编强力推荐第二种方法,这是提升逼格的强劲手段。当面试官问你这个问题,你跟他拓展到位移运算,你的背后就会出现万丈光芒,那时你就会神一样存在在面试官的心里。
8、传统for和高级for有什么区别呢?
对集合进行遍历。
只能获取集合元素,但是不能对集合进行操作。
迭代器除了遍历,还可以进行remove集合中元素的动作。
如果是用ListIterator,还可以在遍历过程中进行增删改查的动作。
高级for有一个局限性,必须要有被遍历的目标。
建议在遍历数组的时候,还是希望是用传统for。因为传统for可以定义角标。
1.增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的(可以查看编译后的文件),但是增强for循环 有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。
2.ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
3.而对于 LinkedList由于获取一个元素,要从头开始向后找,因此建议使用 增强for循环,也就是iterator。
9、Collection和Colections的区别是什么?
Collection是一个接口,它是List、Set、Queue等接口的父接口。在这个接口中,定义了集合类中通用的方法。
Collections是独立出来去专门操作Collection接口下实体类的工具类。
10、面向对象和面向过程的理解
面向对象时相对面向过程而言的。比如说:人坐地铁去上班。人面向地铁这个对象,地铁拥有运输的功能,人通过地铁调用这个功能,只重结果,不重于过程。面向过程就如我们开门,锁孔对齐,门轴转动,门才开了,相对于结果,侧重于过程。
曾经跟朋友聊对面向对象,我说就像搭积木,找到需要的,一个一个往上累;她说这就是JAVA方便之处。
(1)面向过程是以函数为基础,完成各种操作,强调的是过程,例如:C语言;
(2)面向对象以对象为基础,完成各种操作,强调的是对象和结果。
(3)面向对象是基于面向过程的。
面向对象的特点是:
(1)是一种个符合人们思考习惯的思想
(2)把复杂的事情简单化
(3)把我们从执行者变成了指挥者
举例:老师您口渴想喝茶,如果你自己去拿杯子,放茶叶,
接水这些是面向过程的;但这时您恰好知道我是个打水小能手,
又正好我很尊敬您,一见如故、一见钟情啥的,很愿意帮您去泡茶。
您调用我帮您泡茶,使用我的拿杯子、放茶叶、接水等方法。
您由执行者上升到了指挥者,让泡茶这件事更简单化。
|
|