一、面向对象
例1:对象是类的一个实例,但是什么时候需要实例,什么时候不需要,该如何确认?有些类无须创建实例,直接定义就可以使用,系统也不报错。如何知道这个类必须用实例还是不需要用实例?
答:对象和实例从宏观的角度看,区别是:对象是同类事物的一种抽象表现形式,而实例是对象的具体化,一个对象可以实例化很多实例,对象就是一个模型,实例是照着这个模型生产的最终产品。
不用实例化的:
静态方法是为类提供的公共方法,也就是这个方法对所有属于这个类的对象适用。使用静态方法就不需要实例化。比如一个男人的类,那确定此男人是否有喉结的方法就可以是静态方法。
需要实例化的:
每个人的身高、体重都不相同,所以一个类中有这些方法,我们在使用这些方法时就需要实例化例2:下列程序输出结果是?
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashSet;
import java.util.Set;
public class Test {
private static final String[] URLNAMES = {
"http://www.sina.com.cn", //IP:202.108.33.94
"http://www.nwu.cn", //IP:124.115.173.252
"http://www.javapuzzlers.com", //IP:208.97.154.9
"http://www.google.com", //IP:64.233.189.147
"http://www.javapuzzlers.com", //IP:208.97.154.9
"http://apache-snort.skybar.dreamhost.com" //IP:208.97.154.9
};
public static void main(String[] args) throws MalformedURLException {
Set<URL> favorites = new HashSet<URL>();
for(String urlName : URLNAMES){
favorites.add(new URL(urlName));
}
System.out.println(favorites.size());
}
}
A.一定是4
B.一定是5
C.一定是6
D.都不对
答:答案为D
。联网时具有相同IP
地址的元素是一样的,此时是4;不联网时,具有相同字符串的元素是一样的,此时是5。
例3:
HashMap
和Hashtable
的区别。
答:都属于Map
接口的类,实现了将唯一键映射到特定的值上。HashMap
类没有分类或者排序。它允许一个null
键和多个null
值。Hashtable
类似于HashMap
,但是不允许null
键和null
值。它也比HashMap
慢,因为它是同步的。Hashtable
继承自Dictionary
类,而HashMap
是Map的一个实现。HashMap
把Hashtable
的contains
方法去掉了,改成了containsvalue
方法。HashMap
不是同步的,Hashtable
是同步的。例4:下面哪种说法是正确的?
A.构造函数不能被重载
B.构造函数不能被覆盖
C.一个构造函数可以返回一个私有的或一个对象的引用
D.构造函数代码执行时是从当前的类层级到它祖先的类
答:答案是B。构造函数是可以被重载的(同一个类中),不能被覆盖(子类覆盖父类方法)。
例5:多态的概念
多态按字面的意思就是“多种形状”。多态性是允许你将父对象设置成为和它的一个或更多的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。多态指的是方法的多态。例6:重载和覆盖有什么不同?
重写的函数必须有一致的参数表和返回值(在同一个类中);重载是指编写一个与已有函数同名但是参数表不同的函数。重载不是一种面向对象的编程,而只是一种语法规则。例7:多态内存分析
父类引用指向子类对象,当调用子类方法时,我们知道对象是一层一层包裹的,当调用的时候子类的重载方法是在最外面的,所以调用子类的方法。例8:包装类分析
对于包装类来说,比如Integer
,如果值在-128到127之间,那么仍然按照基本数据类型来处理,所以两个Integer
对象Integer d1=-100
和Integer d2 = -100
在比较的时候d1==d2
为true
,但是在其他数字值的时候为false
。