一、
1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
2. 白盒测试:需要写代码,关注程序具体的执行流程。
二、
1.Junit使用:白盒测试
- 定义一个测试类:测试类名建议为类名+Test.
- 定义测试方法:可以独立运行:方法名test测试的方法名;返回值void; 参数列表空参。
- 给方法加@Test:
- 加入pom.xml依赖或者jar包。
- 判定结果:红色表示测试失败,绿色测试成功。
2. 初始化方法@Before:用于资源的申请,所有测试的方法在执行之前都会先执行该方法。
3. 释放资源方法@After: 在所有测试方法执行完后,都会自动执行该方法。
三、反射:框架设计的灵魂
1.框架是半成品软件。可以在框架的基础上进行软件开发,简化编码。
2.概念:将类的各个组成部分封装为其他对象,这就是反射机制。
3.Java代码经历的三个阶段:
- 源代码阶段:.java--->javac编译 为 .class
- Class类对象阶段: 类加载器ClassLoader把 .class 加载到内存,class类对象:成员变量、构造方法、成员方法。
- Runtime运行时阶段:new对象。
4.好处:在程序的运行过程中操作这些对象:
- . 就运用的反射机制。
- 可以解耦,提高程序的可扩展性。
5.获取Class对象的方式:
- Class.forName("全类名"): 将字节码文件加载进内存,返回class对象//多用于定义配置文件,读取文件,加载类。
- 类名.class: 通过类名的属性class获取//多用于参数的传递。
- 对象.getClass():getClass()方法在Object类中定义着。//多用于对象的获取字节码的方式。
- 结论: 同一个字节码文件.class在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的class对象都是同一个。
6. 使用Class对象:功能:获取功能:
- 获取成员变量们:Field[ ] getFields()
- 获取构造方法们:
- 获取成员方法们
- 获取类名
四、JDBC(Java数据库连接),Java语言操作数据库
1.本质:其实就是官方(Sun公司定义了操作所有关系型数据库的规则(接口)。各个数据库厂商去实现这套接口,提供数据库驱动jar包,我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
2.步骤:
- 导入驱动jar包
- 注册驱动
- 获取数据库连接对象Connection
- 定义sql
- 获取执行sql语句的对象Statement
- 执行sql,接受返回结果
- 处理结果
- 释放资源
3.详解各个对象:
// 导入驱动jar包
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取数据库连接对象Connection
Connection connection = DriverManager.getConnection("jdbc:mysql://localost:3306/db3");
// 定义sql
String sql="update account set balance=500 where id=1";
// 获取执行sql语句的对象Statement
Statement statement = connection.createStatement();
// 执行sql,接受返回结果
int count = statement.executeUpdate(sql);
// 处理结果
System.out.println(count);
// 释放资源
statement.close();
connection.close();
DriverMannager:驱动管理对象
Connection:数据库连接对象
Statement:执行sql对象
PreparedStatement:执行sql对象
ResultSet:结果集对象,封装查询结果
4.JDBC工具类:
package utils;/*
**@author 王小江
**@verson 1.0
*/
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
//JDBC工具类
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
static {
try {
Properties properties = new Properties();
ClassLoader classLoader=JDBCUtils.class.getClassLoader();
URL res = classLoader.getResource("jdbc.properties");
String path=res.getPath();
System.out.println(path);
// properties.load(new FileReader("src/jdbc.properties"));
properties.load(new FileReader(path));
url=properties.getProperty("url");
user=properties.getProperty("user");
password=properties.getProperty("password");
driver=properties.getProperty("driver");
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取连接
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,user,password);
}
public static void close(Statement stmt, Connection conn) {
/**
* 释放资源
*/
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs, Statement stmt, Connection conn) {
/**
* 释放资源
*/
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
五、JavaScript = (ECMAScript+BOM+DOM):客户端脚本语言。
1.与Html结合:写的位置就是代码执行的顺序: <script> alert("Hello world") </script>
<script>可以定义多个。
2.数据类型:原始(基本)数据类型
- number :数字。
- String:字符串
- boolran: true 和false
- null: 一个对象为空的占位符
- undefined: 未定义
3.Javascript是弱类型语言:可以存放任意类型的数据;Java是强类型语言。
4.var 定义变量; alert 弹出提示框 ; document.write() 输出到页面;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js</title>
<script>
alert("hello word");
单行注释
定义变量
var a=3;
alert(a);
a = "abc"
alert(a);
var num=1;
var num2=1.2;
var num3=NaN;
//输出到页面
document.write(num);
document.write(num2);
document.write(num3);
var flag=true;
document.write(flag);
var str="1323355"
document.write(str);
var num=1;
document.write(num+typeof (num));
</script>
</head>
<body>
</body>
</html>
5. 运算符: 一元、算数、赋值、比较、逻辑、三元。
6.特殊语法:
- 语句以分号结尾
- 变量的定义可以用var也可以不用,用了就是局部变量,不用就是全局变量。
7.对象function:描述一个方法或函数的对象。
特点:
- 方法是一个对象,如果定义名称相同时,会覆盖
- 在js中,方法的调用只与方法名有关,和参数列表无关。
- 在方法声明中有一个内置对象,arguments,封装所有的实际参数。
- 方法定义时,形参的类型不用写,返回值类型也不用写
function fun2(a,b) {
alert(a+b);
}
fun2(3,4);
var fun3=function (a,b) {
alert(a+b);
}
// fun2(3,4);
alert(fun3.length);
alert(a);
8.Array对象、Date对象、Math对象、RegExp正则表达式对象、Global全局对象。
var date = new Date();
document.write(date+"<br>");
document.write( date.toLocaleString())
document.write(Math.PI+"<br>")
document.write(Math.random())//0-1的随机数
document.write(Math.round(3.14)+"<br>")
9. DOM事件:控制Html文档的内容
- 获取页面标签(元素)对象Element:document.getElementById("id值"): 通过元素的id获取元素对象。
- 修改标签体内容:innerHTML
10.事件
如何绑定事件:
- 直接在html标签上,指定事件的属性,属性值就是js代码,onclick--单击事件
• 通过js获取元素对象,指定事件属性,设置一个函数
function fun(){
alert('我被点了');
alert('我又被点了');
}
<img id="light" src="img/off.gif" οnclick="fun();">
11.BOM:
概念:浏览器对象模型:将浏览器的各个组成部分封装成对象
组成:windows窗口对象、Location地址栏对象、history对象
window.alert("hello");
var flag= window.confirm("确定要退出吗?");
if (flag){
alert("true")
}else {
alert("false")
}
var result=prompt("请输入用户名:");
alert(result);
open();
close();
location.href="http://www.baidu.com";
location.reload();//刷新
12.DOM:文档对象模型:将标记语言文档的各个部分,封装成对象。
Document:文档对象、Element: 元素对象、Node: 节点对象
六、 xml:可扩展标记语言
1. xml与html的区别、 w3c:万维网联盟
- xml标签都是自定义的。<user> <student>
- xml的语法严格,html语法松散
- xml是存储数据,html是展示数据
2. 语法:
- xml文档后缀名是 .xml
- xml第一行必须定义为文档声明
- 只有一个跟标签
- 属性值必须使用引号引起来
- 标签必须正确关闭
3.组成部分:
- 文档声明:格式:<?xml属性列表?>; 属性列表:version,encoding,standalone:yes/no
- 指令: 结合css
- 标签: 自定义的
- 属性:id唯一属性
- 文本:CDATA区:数据被原样展示
- 约束:规定xml文档的书写规则;能够读懂简单的约束文档
4.:xml解析方式:将文档中的数据读取到内存中:DOM、SAX
5.xml常见解析器:JAXP、DOM4J、JSOUP、PUL.
JSOUP步骤:
- 导入jar包
- 获取Doucument对象
- 解析xml文档,加载进内存,获取dm树
- z获取元素对象,Element
JSOUP对象: