super与this
super关键字:
我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:
指向自己的引用。
案例
重写同名方法后
void eatTest() {
this.eat(); // this 调用自己的方法
super.eat(); // super 调用父类方法
}
final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:
声明类:
final class 类名 {//类体}
声明方法:
修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
构造方法的继承
- 子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。
如果父类构造器有参数,子类调用时必须在构造器中显式的通过 super 调用父类构造器并添加适当的参数 - 若父类构造器没有参数,则自雷不需要使用 super 调用,系统会自动调用父类的无参构造器。
案例
class SuperClass { // 父类
private int n;
SuperClass(){ // 无参构造器
System.out.println("SuperClass()");
}
SuperClass(int n) { // 带参构造器
System.out.println("SuperClass(int n)");
this.n = n;
}
}
子类继承
class SubClass extends SuperClass{
private int n;
SubClass(){ // 自动调用父类的无参数构造器
System.out.println("SubClass");
}
// 结果输出:SuperClass()、SubClass
public SubClass(int n){
super(300); // 调用父类中带有参数的构造器
System.out.println("SubClass(int n):"+n);
this.n = n;
}
}
// 输出结果:SuperClass(int n)、SubClass(int n):100[具体的值]
JDBC
JDBC API主要功能:
与数据库建立连接、执行SQL 语句、处理结果。
1. DriverManager :依据数据库的不同,管理JDBC驱动。
2. Connection :负责连接数据库并担任传送数据的任务。
3. Statement :由 Connection 产生、负责执行SQL语句。(现在用PreparedStatement类,也就是Statement 的子类)
4. ResultSet:负责保存Statement执行后所产生的查询结果。
过程:
1. 准备MySQL的驱动类
- 将驱动类导入eclipse中新建的lib文件,并 Build Path,这样就能够使用
- 保证电脑的MySQL服务运行
2. 代码部分:
向数据库中插入数据:
CREATE TABLE `k_user` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`USERNO` varchar(30) DEFAULT NULL,
`USERNAME` varchar(255) DEFAULT NULL,
`PWD` varchar(20) DEFAULT NULL,
`DEPTNO` varchar(30) DEFAULT NULL,
`SEX` varchar(2) DEFAULT NULL,
`AGE` int(11) DEFAULT NULL,
`POSITION` varchar(50) DEFAULT NULL,
`HOMETOWN` varchar(255) DEFAULT NULL,
`TELPHONE` varchar(20) DEFAULT NULL,
`EMAIL` varchar(50) DEFAULT NULL,
`ROLENO` varchar(1) DEFAULT NULL,
`REMARK` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
)
插入数据:
INSERT INTO `k_user` VALUES ('1', 'admin', '系统管理员', '123456', 'dept_0001', '0', '99', '管理员', '山东', '18998881234', '10000000@163.com', '0', null);
INSERT INTO `k_user` VALUES ('2', 'user_0002', '王武', '123456', 'dept_0001', '0', '23', '员工', '山东', '10000000001', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('3', 'user_0003', '刘成', '123456', 'dept_0001', '0', '20', '员工', '北京', '10000000002', '10000000@163.com', '1', '总部外派');
INSERT INTO `k_user` VALUES ('4', 'user_0004', '杨胜', '123456', 'dept_0001', '0', '33', '员工', '山东', '10000000003', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('5', 'user_0005', '孙小斌', '123456', 'dept_0002', '0', '28', '员工', '上海', '10000000004', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('6', 'user_0006', '赵刚', '123456', 'dept_0002', '0', '24', '员工', '山东', '10000000005', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('7', 'user_0007', '李争', '123456', 'dept_0002', '0', '35', '经理', '江苏', '10000000006', '10000000@163.com', '1', '实习');
INSERT INTO `k_user` VALUES ('8', 'user_0008', '崔建', '123456', 'dept_0002', '0', '46', '员工', '山东', '10000000007', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('9', 'user_0009', '何娟', '123456', 'dept_0002', '1', '19', '员工', '上海', '10000000008', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('10', 'user_0010', '方晓花', '123456', 'dept_0003', '1', '26', '员工', '山东', '10000000009', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('11', 'user_0011', '田小草', '123456', 'dept_0003', '1', '27', '员工', '北京', '10000000010', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('12', 'user_0012', '候丽', '123456', 'dept_0003', '1', '32', '员工', '山东', '10000000011', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('13', 'user_0013', '黄小仙', '123456', 'dept_0003', '1', '30', '员工', '浙江', '10000000012', '10000000@163.com', '1', null);
INSERT INTO `k_user` VALUES ('14', 'user_0014', '王文欣', '123456', 'dept_0003', '1', '37', '员工', '山东', '10000000013', '10000000@163.com', '1', '');
INSERT INTO `k_user` VALUES ('15', 'user_0015', '李莉', '123456', 'dept_0003', '1', '55', '部门经理', '山东', '10000000014', '10000000@163.com', '1', '');
try {
//1.加载JDBC驱动
Class.forName(JDBC驱动类);
}
… …
try {
//2.与数据库建立连接
Connection con=DriverManager.getConnection(URL,数据库用户名,密码);
//3.发送SQL语句并得到结果
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
//4.处理返回结果
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
//5.释放资源
rs.close();
stmt.close();
con.close();
}
数据库访问基类(BaseDao)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 数据库访问基类
*/
public class BaseDao {
//数据库驱动
private String driver="com.mysql.jdbc.Driver";
//数据库连接地址
private String url="jdbc:mysql://localhost:3306/orcl";
//数据库用户名
private String name="root";
//数据库密码
private String password="";
public Connection conn;//数据库连接对象
public PreparedStatement ps;//数据库操作对象
public ResultSet rs;//存放结果数据
/**
* 获取数据库连接
*/
public Connection getConn(){
try {
Class.forName(driver);
this.conn=DriverManager.getConnection(url,name,password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
测试:
public static void main(String[] args) throws Exception {
//1. 获取连接
Connection conn=new BaseDao().getConn();
//2. 执行查询
String sql="select * from k_user";
PreparedStatement ps=conn.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
//3. 循环输出数据
while(rs.next()){
System.out.println("用户名是:"+rs.getString("username"));
}
}
分层开发的特点及好处
三层:Dao持久层、Service业务层、View视图层
分层的特点:
- 每一层都有自己的职责。
- 上一层不用关心下一层的实现细节,上一层通过下一层提供的对外接口来使用其功能。
- 上一层调用下一层的功能,下一层不能调用上一层功能。
分层开发的好处:
- 各层专注于自己功能的实现,便于提高质量。
- 便于分工协作,提高开发效率。
- 便于代码复用。
- 便于程序扩展。
异常
异常分类
1.捕获异常
try:执行可能产生异常的代码。
catch:捕获异常。
finally:无论是否发生异常,代码总能执行。
多重异常的执行规则:
- 排列catch 语句的顺序:先子类后父类
- 发生异常时按顺序逐个匹配
- 只执行第一个与异常类型匹配的catch语句
2.声明异常
throws:声明方法可能要抛出的各种异常。
如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。
throws 关键字放在方法签名的尾部。
3.抛出异常
throw:手动抛出异常。
常见异常
异常类型 | 说明 |
---|---|
Exception | 异常层次结构的父类 |
ArithmeticException | 算术错误情形,如以零作除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问 null 对象成员 |
ClassNotFoundException | 不能加载所需的类 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException | 数字格式转换异常,如把"abc"转换成数字 |