面向对象
- 较高开发效率
- 保证程序的鲁棒性
- 保证程序的高可维护性
(我觉得下面解释的不怎么好,待更新)
封装,对类的数据和方法实行保护,对可信的类可以操作,不可信的类进行信息隐藏
继承,层次模型,允许和鼓励类的重用,子类可以从父类继承方法和成员变量,可以修改或增加新的方法,使之适合新的需要,只能继承public和protected修饰的成员变量和方法
多态,代码重用的重要机制
- 方法的重载
一个类中体现,不同参数类型,个数,顺序
不能通过 - 方法的覆写(运行时多态)
#java基础
###java程序初始化顺序
1父类优先于子类
2静态变量/对象优先,只初始化一次
3按照顺序初始化
父类静态变量-父类静态代码块-子类静态变量-子类静态代码块-父类代码块-子类代码块-父类构造方法-子类构造
接口和抽象类
java是单继承,所以引入接口这个概念
分类 | 接口 | 抽象类 |
---|---|---|
概念 | 抽象方法的集合,特殊的抽象类 | - |
包含内容 | 均为抽象方法(1.8之后可以使用default,写出方法体,不是必须继承),public修饰,常量用public static final修饰,必须赋初始值 | 抽象方法的类一定是抽象类,可以有方法体 |
继承方法 | 类可以实现多个接口,接口可以继承接口 | 单继承,抽象类可以继承具体类 |
使用场景 | 功能不需要累加 | 功能需要累计,充当公共类 |
相同点:
1.都不能实例化
2.
Object类中的方法
clone()方法
返回一个Object的复制,返回的是一个新的对象,而不是一个引用
1)实现clone需要继承Cloneable接口(标识接口)
2)重写Object类的clone方法
3)在方法中调用Object o = super.clone();实现浅复制
finalize()
垃圾回收器回收时会调用这个方法,可以覆写对其他资源的回收(文件关闭)
什么是反射
反射能在运行时对类进行装载,增加程序灵活性,不恰当的使用反射会影响系统性能
得到一个对象所属的类;
获取一个类所有成员变量和方法;
在运行时创建对象;
在运行时调用对象的方法;
运行时动态创建类;
Class c = Class.forName("类名");
类名 ob = (类名)c.newInstence();
如何获取class
1)如上面示例
2)列名.class
3)示例.getClass();
获取父类名
getClass().getName();
this.getSuperClass().getName();
java创建对象的4个方法
1)new
2)反射出示例,如上示例
3)通过clone方法
4)反序列化的方式创建对象(待完善)
this,super
super()必须为构造函数第一条语句
switch
只支持整型例如int以及包装类Integer,byte/short/char能够隐式转换为int,long/float/double/String不能隐式的转为int,所以不能用作switch表达式
jdk1.7之后String可以放入switch,请注意兼容性!!!调用的hashcode
Math类
java与中文
默认使用unicode编码
String str = "你好";
Sysout(str.length+"="+str.getBytes().length);
//output:2 = 4
字符串中查找中文代码
//1.判断字节长度与字符串长度
str.getBytes().length ==str.length()
//2.第二步,正则匹配
String regEx = "[\u4e00-\u9fa5]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
while(m.find()){
Sysout(m.group(0)+"");
}
finally
finally肯定会执行,并且执行finally中的return语句
…
忽然找到finally不执行的情况
1)在try语句执行之前就出现异常
2)try中有System.exit(0);
###IO流,IO类使用了装饰者设计模式
流:有序字节集合
- 1.字节流,8bit传输,继承于InputStream,OutputStream
- 2.字符流,16bit,会用到缓存,继承与Reader和Writer
File类
Collections集合类的包装类
List/Queue/Set/Stack都继承自Collection接口
java web
servlet与jsp
servlet采用java编写的服务端程序,运行与web服务器中的servlet容器,使用流程:
1)向servlet发起请求
2)web服务器接受请求,交给相应的容器,创建HttpServletRequest和HttpServletReponse
3)容器根据url找到对应的servlet,针对请求创建一个线程
4)容器调用servlet的service()方法,将生成的动态页面相应给容器,在此之前调用init,之后调用destory方法并只调用一次
5)容器把相应消息组装成http返回给客户端,删除2)中的两个对象
转发和重定向
redirect:请求重定向:客户端行为,本质上为2次请求,地址栏改变,前一次请求对象消失。举例:你去银行办事(forward.jsp),结果告诉你少带了东西,你得先去公安局办(index.html)临时身份证,这时你就会走出银行,自己前往公安局,地址栏变为index.html.
forward:请求转发:服务器行为,地址栏不变。举例:你把钱包落在出租车上,你去警察局(forward.jsp)报案,警察局说钱包落在某某公司的出租车上(index.html),这时你不用亲自去找某某公司的出租车,警察局让出租车自己给你送来,你只要在警察局等就行。所以地址栏不变,依然为forward.jsp
请求转发:forword 一次请求,地址栏不变。比如你要问小李借钱,小李说没钱,但是小李帮你从小王那借了钱。这样你还在原地,只开了一次口,就借到了钱。 请求重定向:redirect 两次请求,地址栏变。 同样是问小李借钱,小李说没钱,但是小李告诉你小王有钱,但是小李不帮你借,只告诉你小王在哪,这时你就得去小王家借钱,最终借到了钱。这样你换了一个地方,并且开了两次口才借到了钱。
redirect:请求重定向:客户端行为,本质上为2次请求,地址栏改变,前一次请求对象消失。举例:你去银行办事(forward.jsp),结果告诉你少带了东西,你得先去公安局办(index.html)临时身份证,这时你就会走出银行,自己前往公安局,地址栏变为index.html.
AJAX
再不刷新页面的情况下通过服务器进行少量数据的交互来提高交互性,降低了服务器的网络负载,使响应时间缩短.
AJAX是客户端技术,核心是javascript对象XmlHttpRequest,支持异步请求的技术
###数据库连接池工作机制
数据库连接是珍贵且有限的
服务器启动时创建一定数量的池连接,并一直维持不少于这个数量的连接,当程序访问数据库时,从池中获取一个连接,而不是创建一个新的连接,如果当前没有空闲连接,则会在连接池中创建一定数量的连接