1.面向对象的三大特性
继承、封装、多态
什么是继承?
①继承是面向对象程序设计能够提高软件开发效率的重要原因之一。
②继承是具有传递性的,就像现实中孙子不仅长得像爸爸而且还像他爷爷。
③继承来的属性和方法是隐式的,也就是在本类里面是看不见的。
④一个类只能有一个父类,也就是类只能是单继承。
⑤一个接口可以有多个父类,也就是接口可以是多继承。
实际项目开发中,一个类继承于另一个类,那么前者就是后者的子类,反则反之。
什么是封装?
对象数据和操作该对象的指令都是对象自身的一部分,能够实现尽可能对外部隐藏数据。
实际项目开发中,使用封装最多的就是实体类,常常和 JavaBean (类必须是具体的和公共的,并且具有无参数的构造器)一起使用。
那么,实体类有那些东西呢
答:私有的成员变量、无参数的构造器、有参数的构造器、setter和getters方法、重写tostring方法、重写hashCode和equals方法。
什么是多态?
①多态就是对象拥有多种形态:引用多态和方法多态。
②引用多态:父类的引用可以指向本类对象、父类的引用可以指向子类的对象。
③方法多态:创建本类对象时,调用的方法为本类的方法;创建子类对象时,调用的方法为子类重写的方法或者继承的方法。
④存在多态的必要条件:继承、重写。
⑤多态的作用是消除类型之间的耦合关系。
在实际项目开发中,A 类继承 B 类,如果在 A 类中不重写 B 类的方法的时候,输出的仍旧是 B 类方法里面的信息(B b=new A());如果在A类中重写 B 类的方法的时候,输出的是 A 类方法里面的信息(B b=new A())。
2.Java集合框架树
Collection 接口:它是 Java 集合框架的一个根接口,也是List、Set和 Queue 接口的父接口。同时它定义了可用于操作 List、Set 和 Queue 的方法—增删改查。
Map接口:它提供了一种映射关系,其中的元素是以键值对 (key-value) 的形式存储的。Map 接口有一个重要的实现类 HashMap。
①在 Map 接口中的键值对是以 Entry 类型的对象实例形式存在。
②在 Map 接口中键值( Key 值)是不可以重复的,value 值却可以重复,也就是存在多对一的关系。
③在 Map 接口中提供了分别返回Key值的集合、value值的集合以及Entry集合的方法。
④ Map 支持泛型,同时 Key 值和 value 值都是可以为 null 的。
⑤在 HashMap 中的 Entry 对象是无序排序的,这点特性和 List 接口是相反的。
⑥在 HashMap 中有且只能有一个 Key 值为 null 的映射。(注:ke 值是不能重复的)
List 接口:List 接口有一个重要的实现类 ArrayList (数组序列)。
① List 是元素有序并且可以重复的集合。
② List 可以精确的控制每个元素的插入位置,或删除某个元素的位置。
Comparator接口:临时的比较规则。如果某一个类要实现这个接口,那必然要实现它的 Compare() 方法。
Comparable接口:默认的比较规则。当实现了这个接口,则表示这个类的实例可以比较大小,可以进行自然排序。如果某一个类要实现这个接口,那必然要实现它的 CompareTo() 方法。
3.Java中的IO流
字节流:
//一个字节一个字节的读写
FileInputStream in=
new
FileInputStream(
"源文件"
);
FileOutputStream out=
new
FileOutputStream(
"目标文件"
);
......
in.close();
out.close();
首先要记住,一旦使用了IO流最后一定要记得关闭,这是常识。
//利用缓冲区,高效的读取字节
BufferedInputStream in=
new
BufferedInputStream(
new
FileInputStream(
"源文件"
);
BufferedOutputStream out=
new
BufferedOutputStream(
new
FileOutputStream(
"目标文件"
);
......
in.close();
out.close();
字符流:
InputStreamReader isr=
new
InputStreamReader(
new
FileInputStream(
"源文件路径"
),
"设置编码"
);
OutputStreamWriter osw=
new
OutputStreamWriter(
new
FileOutputStream(
"目标文件路径"
),
"设置编码"
);
......
osw.close();
isr.close();
也可以这样写:
FileReader fr=
new
FileReader(
"源文件路径"
);
FileWriter fw=
new
FileWriter(
"目标文件路径"
);
......
fr.close();
fw.close();
//利用缓冲区,高效的读取字符
BufferedReader br=
new
BufferedReader(
new
FileReade(
"源文件路径"
);
PrintWriter pw=
new
PrintWriter(
"目标文件路径"
);
......
br.close();
pw.close();
序列化和反序列化:
//对象的序列化
ObjectOutputStream oos=
new
ObjectOutputStream(
new
FileOutputStream(file));
这里的file指的是 String file="文件在项目中的路径";
//对象的反序列化
ObjectInputStream ois=
new
ObjectInputStream(
new
FileInputStream(file));
4.Java的Socket通信(多线程)
思路:
①首先创建服务器端Socket,指定并侦听某一个端口,然后循环监听开始等待客户端的连接….
②创建客户端socket,指定服务器地址和端口,然后获取输出流,向服务器端发送请求,并关闭socket输出流。
③服务端接收到客户端的请求后,创建新线程并启动。
④创建线程处理类,执行线程操作,获取输入流,服务端读取客户端用户详情,关闭资源。
⑤执行线程操作,获取输出流,响应客户端请求,客户端接受到服务端的响应,关闭资源。
简单点讲,就相当于我跟你说话(客户端→服务端),你收到我说的话(服务端→线程处理类),大脑进行思考后(线程处理类),做出回答我的话(线程处理类→客户端)。
5.关系型数据库
数据库的三范式:
①字段不可分。
②有主键,非主键字段依赖主键。
③非主键字段不能互相依赖。
T-SQL:
在整个数据库中,查询操作占据增删改查的80%,而说到查询,T-SQL语句自然不能少。如图上示。
增:
①插入单行
insert
into
<表名> (列名)
values
(列值)
②将现有的表数据添加到一个已有表
insert
into
<已有的新表> (列名)
select
<源表列名>
from
<源表名>
③直接拿现有表数据创建一个新表并填充
select
<新建表列名>
into
<新建表名>
from
<源表名>
删:
①删除满足条件的行
delete
from
<表名>
where
<删除条件>
②删除整个表
truncate
table
<表名>
注:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能用语有外建约束引用的表。
改:
①更新
update
<表名>
set
<列名=更新值>
where
<更新条件>
子查询:
SELECT
*
FROM
t1
WHERE
column1 = (
SELECT
column1
FROM
t2);
其中:
①SELECT * FROM t1 …称为外查询。
②SELECT column1 FROM t2 称为子查询。
所以,我们就说子查询是嵌套在外查询内部的。而事实上它也有可能在子查询内部再嵌套一个或者多个子查询。
这里要注意,子查询必须出现在圆括号之间哦。