java零碎复习笔记总结

本文地址:http://www.cnblogs.com/maplefighting/p/8012196.html 

1、新程序中不应该使用过时的Vector,Hashtable和Stack

2、  (1) ==对于基本数据类型,判断两个变量是否相等

(2) equals不能用于基本数据类型

(3) == 比较多是内存地址,equals比较的是值

(4) object类中 equals与==是一样的,而String,Integer重写了equals方法

(5) == 比 equals 快

3、java方法参数:

(1)一个方法不能改变一个基本数据类型的参数

(2)一个方法可以改变一个对象参数的状态

(3)一个方法不能让对象参数引用另一个新的对象

4、Java8 新特性

(1)接口的默认方法

  interface Form{

        default double sqrt(int a) { return ...;}

  }

(2)lambda表达式:(param) -> (expression) , (param) -> {statements}

    为函数式接口的一个具体实现实例

(3)方法引用

(4)函数式接口 :只定义一个抽象方法的接口

(5)Stream API

(7) Data Time API

(8) Optional类

5、在覆盖一个方法的时候,子类方法不能低于超类方法可见性

6、在Java程序设计语言中,所有链表实际上是双向链表

7、LinkedHashSet 和LinkedHashMap按访问顺序迭代

8、必须把package放在第一句

9、一个.class文件有且只有一个类编译后class

10、struts是mvc的一种实现,控制:struts-config.xml,角色为ActionServlet,模型:ActionForm,Action,JavaBean

11、Java锁的类型:(1)自旋锁  (2)阻塞锁  (3)可重入锁  (4)读写锁  (5)互斥锁  (6) 悲观锁  (7) 乐观锁  (8) 公平锁  (9) 非公平锁

(10) 偏向锁  (11) 对象锁  (12) 线程锁  (13) 锁粗化  (14) 轻量级锁  (15) 锁消除  (16) 锁膨胀  (17) 信号量

12、字符型 默认值:'\u0000' 范围0~2^16  -1

13、Arrays.asList() 将一个数组转化成List ,返回ArrayList对象,但并非java.util.ArrayList类,而是Arrays的静态内部类

14、Java接口允许定义成员,但必须是常量

15、Java程序的种类有Applet,Application,Servlet

16、集合类主要分为两大类:Collection和Map

(1)ArrayList是基于数组实现,不是线程安全,可以用Collection.SynchronizedList(List l)返回线程安全类

默认容量为10,扩容时在原来基础上加上容量的一半

(2)LinkedList是一个集成与AbstractSequentialList的双向链表,可以当作栈,队列或双端队列。

非同步的

实现序列化,写入到输出流时,先写“容量”,再写数据。读出输入流时,先取“容量”

对比:对于随机访问get和set。ArrayList优于LinkedList

当插入数据量很小时,两者相差不大,当插入的数据量大时,大约在1/10之间。LinkedList会优于ArrayList。

17、HashMap

a、默认容量为16,2的幂

b、加载因子 0.75f,哈希表达到时自动增长

c、初始化table是在第一次往hashMap put时

d、返回索引位置indexFor,返回h&(length-1)。必须是2的幂,使数据均匀分布

e、jdk1.8 扩容时要么在原位置,要么再移动2次幂。小于6时变链表,大于8时变树,数组长度大于64时才考虑树

18、LinkedHashMap  非线程安全,LRU算法。双向循环链表,在HashMap上封装的

19、Java基本数据类型  byte 8,short  16,int 32,long 64,float 32,double 64,boolean,char  16(unicode)

20、Object的重要方法:equals()   hashcode()    toString()     clone() (Java只实现浅拷贝,个人没验证过)   notify()    notifyAll()    wait() (可用于生产者消费者)

21、Object  Throwable    Error

                                        Exception         InterruptedException

                                                                IOException

                                                                RuntimeException

Error不应该捕获,为虚拟机问题

runtimeException可以不try/catch

try可以不加catch

22、Java IO与NIO

                IO       面向流       阻塞IO         无选择器

               NIO     面向缓冲   非阻塞IO     有选择器

Java IO主要用装饰模式,适配器模式

标准的IO基于字节流与字符流进行操作,NIO通过通道和缓冲区进行操作。NIO可以异步使用IO

Java NIO主要有Channels,Buffers,Selectors

NIO可以使用(selector)一个(或几个单线程)管理多个通道

如果每个连接只发送少量数据,可以使用NIO,如果有少量连接发送大量数据使用IO

23、sleep和wait的区别

sleep是 Thread方法      wait是Object方法

不会释放锁                   会释放锁

24、Lock的await/signal和Object的wait/notify区别

(1)Lock不用synchroinzed把同步代码包装起来

synchroinzed(obj) {

        wait(); //signal();

}

(2)阻塞需要另一个对象condition

ReetrantLock lock = new ...();

Condition condition = lock.newCondition();

lock.lock();

condition.await();  //condition.signal();

lock.unlock();

25、equals相等,hashcode一定相等

对象相等,hashcode一定相等。hashcode相等,对象未必相等

基本变量没有hashcode和equals方法

hashMap,hashSet要重写hashcode

hashcode 返回int  (将对象内部地址转换)

26、(1) static 方法只能访问static方法,不能访问非static。

可以object.method和class.method

存储在数据区

(2) final类不能被继承,例如String

方法可以被继承但不能被覆盖

27、Java三大特性:封装,继承,多态   //(抽象)

继承:子类继承父类,使子类具有父类的属性和方法,有效实现代码复用

多态:子类重写父类方法,父类类型引用指向子类对象,动态调用

Java语言特点:面向对象,跨平台,安全

28、使用抽象类是为了代码复用,使用接口是为了实现多态

(1) abstract有自己的数据成员,interface只有 final static成员

(2) abstract可以有非抽象方法,接口中不能有(jdk8有默认方法)

(3)Java可以实现多个接口

29、类初始化**:父类静态变量->父类静态代码块->子类静态变量->子类静态代码块->父类非静态变量->父类非静态代码块->父类构造函数->子类......

30、final一定要初始化

31、二叉树度数表示该节点分叉

n0 = n2 + 1         n = n0 + n1 + n2

32、重载,参数类型和个数,顺序不同,无法以返回类型作为区分。 可以有不同返回类型,修饰符,异常

33、静态可以访问静态,不能访问非静态。非静态都可以

34、jre包含jvm,基本类库。   jdk包含jre,包含编译器,开发工具和类库

35、同步:指用户进程触发I/O并等待或轮询是否就绪

异步:触发I/O后做自己的事情,当I/O完成时会得到通知

阻塞:试图对文件读写时,没有东西...进入等待

非阻塞:没有东西可读或不可写时,马上返回

36、Java编译成字节码后,jvm解释运行

二进制文件  .class

解释型语言

37、jdbc桥接模式。提供两套接口,一个面向数据库厂商,一个面向JDBC使用者

38、设计模式六大原则

(1)单一职责:一个类只负责一项职责

(2)里氏替换:子类可以扩展父类的功能,但不能改变父类功能

(3)依赖倒置:抽象不应该依赖细节,细节应该依赖抽象

(4)接口隔离

(5)迪米特原则:一个对象应该对其他对象保持最少的了解

(6)开闭原则:对扩展开放,对修改关闭

39、boolean不能和任何类型转换

40、Integer i = 59 时会调用integer.valueOf() 方法

该方法返回一个Integer对象,如果i在[-128,127]之间,如果存在IntegerCache.cache的值,则返回引用,否则new一个对象

int基本类型与其他 ==比较,只比较值

41、(1)增强for (foreach)循环时不能使用集合删除元素

(2)增强for不能使用迭代器中的方法

(3)增强for有便利元素,普通for没有

普通for比较适合list类(数组)

增强for比较适合链表结构

 

参考书籍:Java核心技术卷,大话设计模式(大鸟,小菜)设计模式(挺有趣的一本书)effective javaJava 8实战,java编程思想(有点老了)

--------------------------------------------------------------------------------------------------------------

 以上为maplefighting个人笔记整理,如有出错,欢迎指正

posted @ 2018-01-05 21:25  maplefighting  阅读(334)  评论(0编辑  收藏  举报