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

教材学习内容总结

第9周学习的主要内容是课本的第十六、第十七、第十八章,老师的教学指导上主要要求学习以下知识点:

  • 了解JDBC架构
  • 掌握JDBC架构
  • 掌握反射与ClassLoader
  • 了解自定义泛型和自定义枚举
  • 会使用标准注解

下面是我的一些总结:

JDBC(Java DataBase Connectivity)

JDBC(Java DataBase Connectivity)即java数据库连接,是一种用于执行SQL语句的Java API是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无需接触底层数据库驱动程序的差异性。
JDBC驱动的四种类型(按操作方式分类的):

  • JDBC-ODBC Bridge Driver
  • Native API Driver 提供原生链接库
  • JDBC-Net Driver 将方法调用转换为特定的网络协议调用
  • Native Protocal Driver

建立数据库的步骤:

  1. 注册Driver的操作对象
  2. 取得Connection操作对象
  3. 关闭connection操作对象

数据库操作相关的JDBC接口或类都位于java.sql包中。要连接数据库,可以向DriverManager取得Connection对象。Connection是数据库连接的代表对象,一个Connection对象就代表一个数据库连接。SQLException是在处理JDBC时经常遇到的一个异常对象,为数据库操作过程发生错误时的代表对象。

Connection是数据库连接的代表对象,接下来要执行SQL的话,必须取得java.sql.Statement对象,它是SQL语句的代表对象,可以使用Connection的createStatement()来创建Statement对象。

在使用Connection、Statement或ResultSet时,要将之关闭以释放相关资源。

Statement的executeQuery()方法则是用于SELECT等查询数据库的SQL,executeUpdate()会返回int结果,表示数据变动的笔数,executeQuery()会返回java.sql.ResultSet对象,代表查询的结果,查询的结果会是一笔一笔的数据。可以使用ResultSet的next()来移动至下一笔数据,它会返回 true 或 false表示是否有下一笔数据,接着可以使用getXXX()来取得数据。

如果有些操作只是SQL语句中某些参数会有所不同,其余的SQL子句皆相同,则可以使用java.sql.PreparedStatement。可以使用Connection的preparedStatement()方法创建好一个预编译(precompile)的SQL命令,其中参数会变动的部分,先指定“?”这个占位字符。等到需要真正指定参数执行时,再使用相对应的setInt()、setString()等方法,指定“?”处真正应该有的参数。

反射与ClassLoader

ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象。

通过Object的getClass()方法,或者.class常量取得每个对象对应的class对象,如果是基本类型,也可以使用对应的打包类加上.TYPE取得Class对象。例如,Integer.TYPE可取得代表int的Class对象。使用class.forName()的方法来实现动态加载类。

JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤。

自定义泛型

在定义泛型时,使用extends限定指定T实际类型时,必须是某类的子类。在定义泛型时,使用extends限定指定T实际类型时,必须是某类的子类。

共变性(Covariance):,B是A的子类,Node B可视为一种Node A ,称Node具有共变性。

通配字符“?”与extends限制T的类型,只能通过T声明的名称取得对象指定给Object,或将T声明的名称指定为null。

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

  • 首先主要是和自己的结对对象讨论一些教材第十七章有关类加载的问题,主要是不太理解过程。解决问题的方式主要是通过图像法理解:

    参考- 反射中Class.forName()和ClassLoader.loadClass()的区别

  • 然后是复习第六第七章的知识点。

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

  • 1.问题:在编译代码中遇到的关于类的编译错误

  • 解决方案:使用import声明一下指定的DATE类:

代码托管

上周考试错题总结

    1. Linux中使用cp命令拷贝目录时要加上()选项。
      A -r
      B -directory
      C -all
      D -R
      我的答案:A
      正确答案:AD
      分析:忘记大小写都可以。
    1. Linux中获取当前路径的绝对路径的命令是()?
      A cd
      B passwd
      C tree
      D pwd
      我的答案:B
      正确答案:D
      分析:记忆不牢
  • 3.正则表达式”(‘|”)(.*?)\1”匹配“'Hello',"World””的结果是()
    A 不匹配
    B 'Hello'
    C "World"
    D 'Hello',"World"
    我的答案:D
    正确答案:BC
    分析:对于正则表达式的理解不深,反向引用 \1 代表第一个()中的匹配内容

  • 4.abc? 匹配( )
    A ab
    B abc
    C abcc
    D abccc
    我的答案:BCD
    正确答案:AB
    分析:?是指重复0或1次

    1. 正则表达式 zo*`` 匹配() A z B zo C zoo D zooooooooooooooooooooooooooo 我的答案:AC 正确答案:ABCD 分析:*`不仅可以是重复多次,还可以是零次。
  • 6.正则表达式 r.t 能够匹配字符串()
    A rat
    B rt
    C rut
    D root
    我的答案:ABC
    正确答案:AC
    分析:r.t表示 r开着,中间为任意字符接着为t的三字母字符串

  • 7.Java 日志 API 中,输出的日志会经过哪两个类别的过滤?
    A Logger
    B Handler
    C Formatter
    D Stream
    我的答案:AB
    正确答案:BC
    分析:粗心啦!

    1. Date 的 API 有许多方法都不再建议使用,应改用哪个类别的相关方法取代?空白部份指定哪些型态可以通过编译?
      A DateFormat
      B TimeStamp
      C Time
      D Calendar
      我的答案:A
      正确答案:D
  • 9.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循环不能遍历数组中的每一个元素?)
    A for(int i = 0; i < names.length; i++)
    B for(String name : names)

C for(int i = 0; i < names.length(); i++)

D none of these will correctly process each element(以上都不能遍历)
E all of these will correctly process each element(以上都能遍历)
我的答案:B
正确答案:C
分析:由于语法错误,选择C不会正确处理每个元素。长度变量不是一个方法,因此在它后面没有括号。选择B是使用foreach循环来处理数组的例子,选择A是一个正确的循环。

  • 10.Which of the following array declarations are invalid? (下面哪个数组声明是不合法的)
    A int[] grades = new int[5];
    B int grades[] = new int[5];
    C int[] grades = { 91, 83, 42, 100, 77 };
    D all of the above are valid(以上三个都合法)
    E none of the above are valid(以上三个都不合法)
    我的答案:B
    正确答案:D
    分析:此代码将抛出一个对象的大小错误,因为这个数组中最后一个指数是24。这会导致运行时错误。

  • 11.In Java, array indexes always begin at ________________ .(Java中,数组索引从______开始)
    A -1
    B 0
    C 1
    D 2
    E you can declare an array to have any indexes you choose(可以任意指定)
    我的答案:E
    正确答案:B
    分析:In Java, the array indexes are from 0 to one less than the length of the array.

    结对及互评

评分标准

  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分

点评过的同学博客和代码

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 15篇 400小时
第一周 4/4 1/1 10/10
第二周 20/24 1/2 9/19
第三周 80/104 1/3 10/29
第四周 343/ 447 1/4 15/44
第五周 748/1195 1/5 20/64 能够自己敲出一些简单的程序
第六周 207/1402 1/6 10/74 继续敲出一些简单的程序
第七周 241/1643 2/8 11/85
第八周 241/1643 1/9 11/96
第九周 630/2273 2/11 20/116 代码量提高,学会Junit
  • 计划学习时间:20小时

  • 实际学习时间:20小时

  • 改进情况:代码量提高,学习时间增多

参考资料

20155322 2016-2017-2 《Java程序设计》第9周学习总结的更多相关文章

  1. 20155322 2016-2017-2 《Java程序设计》 第一周学习总结

    20155322 2016-2017-2 <Java程序设计> 第一周学习总结 教材学习内容总结 本周学习内容的主要是: 一.浏览教材,根据自己的理解每章提出一个问题. 在浏览教材后,我提 ...

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

    20155220 2016-2017-2<Java程序设计>第九周学习总结 教材学习内容总结 JDBC(Java DataBase Connectivity)即java数据库连接,是一种用 ...

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

    20155211 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 一.JDBC入门 (一)JDBC简介 厂商在操作JDBC驱动程序时,依 ...

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

    20155313 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 JDBC(Java DataBase Connectivity)即java数据库连 ...

  5. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  6. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  7. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  8. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  9. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  10. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

随机推荐

  1. 安装批量装机工具cobbler过程

    首先想到的自然是yum install cobbler,结果找不到这个包,又懒得去官网下源码安装,于是乎想到增加第三方yum源,之后继续yum install cobbler,搞定. 然后启动cobb ...

  2. [SDOI2016]数字配对

    题目 发现要求配对的条件是这样 \[a_j|a_i,\frac{a_i}{a_j}=p_1\] 我们考虑一下再来一个\(a_k\),满足 \[a_k|a_j,\frac{a_j}{a_k}=p_2\] ...

  3. [Noip2007]Core树网的核

    嘟嘟嘟 首先求树的直径两次bfs即可,实际上bfs就是最短路,因为树上路径是唯一的,所以用任何一种遍历方法都行(spfa和dijkstra当然也可以). 可以证明,只要求出任意一条直径就行了,为什么呢 ...

  4. C/C++——new/delete和malloc/free的区别

    new/delete和malloc/free的区别 扩容操作: 对于malloc是有一个realloc函数对应用于扩容的: 对于new,只能再new一个,for循环赋值过去,把原来的delete掉: ...

  5. 【jQuery】todolist

    1 2 3 用npm命令下载依赖,优点:不用去网上找链接,代码都一样 4.jQuery自动下载进node_modules文件下 npm install jquery --save  这句命令的意思是保 ...

  6. 【转】Maven项目模板

    http://www.yiibai.com/maven/maven_project_templates.html maven 使用 Archetype 概念为用户提供不同类型的项目模板,它是一个非常大 ...

  7. java把行政区划放到一个节点树形中

    作者原创:转载请注明出处.https://www.cnblogs.com/yunqing/p/9486923.html 先放数据,t_city表 //津京冀地区行政区划数据 SET FOREIGN_K ...

  8. LD-sketch源码阅读

    目录 util.h hash.hpp/cpp mangle函数 GenHashSeed函数 AwareHash模块 LDSketch.hpp/cpp LDSketch更新函数,对一个sketch插入键 ...

  9. Filters in ASP.NET Core (转自MSDN)

    Filters in ASP.NET Core MVC allow you to run code before or after specific stages in the request pro ...

  10. Bridge(桥接)模式

    1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度 ...