java程序员面试宝典2

1.面向对象

过程式编程:以过程为中心,以算法为驱动,程序=算法+数据
面向对象:以对象为中心,以消息为驱动,程序=对象+消息
内部类:内部类在类的层级上没有限制,可以多层嵌套,内部类可以是私有类,创建一个static内部类的对象,不需要一个外部类对象,不能从一个static内部类的对象访问一个外部类对象。

2.容器类

  • Collection:

    • List: ArrayList擅长随机访问元素和LinkedList擅长插入、删除、移动元素。
    • Set: HashSet,TreeSet,LinkedHashSet
    • Queue:
  • Map: HashMap, HashTable, TreeMap

  • Collection,List,Set,Map都是接口,继承他们的ArrayList、Vector、HashTable、HashMap、stack是具体的class,可以被实例化。
  • Collections是针对集合类的一个帮助类,提供了一系列的静态方法对各种集合的搜索、排序等操作。
  • 容器类将其对象视为Object,仅能持有对象引用,即指向对象的指针,而不是将对象信息复制一份到数组的某个位置。
  • 选择:各种Lists中,默认选择ArrayList,当插入、删除频繁时,用LinkedList;Vector总是比ArrayList慢,在各种Sets中,HashSet优于HashTree,需要排序时用HashTree,在各种Maps中,HashMap用于快速查找,当元素个数固定时,最好用Array,因为其效率最高。
  • hashMap和HashTable区别:HashMap允许键值为null,HashTable比较慢,因为它是同步的,多个线程访问HashMap时,需要自己实现同步方法。

3.构造函数和析构函数

构造函数可以被重载,不能被覆盖,没有返回值,构造函数代码执行从其最老的祖先类开始向下执行调用,即子类会先调用父类的构造函数。子类会指定一个父类的构造方法调用,如果不指定,则默认调用无参数的构造函数,使用super来调用。在子类构造函数中写super(参数列表);或者super();
子类的构造函数如果要引用super,必须把super放在函数的首位,不然编译会报错;
复制构造函数?

4.多态

  • 多态:一个接口,多种方法,在程序运行的过程中才决定调用哪个函数。允许子类类型的指针赋值给它的父类类型的指针。“向上映射”,相当于在c++中的虚函数,子类覆盖了父类的方法。
  • 覆盖:子类重写父类的函数,函数名、参数类型、返回值类型都与父类的函数一样,父类的方法中必须有virtual关键字。
  • 静态方法不能被覆盖。在内存中的地址空间是固定的,具体执行哪一个,需要看是由哪个类来调用的。
  • 父类 父对象=new 子类 子类构造函数(); 父对象要调用子类独有的方法时,需要将父对象显示的转换成子类对象。
  • 如果在子类中定义了与父类相同的变量和成员函数时,会优先调用子类的定义,如果需要父类的,需要用super.来引用。
  • 不能继承的情况:1.匿名内部类;2.final的类,禁止继承,其内部的方法也默认为final,不能被覆盖,对变量没有要求。

5.抽象类

使用abstract修饰符,不能直接被实例化,并且对抽象类不能使用new操作符,抽象类不能同时又是final的,抽象类可以被抽象类所继承,结果仍然是抽象类。抽象类允许被声明。抽象类可以使一个空类。

6.设计模式

单例模式:
主要作用是保重在java应用程序中,一个class只有一个实例存在。
定义一个类,他的构造函数为private,它有一个static的private的该类变量,在类初始化时实例化,通过一个public的getinstance方法获取对对象的引用,继而调用其中的方法。

public class Singleton{
    private Singleton(){}  //private的构造函数
    private static Singleton instance = new Singleton();
    private static Singleton getInstance(){ return instance;} 
}

原型模式:
对每一个类配一个clone方法;
原型模式是一种创建型设计模式,它通过复制一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的原型,这个原型是可定制的.
原型模式多用于创建复杂的或者耗时的实例, 因为这种情况下,复制一个已经存在的实例可以使程序运行更高效,或者创建值相等,只是命名不一样的同类数据.
浅复制和深复制:
浅复制: 当前对象的字段值被复制时,字段引用的对象不会被复制,两个东西指向同一个地址
深复制:将对象实例中字段引用的对象也进行复制;将创建一个新对象和其中新的变量,原来的对象和新对象不会共享任何东西,改变一个对象对于梁歪一耳光对象没有任何影响。

Java中创建(实例化)对象的五种方式
1、用new语句创建对象,这是最常见的创建对象的方法。
2、通过工厂方法返回对象,如:String str = String.valueOf(23);
3、运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。如:Object obj = Class.forName(“java.lang.Object”).newInstance();
4、调用对象的clone()方法。
5、通过I/O流(包括反序列化),如运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值