码迷,mamicode.com
首页 > 编程语言 > 详细

java基础知识

时间:2017-12-17 14:11:19      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:acid   存储   throws   信号   调用   状态   jdbc   integer   代码块   

一、JAVA异常

1、runtime exception(一般不需要捕获,除数是0)

2、checked exception(空指针),throws与throw

二、泛型(public static <T extend Comparable & Serializable> T min(T t))

1、虚拟机没有泛型类型对象-所有对象都是普通类。当程序调用泛型方法时,如果擦除返回类型,编译器插入强制类型转换。

 1 import java.util.*; 
 2 public class ErasedTypeEquivalence { 
 3     public static void main(String[] args) { 
 4         Class c1 = new ArrayList<String>().getClass(); 
 5         Class c2 = new ArrayList<Integer>().getClass(); 
 6         System.out.println(c1 == c2); //泛型擦除
 7     } 
 8 }/* Output: 
 9 true 
10 *///:~

2、解决泛型擦除

1)通配符

   <? super T>逆变指明泛型类持有T的基类,则T肯定可以放入

   <? extends T>指明泛型类持有T的导出类,则返回值一定可作为T的协变类型返回

2)定义接口实现

三、反射

在运行状态中,对于任意一个类,都能得到其所有属性和方法,对于任何一个对象都能调用其方法(动态调用对象方法的功能)

clazz.getClass()

四、类加载

1、类加载机制

(1) 装载:查找和导入Class文件;

(2) 链接:把类的二进制数据合并到JRE中;

     (a)校验:检查载入Class文件数据的正确性;

     (b)准备:给类的静态变量分配存储空间;

     (c)解析:将符号引用转成直接引用;

(3) 初始化:对类的静态变量,静态代码块执行初始化操作

2、类加载的三种方式

1)new Date()

2)Class.forName("")-->Class.forName(className, true, this.getClass().getClassLoader())。第二个参数,是指Class被loading后是不是必须被初始化。Class.forName(com.mysql.cj.jdbc.Driver);

3)ClassLoader.loadClass(className)实际上调用的是ClassLoader.loadClass(name, false),第二个参数指Class是否被link。

3、类加载器和双亲委派模型

1)Bootstrap ClassLoader : 将存放于<JAVA_HOME>\lib目录中的,只有符合类库的才会被加载。

2)Extension ClassLoader : 将<JAVA_HOME>\lib\ext目录下的,或者被java.ext.dirs系统变量所指定的路径中的所有类库加载。开发者可以直接使用扩展类加载器。

3)Application ClassLoader : 负责加载用户类路径(ClassPath)上所指定的类库,开发者可直接使用。它负责将系统类路径java -classpath或-Djava.class.path变量所指的目录下的类库加载到内存中。

五、集合

技术分享图片

1、Collection(实现了Iterable接口)

2、链表 将每个对象存放在独立的节点,每个节点还存放序列中下一个节点的引用,添加删除快,数组添加删除慢,需要数组复制。

3、数组列表 ArrayList,底层数组,随机查找快。

4、散列集 HashSet底层HashMap

5、树集 TreeSet 红黑树

6、对象比较 Comparable 接口,得实现这个接口才能比较,compareTo(T);Comparator Compare(T1, T2)

7、队列与双端队列 ArrayDeque(非线程安全,访问快)、Stack(extend Vector)

8、映射表 HashMap 初始16 大小为2^n,JDK7底层数组,数组每一项都是Entry,Hash碰撞解决是拉链法->位桶+链表;JDK8底层数组,数组每一项都是Node,Hash碰撞解决->位桶+链表/红黑树

六、多线程

1、继承Thread、实现Runnable

2、中断线程

3、线程的状态

1)NEW

2)RUNNABLE  start()之后

3)BLOCKED locked之后

4)WAITING wait()、join()

5)TIMED WAITING wait(time)

6)TERMINAL 

技术分享图片

4、线程优先级以及守护线程(当没有其他线程执行时结束)

5、Volatile

6、ThreadLocal

7、线程间通信

1)利用最基本的synchronizednotifywait

2)利用LockCondition

3)信号量a、CyclicBarrier(预定线程数达到后)b、CountDownLatch(计数器减为0)c、Semaphore(允许访问限制资源的线程数)

8、执行器

1)newSingleThreadExecutor:

2)newFixedThreadPool:

3)newCachedThreadPool:

4)newScheduledThreadPool:

5)ThreadPoolExecutor:

五、数据库

1、事务

1)事务特性(ACID)atomacity、consistency、isolation、durability

2)事务隔离级别 (脏读、非重复读、幻想读、丢失修改)--> 未提交读、已提交读、可重复读、串行读

3)锁 共享锁、更新锁、独占锁

4)索引:直接创建(建表时创建)和间接创建(建表后创建)

 

java基础知识

标签:acid   存储   throws   信号   调用   状态   jdbc   integer   代码块   

原文地址:http://www.cnblogs.com/beaconSky/p/8045767.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!