Java个人笔记

1.java异常类
异常时指程序运行时(非编译)所发生的非正常情况或者错误,当程序违反了规则,jvm就会将出现的错误表示一个异常抛出。异常也是java的对象,定义了基类java.lang.throwable作为异常父类。这些异常包括error和exception。两大类error类异常主要是运行时逻辑错误导致,一个正确程序中是不应该出现error的。当出现error一般jvm会终止。exception表示可恢复异常,包括检查异常和运行时异常。检查异常是最常见的异常比如io和sql异常,都发生在编译阶段。这类通过try catch捕捉。
而运行时异常,编译器没有对其进行捕捉和处理。一般都会把异常向上抛出,直到遇到处理代码位置,若没有处理块就会抛到最上层,多线程用thread.run抛出,单线程用main抛出。常见的运行异常包括:空指针异常,类型转换异常,数组越界异常,数组存储异常,缓冲区溢出异常,算术异常等。

2.Object类
Object是基类,java中的所有的类都直接或间接的继承Object
Object类是层次结构的根,java中所有的类从根本上都继承自这个类
Object类是java中唯一没有父类的类
其他所有的类,包括标准容器类,数组等都继承Object类中的方法。
接口没有继承Object(有人说接口可以看作一种特殊的类)

3.Java两类程序
可独立运行的程序 和 嵌入式运行的程序
stand alone applications(applications)
applets、JSP、java setvelet

4.Java表达式转型规则
由低到高转换
*所有的byte、short、char型的值将会被提升为int型
*如果一个操作数是long型,计算结果是long型
*如果一个操作数是float型,计算结果是float型
*如果一个操作数是double型,计算结果是double型
*被final修饰的变量不会自动改变类型,当2个final修饰操作数时,结果会根据左边变量的类型而转换。

5.Java的并发
CopyOnWriteArrayList适合使用在读操作上远远大于写操作的环境中,比如缓存。
ReadWriteLock当写操作时,其他线程无法读取或写入数据,而当读操作时,其他线程无法写入数据但是可以读取数据。适合用于读取远远大于写入的操作。

6.synchronized 和 volatile关键字
sychronized关键字用来给对象和方法或者代码块,当它锁定一个方法或者一个代码块的时候,同一个时刻最多只有一个线程执行这段代码。
volatile关键字用来确保变量的更新操作通知到其他的线程,当把变量声明为volatile类型后,编译与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。然而在访问volatile变量时不会执行加锁操作,因此也就会执行线程阻塞,因此volatile变量是一种比synchronized关键字更轻量级的同步机制。

7.next数组求法

如下:
i :0 1 2 3 4 5 6 7 8 9 10 11
s:a b a b a a a b a b a a

next[i]值主要看s[i]之前的字符串中重复的子串长度
next[0]=-1 定值
next[1]是看s[1]之前的字符串“a”中重复的子串长度为0,故next[1] = 0。
next[2]是看s[2]之前的字符串“ab”中重复的子串长度为0,故next[2] = 0。
next[3]是看s[3]之前的字符串”aba”中重复的子串长度,s[0]与s[2]重复,长度为1,故next[3] = 1。
next[4]是看s[4]之前的字符串”abab”中重复的子串长度,s[01]与s[23]重复,长度为2,故next[4] = 2。
next[5]是看s[5]之前的字符串”ababa”中重复的子串长度,s[012]与s[234]重复,长度为3,故next[5] = 3。
next[6]是看s[6]之前的字符串”ababaa”中重复的子串长度,s[0]与s[5]重复(因为多了一个a,无法找到长度为3的重复字符串,这只能是s[0]和s[5]重复),长度为1,故next[6] = 1。
同样的,求next[7]和next[8]、next[9]、 next[10]、 next[11] 分别为1和2、3、4、5。

8.JSP内置对象和属性
(1)request: 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
(2)response: response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。
(3)session:session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例.
(4)application: application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。
(5)out:out对象是JspWriter类的实例,是向客户端输出内容常用的对象
(6)page:page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例
(7)exception: exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
(8)pageContext:pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext
(9)config:config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)

9.Java中的四类八种基本数据类型
第一类:整数类型 byte short int long
第二类:浮点型 float double
第三类:逻辑型 boolean(它只有两个值可取true false)
第四类:字符型 char

10.java内存
java把内存分为两种,一种叫做栈内存,一种叫做堆内存。
在函数定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间立刻被另做他用。
堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或对象,引用变量相当于数组或对象起的一个别名或者代号。

引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候(比如先前的引用变量x=null时),才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因。

11.java基本类型的默认值和取值范围
这里写图片描述

12.jvm classLoader architecture
a、Bootstrap ClassLoader/启动类加载器
主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作
b、Extension ClassLoader/扩展类加载器
主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作
c、System ClassLoader/系统类加载器
主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作
d、 User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类)
在程序运行期间, 通过java.lang.ClassLoader的子类动态加载class文件, 体现java动态实时类装入特性

13.创建并启动线程的过程
创建并启动线程的过程为:定义线程—>实例化线程—>启动线程
一定义线程:1.继承java.lang.Thread类 2.实现java.lang.Runnable接口
二实例化线程:1如果是继承了Thread类,则直接通过new来创建即可;2.如果是实现了Runnable接口,则用Thread的构造方法:
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
三启动线程:在线程的Thread对象上调用start()方法。

14.Java异常处理过程
Java语言中处理异常包括四个环节:声明异常、抛出异常、捕获异常和处理异常。
throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。
try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。
catch用于捕获从try中抛出的异常并作出处理。
finally语句块是不管有没有出现异常都要执行的内容。

15.线程
start是启动线程对象
sleep是让线程睡眠一段时间,在此期间线程不消耗cpu资源suspend是让线程挂起,暂停执行,如果要回复必须由其他线程条用resume方法
run是用来执行线程体中的具体的内容

16.ArrayList的构造函数
ArrayList的构造函数有三个:
(1)ArrayList()构造一个初始容量为 10 的空列表。
(2)ArrayList(Collection< ? extends E > c)构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
(3)ArrayList(int initialCapacity)构造一个具有指定初始容量的空列表。

17.构造散列函数的方法
直接定址法
数字分析法
折叠法平方取中法
减去法基数转换法
除留余数法
随机乘数法
字符串数值哈希法
旋转法
伪随机数法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值