java基础重点概念

1.基本数据类型(原生类型):byte,short,int,long,float,double,char,boolean
自动类型转换:小范围的数转为大范围的
自动装箱:Integer a=123; 拆箱再装箱 a=a+3;
2.重载:一个类,函数同名,参数个数、类型、顺序不同,与返回值修饰符无关
重写:子父类,函数同名,参数相同,返回值相容,子访问权限>=父类权限
3.构造函数的初始化顺序:父类静态、子类静态、父类变量或代码块、父类构造函数、子类变量或代码块、子类构造函数
4.接口与抽象类的区别:都不能被实例化,但都可以声明;
接口无构造函数,抽象类可以有;
接口可以被多实现,接口可以继承多个接口,抽象类只能被单继承;

5.面向对象:将以前过程的执行者变成了指挥者,万物皆对象,即“让谁来做?”
面向过程:用函数把步骤一个个实现,使用时再一个个调用,即“我该怎么做”
类:对事物的描述,是封装对象行为和属性的载体
对象:实实在在的个体,实体,封装多个数据
封装:隐藏对象的属性和实现细节,仅仅对外提供访问方式。
继承:子类继承父类的属性和方法
多态:父类引用指向自己子类的对象,体现在重载和复写
6.异常:throwable–Error 系统出错
–Exception–otherException 必须处理,否则编译不通过
–RuntimeExcepton 不需要捕获,可以不处理,也可以捕获,Java编译器不会检查它

7.serlet的生命周期:
加载:容器通过类加载器使用servlet类对应的文件加载servlet
创建:通过调用servlet的构造函数来创建一个servlet实例
初始化:调用servlet 的init()方法
处理客户端请求:当有新的请求时,web容器都会创建一个新的线程来处理,接着调用service方法
卸载:容器在servlet之前调用destory()释放占用的资源
8.集合
集合长度是可变的,只存储引用类型的数据,存储的对象可以是不同类型
数组长度是不可变的

 list 有序可重复  --ArrayList 底层数组 ,查询快增删慢,初始容量10,按原数组的50%延长
                          --LinkedList 底层链表,增删快查询慢
                          --vector 底层数组,按原来100%延长,同步
set 无序不可重复 --hashset 底层hash表,保证元素的唯一性通过hashcode和equals完成
							 --TreeSet 底层二叉树,对元素进行指定顺序的排序(实现Comparable接口,复写compareTo)
map --HashMap 底层哈希表,存null键null值,默认长度16,长度必须是2的次幂(尽量分布均匀的hash函数)
		--HashTable 底层哈希表,同步,不可以存null键null值
		--TreeMap 底层二叉树,对map键进行指定顺序的排序
		--weakhashMap 存null键null值,键是弱键,entry可能被gc自动删除,适用于缓存
		--ConcurrentHashMap  底层采用分段的数组+链表实现,线程安全.Hashtable中采用的锁机制是一次锁住整个hash表,从而在同一时刻只 	能由一个线程对其进行操作;而ConcurrentHashMap中则是一次锁住一个桶
		锁分段技术:首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问.
       遍历通过map.keySet()和map.entrySet()
      
      ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019030311181027.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tub3dfd29ybGQ=,size_16,color_FFFFFF,t_70)
       hashmap的底层原理:利用key的hashCode重新hash计算出当前对象的元素在数组中的下标

存储时,如果出现hash值相同的key,此时有两种情况。(1)如果key相同,则覆盖原始值;(2)如果key不同(出现冲突),则将当前的key-value放入链表中,获取时,直接找到hash值对应的下标,在进一步判断key是否相同,从而找到对应值。
理解了以上过程就不难明白HashMap是如何解决hash冲突的问题,核心就是使用了数组的存储方式,然后将冲突的key的对象放入链表中,一旦发现冲突就在链表中做进一步的对比
9.线程
进程:正在进行中的程序
线程:进程中的程序执行控制单元
同步:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程
异步:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待
并发:应用能够交替执行不同的任务;两个或多个事件在同一时间间隔发生
并行:指应用能够同时执行不同的任务;指两个或者多个事件在同一时刻发生
线程池:jdbc connection,线程thread,对象,这些东西的创建和销毁都是很消耗时间的,所以我们一般都是提前创建好很多这种创建消耗高的东西,用的时候直接去用就行。

线程生命周期:
在这里插入图片描述新建状态:创建线程对象后,三种创建方式:实现Callable 接口,并实现 call()方法;实现runnable 接口,并重写该接口的 run()方法;继承Thread 类,并重写该类的 run 方法。
就绪状态:调用线程对象的start()方法,随时等待cpu调度
运行状态:cpu调度处于就绪态的线程
阻塞状态:暂时放弃CPU的使用权,停止执行进入阻塞(锁被占用,调用wait、sleep或join方法)
死亡状态:执行完run方法或因为异常退出

ThreadLocal 保证不同线程拥有不同实例,相同线程一定拥有相同的实例,即为每一个使用该
变量的线程提供一个该变量值的副本,每一个线程都可以独立改变自己的副本,而不是与其它线程
的副本冲突。
优势:提供了线程安全的共享对象
与其它同步机制的区别:同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之
间进行通信;而 ThreadLocal 是隔离多个线程的数据共享,从根本上就不在多个线程之间共享资源
,这样当然不需要多个线程进行同步了
volatile 修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫 线程将变化值回写到共享内存。
优势:这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

猜你喜欢

转载自blog.csdn.net/know_world/article/details/88085047