面向对象和面向过程的区别;
面向过程 : 他的性能会更好; 但是因为调用类会被实例化; 所以消耗会很大, 难维护,复用率低 ; 一般来说像linux , C , 单片机会用到面向过程;
面向对象 : 他复用性好,耦合低,易维护; 但他的性能低; --- 相对面向过程
面向过程的4个特性;
继承 : 是对有着共同特性的多类事物,进行再抽象成一个类。这个类就是多类事物的父类。父类的意义在于抽取多类事物的共性
封装 : 把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行封装隐藏。封装分为属性的封装和方法的封装
多肽 : 允许不同类的对象对同一消息做出响应。方法的重载、类的覆盖正体现了多态
抽象 : 就是把现实生活中的某一类东西提取出来,用程序代码表示,我们通常叫做类或者接口。抽象包括两个方面:一个是数据抽象,一个是过程抽象。数据抽象也就是对象的属性。过程抽象是对象的行为特征
String和StringBuffer、StringBuilder的区别:
String的底层是用字符数组来保存的, 他的底层代码是 private final char value[] , 所以他是不能被修改的; 因为Final修饰;所以线程安全;
StringBuffer,StringBuilder的底层是用char value[], 所以他能被改变; 他们共同继承AbstractStringBuilder类, 因为父类有一些公有的方法,列入indexof, append, insert;所以他们的线程是不安全的;
StringBuffer虽然继承了AbstractStringBuilder类; 但是内部对方法进行了同步代码块 和 同步方法 , 所以他的线程是安全的;
抽象类和接口的区别:
语法层次 : 抽象类和接口分别给出了不同的语法定义。
设计层次 : 抽象层次不同,抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但 是接口却是对类局部(行为)进行抽象。抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。
跨域不同 : 抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a"关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的契约而已,"like-a"的关系。
抽象类里面,可以有抽象方法,和非抽象方法, 接口里全是抽象方法 ;
泛型<参数化类型>;
泛型,我们一般称为伪泛型 ; 因为它能被反射暴力破解; 创建集合时就指定集合元素的类型,该集合只能保存其指定类型的元素,避免使用强制类型转换。Java编译器生成的字节码是不包涵泛型信息的,泛型类型信息将在编译处理是被擦除,这个过程即类型擦除。 这也是反射能破解的原因;
集合和数组的区别;
数组有长度限制,是定死了, 但是集合没有;
集合的区别
List和Set继承自Collection接口。
Set无序不允许元素重复。HashSet和TreeSet是两个主要的实现类。
List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。
Map也属于集合系统,但和Collection接口没关系。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashMap、TreeMap和Hashtable是三个主要的实现类。
HashMap和HashTable区别
1).HashTable的方法前面都有synchronized来同步,是线程安全的;HashMap未经同步,是非线程安全的。
2).HashTable不允许null值(key和value都不可以) ;HashMap允许null值(key和value都可以)。
3).HashTable有一个contains(Object
value)功能和containsValue(Object
value)功能一样。
4).HashTable使用Enumeration进行遍历;HashMap使用Iterator进行遍历。
5).HashTable中hash数组默认大小是11,增加的方式是old*2+1;HashMap中hash数组的默认大小是16,而且一定是2的指数。
6).哈希值的使用不同,HashTable直接使用对象的hashCode; HashMap重新计算hash值,而且用与代替求模。