1.多态的了解
多态存在有三个前提
继承,重写,父类引用指向子类对象。
多态成员访问的特点:
a.成员变量
编译看左边(父类),运行看左边(父类)
b.成员方法
编译看左边(父类),运行看右边(子类)。动态绑定
c.静态方法
编译看左边(父类),运行看左边(父类)。
(静态和类相关,算不上重写,所以,访问还是左边的)
只有非静态的成员方法,编译看左边,运行看右边
2.什么是内部类,内部类的作用
内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。
内部类的主要作用如下:
a. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
b. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
c. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
3.抽象类的意义
抽象类体现的是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展,改造,但子类总体上会大致保留抽象类的行为方式
4.接口的意义
接口体现的是一种规范
5.内部类的设计意图
一个类可以访问另一个类的私有成员(封装性)
让Java可以实现多继承
6.静态内部类
如果内部类不会引用到外部类的东西的话,强烈建议使用静态内部类,因为这样更节省资源,减少内部类指向外部类的引用
7.Integer转化为String的原理
d:使用Integer.ValueOf方法
8.匿名内部类
方便编写程序而设计的一个机制,有时候内部类只需要创建一个它的对象,以后不会在使用它,这个时候就使用匿名内部类。而且省去了起名字的麻烦
10.静态代理和动态代理区别
静态代理类:由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理类:在程序运行时,运用反射机制动态创建而成。
静态代理通常只代理一个类,动态代理是代理一个接口下的多个实现类。
静态代理事先知道要代理的是什么,而动态代理不知道要代理什么东西,只有在运行时才知道。
动态代理是实现JDK里的InvocationHandler接口的invoke方法,但注意的是代理的是接口,也就是你的业务类必须要实现接口,通过Proxy里的newProxyInstance得到代理对象。
还有一种动态代理CGLIB,代理的是类,不需要业务类继承接口,通过派生的子类来实现代理。通过在运行时,动态修改字节码达到修改类的目的。
11.依赖注入 ButterKnife和Dagger2
12.泛型 Java泛型的作用和原理
13.String为什么设计成不可变的 String为什么设计成不可变 14.equals和hashcode方法 equals和hashCode方法
15.Object中的方法
wait,notify,hashcode,clone,equals,finalize,tostring,getclass
16.clone方法 Clone方法
17.iterator和listiterator区别 iterator和listitertor区别 18.java集合
19.concurrenthashmap
20.Collections.synchronizedMap()
21.如何控制某个方法允许并发访问线程的个数,使用信号量
22.什么导致线程阻塞 什么导致线程阻塞
23.Java如何正确停止一个线程 如何正确停止一个线程