20155216 2016-2017-2 《Java程序设计》第九周学习总结

20155216 2016-2017-2 《Java程序设计》第九周学习总结

教材学习内容总结

JDBC架构

JDBC API的使用


JDBC连接数据库
1.导入JDBC包: 添加import语句到Java程序导入所需的类在Java代码中。
2.注册JDBC驱动程序:JVM加载所需的驱动程序实现到内存中,实现JDBC请求。
3.数据库URL制定:这是创建格式正确的地址指向到要连接的数据库。
4.创建连接对象:最后,代码调用DriverManager对象的getConnection()方法来建立实际的数据库连接。

创建JDBC应用程序:
1.导入数据包 . 需要包括含有需要进行数据库编程的JDBC类的包。大多数情况下,使用 import java.sql.*
2.注册JDBC驱动程序. 需要初始化驱动程序,可以与数据库打开一个通信通道。
3.打开连接. 需要使用DriverManager.getConnection() 方法创建一个Connection对象,它代表与数据库的物理连接。
4.执行查询 . 需要使用类型声明的对象建立并提交一个SQL语句到数据库。
5.从结果集中提取数据 . 要求使用适当的关于ResultSet.getXXX()方法来检索结果集的数据。
6.清理环境. 需要明确地关闭所有的数据库资源相对依靠JVM的垃圾收集。

java反射机制

ClassLoader
ClassLoader是类装载器,用于将class装载进内存。
URL getResource(String name)用于获取资源URL,寻找资源不依赖于相对路径,不依赖于绝对路径,只要资源处于classpath里即可。方法执行时将找遍当前所设定的classpath目录,eclipse里src目录默认地被编译到bin目录,bin目录即项目本身的classpath,用于存放编译好的类文件,所以约定俗成将资源放入工程src目录下,这样做的好处在于程序部署到何处都可以访问到资源而不用修改代码。

Class类
对于类装载器而言每个class文件就是一个Class对象;Class类事对于编译好的某一类对象的描述,描述了编译好的class文件的信息,是对类信息的描述,是类的metainfo(元信息)或者metadata(元数据),即描述数据的数据
ClassLoader getClassLoader(),获得该类的类装载器
static Class forName(String); 可根据类名加载相应的类,返回一个Class对象
Object newInstance():实例化对象

反射
反射机制即指java可以在运行期间通过Class的Class Class.forName(String)方法动态地加载一个类
继而可以通过获得的该类对应的的Class对象的Object newInstance()方法实例化出该类的对象
然后可以通过Method[] getMethods() 和Field[] getFields()等方法了解类的内部结构
最后就可以根据方法的内部结构决定该方法应该怎么样去调用,从而动态地去调用类的方法

自定义泛型

所谓“泛型”,就是“宽泛的数据类型”,任意的数据类型。

自定义枚举

创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum<E extends Enum>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。
可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)。
int compareTo(E o)
比较此枚举与指定对象的顺序。

Class<E> getDeclaringClass()
返回与此枚举常量的枚举类型相对应的 Class 对象。

String name()
返回此枚举常量的名称,在其枚举声明中对其进行声明。

int ordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

String toString()

       返回枚举常量的名称,它包含在声明中。

tatic <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
返回带指定名称的指定枚举类型的枚举常量。

标准注释的使用

1、单行(single-line)注释:“//……”

2、块(block)注释:“/……/”

3、文档注释:“/**……*/”

4、javadoc 注释标签语法

@author 对类的说明 标明开发该类模块的作者

@version 对类的说明 标明该类模块的版本

@see 对类、属性、方法的说明 参考转向,也就是相关主题

@param 对方法的说明 对方法中某参数的说明

@return 对方法的说明 对方法返回值的说明

@exception 对方法的说明 对方法可能抛出的异常进行说明

教材学习中的问题和解决过程

  • 问题1:
    对于反射的理解不够充分。

  • 问题1解决方案:
    java.lang.Class:是反射的源头。创建一个类,通过编译,生成.class文件。之后使用java.exe加载(JVM的类加载器)加载此.class文件。加载到内存以后,就是一个运行时类,存在缓冲区。那么这个运行时类本身就是一个Class的实例。

  1. 一个运行时类只加载一次
  2. 有了Class的实例以后,才可以进行如下操作
    (1)创建对应的运行时类的对象
    (2)获取对应的运行时类的完整结构(属性,方法,构造器…)
    (3)获取对应的运行时类的指定结构(属性,方法,构造器)
    (4)反射的应用:动态代理
  • 问题2:对于泛型中的参数理解较为模糊。
  • 问题2解决方案:
    传值参数(我们通常所说的参数)由小括号包围,如 (int x, double y),类型参数(泛型参数)由尖括号包围,多个参数由逗号分隔,如 或 <T, E>。

类型参数需要在类名后面给出。一旦给出了类型参数,就可以在类中使用了。类型参数必须是一个合法的标识符,习惯上使用单个大写字母,通常情况下,K 表示键,V 表示值,E 表示异常或错误,T 表示一般意义上的数据类型。

泛型类在实例化时必须指出具体的类型,也就是向类型参数传值,格式为:
className variable<dataType1, dataType2> = new className<dataType1, dataType2>();
也可以省略等号右边的数据类型,但是会产生警告,即:
className variable<dataType1, dataType2> = new className();

代码调试中的问题和解决过程

  • 问题1:

  • 问题1解决方案:
    重新定义正确的程序包

  • 问题2:
    上周课上代码测试,删除数组中一个元素后,如何在末尾添加0.

  • 问题2解决方案:
    直接将0赋值给最后一个元素。

代码托管

上周考试错题总结

Linux中使用rm删除文件时,如果想忽略提示,直接删除文件,可以使用-f选项强制删除。

Linux中使用cp命令拷贝目录时要加上-r ,-R选项。

NIO2中,可以使用FileSystem中的方法取出文件系统根目录信息

-正则表达式 zo* 匹配

z

zo

zoo

zooooooooooooooooooooooooooo

-正则表达式 r[aou]t 能够匹配字符串

rat

rut

正则表达式“r.t”匹配字符串“rat”的Java 代码表达式是

Pattern.compile("r.t").matcher("rat")
-Which of the following method declarations correctly defines a method with a variable length parameter list?(下面哪个方法声明正确定义了一个变长参数的方法)

public int average(int ... list)
Suppose we have an array of String objects identified by the variable names. Which of the following for loops will not correctly process each element in the array.(假如我们有一个名为names的String对象数组,下面哪个for循环不能遍历数组中的每一个元素?)
for(int i = 0; i < names.length(); i++)
Which of the following array declarations are invalid? (下面哪个数组声明是不合法的)
int[] grades = new int[5];
int grades[] = new int[5];
int[] grades = { 91, 83, 42, 100, 77 };
*以上三个都合法

Which of the statements is true about the following code snippet?(对于下面的代码段,说法正确的是?)
int[] array = new int[25];
array[25] = 2;
This code will result in a run-time error. (代码会产生运行时错误)

In Java, array indexes always begin at 0____ .(Java中,数组索引从______开始)

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)

    • 一周提交次数少于20次的不加分
  6. 其他加分:

    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:

    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

  • 博客中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 基于评分标准,我给本博客打分:XX分。得分情况如下:xxx

  • 参考示例

点评过的同学博客和代码

其他(感悟、思考等,可选)

xxx
xxx

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 6/6 1/4 20/20
第二周 334/340 1/5 18/38
第三周 570/900 1/6 22/60
第四周 544/1358 1/7 30/90
第五周 731/2089 1/8 30/90 了解了java中的架构,排序,以及异常处理
第七周 541/3558 2/10 30/90 了解了JDK8新的时间日期API
第八周 430/3877 1/11 30/90 学习了NIO、NIO2与通用API
第九周 653/4530 2/13 30/90 了解了自定义泛型和枚举

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:25小时

  • 实际学习时间:30小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted @ 2017-04-23 20:21  Lee.X  阅读(155)  评论(1编辑  收藏  举报