面向对象,站在对象的角度,把多个功能合理放到不同对象里,强调具备某些功能的对象。对象是具有某些方法的实体。面向对象稳定性好、可重用性强,有良好的维护性,实现更低的耦合度和更高的内聚。
封装、继承、多态、抽象
把数据和操作数据的方法绑定起来,对数据的访问只能通过定义好的接口。
作用:
①保证数据安全,复制调用者随意更改数据
②提高代码复用性(把公用方法放到一个类中,需要时直接调用)
子类继承父类,重写父类方法,父类中存放多个子类共同的字段和方法,子类存放特有字段和方法。java中是单继承,
作用:
①减少重复代码
②让代码具有延续性
③继承是封装程序中可变因素的重要手段
允许不同子类型的对象对同一消息作出不同响应,方法重载实现编译时的多态性,方法重写实现运行时的多态性。
实现方式:
①操作继承关系
// 父类
public class People {
}
================================
// 子类
public class Girl extends People{
}
================================
public class Test {
People p = new Girl(); // 继承关系
}
②操作实现关系
// 接口
public interface Man {
}
================================
// 实现类
public class BadMan implements Man{
}
================================
public class Test {
Man m = new BadMan(); // 接口和实现类关系
}
将同一类对象的共同特征总结出来,然后构造成类的过程(包括数据抽象和行为抽象)。抽象值关注对象的属性和行为,不关注行为的细节。
public class People{
private String name;//名字
private int age; //年龄
}
1.相对于其他语言,简单易学
2.面向对象,具有更低的耦合度和更高的内聚性
3.与平台无关(JVM是java跨平台的根本)
4.安全可靠,因为java不再支持强大的指针功能
5.支持多线程
编译时异常和运行时异常
异常捕获:try…catch…finally(如果在finally执行前程序突然强行停止,比如停电,那finally也不会运行)
异常抛出:throws
error是系统错误,无法通过程序进行处理(内存溢出)
exception表示异常,可以通过程序来捕获或优化程序来避免
事务是作为单个逻辑工作单元执行的一系列操作,一起想系统提交,要么都执行,要么都不执行。
四大特性:
①原子性:不可分,要么都执行,要么都不执行
②一致性:事务完成时,数据必须处于一致状态
③隔离性:当一个用户对数据操作时,其他用户会被隔离
④永久性:事务完成后,它对数据库的修改被永久保持
1.不要使用select *
2.使用索引
3.减少子查询使用关联查询(left join、right join、inner join)代替
4.减少使用IN或者NOT IN,用exists,not exists或关联查询(带有EXISTS的子查询不返回任何记录的数据,只返回逻辑值“True”或“False”)
5.避免在where字句中用!=或<>,否则将引起放弃使用索引而进行全盘扫描
6.尽量避免在where中进行null值判断,否则将引起放弃使用索引而进行全盘扫描
7.or的查询尽量用union或union all代替
处理对象流的机制,对象流是将对象内容流化。
作用:解决对对象流进行读写操作时所引发的问题。
实现:实现serializable接口,标记该对象可被序列化
实现方式:
//Class.forName("类路径");[最常用]
Class cla=class.forName("com.syq.Demo");
===========================
//类名.class
class cla=Demo.class;
===========================
//对象名.getClass()
Demo d=new Demo();
Class cla=d.getClass();
===========================
//获取类的所有方法信息
Method method=d.getDeclareMethods();
//获取类的所有成员属性信息
Field field=d.getDeclaredFields();
//获取类的所有成员属性信息
Constructor constructor=d.getDeclaredConstructors();
mybatis中使用#{},JDBC中PrepareStatement
#{}是预编译处理,是安全的;${}是字符串代替,仅仅取值,非安全,存在SQL注入
#{}:相当于JDBC中的PrepareStatement
${}:是输出变量的值
常用的动态SQL元素包括if、choose、when、otherwise、where、set、foreach、bind等用标签来代替
//接口中的方法
public List<Branches> finDongTai(@Param("name")String name,@Param("add")String address);//动态
public List<Branches> findLike(@Param("name")String name,@Param("add")String address);//模糊
=====================================
//动态查询
<select id="finDongTai" resultType="com.wj.entity.Branches" >
SELECT * FROM Branches where 1=1
<if test="name!=''and name!=null">
and name =#{name}
</if>
<if test="add!=''and add!=null">
and address =#{add}
</if>
</select>
//模糊查询
<select id="findLike" resultType="com.wj.entity.Branches" >
SELECT * FROM Branches where name like "%"#{name}"%" and address like "%"#{add}"%"
</select>
Ioc—Inversion of Control,即“控制反转”
Spring框架的核心是Spring容器。容器创建对象,将它们装配在一起,配置它们并管理它们的完整生命周期。Spring容器使用依赖注入来 管理组成应用程序的组件。容器通过读取提供的配置元数据来接收对象进行实例化,配置和组装的指令。该元数据可以通过XML,Java注解或 Java代码提供。
实现机制:
interface Fruit{
public abstract void eat();
}
class Apple implements Fruit{
public void eat(){
System.out.println("Apple");
}
}
class Orange implements Fruit{
public void eat(){
System.out.println("Orange");
}
}
class Factory{
//getInstance,使用这种方式使用单例模式创建类的实例,所谓单例模式就是一个类有且只有一个实例,不像object ob=new object();的这种方式去实例化后去使用。
public static Fruit getInstance(String ClassName) {
Fruit f=null;
try {
//实例化对象
f=(Fruit)Class.forName(ClassName).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return f;
}
}
class Client {
public static void main(String[] a) {
Fruit f=Factory.getInstance("io.github.dunwu.spring.Apple");
if(f!=null){
f.eat();
}
}
}
异步:通过事件触发ajax,请求服务器,在此期间无论服务器有没有响应,客户端的其他代码一样课运行;默认异步。
同步:通过事件触发ajax,请求服务器,在此期间等待服务器处理请求,客户端不能做任何处理,在ajax执行完毕后才会执行其他代码。提交请求->等待服务器处理->处理完毕返回