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

教材学习内容总结

  • 基本数据库操作相关的JDBC接口或类是位于java.sql包中。在程序中要取得数据库联机,我们必须有几个动作:

注册Driver操作对象;

取得Connection操作对象;

关闭Connection操作对象。

  • 除了协议是以jdbc开始之外,JDBC URL格式各家都不相同,必须查询数据库产品的使用手册。下面以MySQL为例,“子协议”是桥接的驱动程序,数据库产品名称或联机机制,MySQL的子协议就是mysql。
  • 关闭Connection操作对象

取得Connection对象之后,可以使用isClosed方法测试与数据库的连接是否关闭。在操作完数据库之后,若确定不在需要连接,则必须使用close来关闭与数据库的连接,以释放连接时相关的必要资源,像是联机相关对象,授权资源等。

对于上面代码中的try…catch…finally部分,由于JDK7之后,JDBC的Connection,Statemet,ResultSet等接口都是java.lang.AutoClosable的子接口,所以我们可以尝试自动关闭语法来简化程序的攥写。

那么在底层,DriverManager使如何进行联机的呢?DriverManager会在循环中逐一取出注册的每个driver实例,使用指定的JDBC URL来调用Driver的connect方法,尝试取得Connection实例。对于底层的实现,有兴趣的伙伴可以看看DriverManager中相关的原始码。

  • PreparedStatement可以重复使用,它可以减少生成对象的负担;

    因为可以将SQL描述预编译为数据库的执行指令,所以执行速度就快了许多;

    使用这种写法,写出来的代码也会更加安全,有兴趣的同学可以了解SQL Injection,相信你会对安全方面有一些了解,在这里我就不细说了;

    使用前面留言板代码中的写法会造成效能上的负担,因为串接或格式化字符串会产生新的String对象,如果串接字符串动作经常进行,那么将会是效能上的隐忧。

  • 1、类加载:指的是将类的class文件读入JVM,并为之创建一个Class对象。

2、类连接:指的是把类的二进制数据合并到JRE中,这又分为3个阶段:

a)、校验:检查载入Class文件数据的正确性。

b)、准备:给类的静态变量分配存储空间,并进行默认初始化。

c)、解析:将类的二进制数据中的符号引用替换成直接引用。

3、初始化:对类的静态变量、静态初始化块进行初始化。

  • 1、全盘负责:当一个类加载器负责加载某个Class的时候,该Class所依赖的和引用的其他Class也将由该类加载器负责载入。

2、父类委托:先委托父加载器试图加载该类,只有在父加载器无法加载该类时才从自己的类路径中查找并装载该类。

3、缓存机制:缓存机制保证所有被家加载过的类都会被缓存,当程序中需要使用某个Class时,类加载器先从缓存中搜寻。缓存中搜寻不到,才会重新读取该类对应的二进制数据,并创建对应的Class对象。

  • 操作数组:

Object arr = Array.newInstance(String.class,10);//创建一个简单的String数组。

Array.set(arr,5,”abc”);//给该数组下标为5的元素赋值

Object name = Array.get(arr,5);//获取该元素

  • 访问属性:

Field f = clazz.getDeclaredField(属性名);//根据属性名获取Field对象

f.get(对象);//根据对象得到属性值。

  • 调用方法:

Method m = clazz.getMethod(方法名,参数类型);//根据方法名和参数类型创建Method对象。

m.invokej(对象,属性值);//根据对象和方法参数调用方法。

若需调用private方法,先调用Method对象的setAccessible(true);

  • 通过Class对象创建对象:

例如有一个Apple类。Class clazz = Class.forName(“com.stopTalking.crazy.Apple”);

该Apple类有一个默认构造器、一个String类型参数的构造器、一个String类型、int类型的构造器。

  • 获得Apple对象有2种方式:

a)、用Apple类默认构造器:Object o1 = clazz.newInstance();

b)、用一个String类型参数的构造器:Object 02 = clazz.getConstructor(String.class).newInstance(“apple”);

c)、用一个String类型、int类型的构造器:Object 02 = clazz.getConstructor(String.class,int.class).newInstance(“apple”,”3”);

  • 获得Class对象有3种方式:

a)、Class类的forName方法,传入全限定类名。需要抛出异常ClassNotFoundException

b)、调用该类的class属性。

c)、调用某对象的getClass()方法。

  • ClassLoader对象。

可以通过2种方式获得当前ClassLoader对象,一种是通过当前线程:

ClassLoader loader = Thread.currentThread().getContextClassLoader();

若已经有了Class对象,那么可以通过Class对象的getClassLoader()方法:

ClassLoader loader2 = Xxx.class.getClassLoader();

  • 泛型定义:

(1)仅定义在方法上的泛型语法

(2)用来限制泛型可用类型的extends与super关键字

(3)?类型通配字符的使用

  • 1、如果B是A的子类,而Node< A>可视为一种Node< B>,则称为Node具有逆变性。Java泛型不具有逆变性,可以使用类型通配字符?与super来声明,使其达到类似的逆变性的效果。

2、若泛型类或接口不具共变性或逆变性,则称为不可变的或严谨的。

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

  • 问题1:方式一:反射加载

    Class cl = Class.forName("classname");

方式二

使用ClassLoader

URLClassLoader loader = new URLClassLoader(urls);

Class cl = loader.loadClass("classname);

这两种方式加载类 有什么区别吗? 或者说有什么联系?

  • 问题1解决方案:一样的,没有区别,类装载器装载是指定装载器,forname是使用当前类装载器装载。

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

  • 问题1:

      		class MyClass<E>
    {
    public <T> MyClass(T t)
    {
    System.out.println("t参数的值为:" + t);
    }
    }
    public class GenericDiamondTest
    {
    public static void main(String[] args)
    {
    MyClass<String> mc1 = new MyClass<>(5);
    MyClass<String> mc2 = new <Integer> MyClass<String>(5); 2
    // MyClass<String> mc3 = new <Integer> MyClass<>(5); 3
    }
    }

2处MyClass到底是String还是Integer ,这么表示怎么理解?3处的代码为什么不对啊?

  • 问题1解决方案:2处,MyClass当然是String,只不过它的构造函数参数Integer。

    3处,错误是,当调用new时,不能用来显示指定类型信息,这个由编译器推导。

代码托管



上周考试错题总结

  • Linux中使用cp命令拷贝目录时要加上()选项。

A .-r

B .-directory

C .-all

D .-R

正确答案: A D

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

    A .Path

    B .DirectoryStream

    C .FileStore

    D .FileSystem

    正确答案: D

  • 正则表达式”(‘|”)(.*?)\1”匹配 “'Hello',"World””的结果是()

    A .不匹配

    B .'Hello'

    C ."World"

    D .'Hello',"World"

    正确答案: B C

  • abc? 匹配( )

    A .ab

    B .abc

    C .abcc

    D .abccc

    正确答案: A B

  • 正则表达式 zo* 匹配()

    A .z

    B .zo

    C .zoo

    D .zooooooooooooooooooooooooooo

    正确答案: A B C D

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

    A ."rat".matcher("r.t")

    B ."r.t".matcher("rat")

    C .Pattern.compile("rat").matcher("r.t")

    D .Pattern.compile("r.t").matcher("rat")

    正确答案: D

结对及互评

评分标准

  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

  • 参考示例

点评过的同学博客和代码

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

本周学习的三章知识较为简单,但需要和之前学习的内容基础结合起来,所以前面的基础很重要,在学习过程中我不断翻阅前面知识,结合起来学习会使效率提高。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 20/20 2/2 20/20
第二周 140/160 2/4 18/38
第三周 113/273 1/5 20/58
第四周 335/608 1/6 20/78
第五周 1159/1408 1/7 30/108
第六周 452/1860 1/8 20/128
第七周 343/2203 1/9 30/158
第八周 448/2651 1/10 20/178
第九周 516/3167 1/11 20/198

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

  1. 201521123027 <java程序设计>第九周学习总结

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2.书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什 ...

  2. 20145220java程序设计第九周学习总结

    20145220java程序设计第九周学习总结 教材学习内容总结 JBDC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商对接口直接操作,开发人员无须接触底层数据可驱动程序的差异 ...

  3. 201771010134杨其菊《面向对象程序设计java》第九周学习总结

                                                                      第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...

  4. 201521044152<java程序设计>第一周学习总结

    本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...

  5. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  6. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  7. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

  8. 马凯军201771010116《面向对象与程序设计Java》第九周学习总结

    一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3 ...

  9. 201521123063 JAVA程序设计 第二周学习总结

    1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...

  10. 《Java》第九周学习总结

    下载mysql 选择mysql的管理软件 idea可以直接连接 然后用库运行程序,但是没有截图,,因为想在navicat上试试,可惜速度太慢了 打开idea又很慢,所以明天再更新

随机推荐

  1. 使用Hexo搭建Github静态博客

    1. 环境环境 1.1 安装Git 默认配置就好 1.2 安装node.js 下载:http://nodejs.org/download/ 安装时直接保持默认配置即可. 2. 配置Github 1.1 ...

  2. 关于更改ListBox的ItemsPanel样式

    首先定义一个ListBoxItem的样式,用来显示相应的图片信息 <Style TargetType="{x:Type ListBoxItem}" > <Sett ...

  3. python2 高级编程

    第一 正则表达式 1. 正则表达式意义 正则表达式是高级文本匹配模式,为搜索,匹配,替换提供了基础 2. 搜索与匹配的区别 搜索指在字符串任何部分查找 匹配指在字符串起始处查找 3. 编写正则表达式 ...

  4. 使用Java HttpComponent/HttpClinet 调用 WebAPI问题的解决

    几个关键字: WebAPI, Android, Apache HttpComponent/HttpClient 问题:无论怎么测试, WebAPI的FormBody value总是空. 最简单的代码 ...

  5. js數組

    數組對象創建: var a=new Array(); var b=new Array(1); var a=new Array(“AA“,”AA“): 相關函數: sort()排序,可以進行字面上排序s ...

  6. multi_index_container 多索引容器

    multi_index_container是c++ boost库中的一个多索引的容器.因工作中用到了,特来测试试用. #include "stdafx.h" #include &q ...

  7. BZOJ1563 NOI2009诗人小G(动态规划+决策单调性)

    设f[i]为前i行的最小不协调度,转移枚举这一行从哪开始,显然有f[i]=min{f[j]+abs(s[i]-s[j]+i-j-1-m)p}.大胆猜想有决策单调性就好了.证明看起来很麻烦,从略.注意需 ...

  8. BZOJ5206 JSOI2017原力(三元环计数)

    首先将完全相同的边的权值累加.考虑这样一种trick:给边确定一个方向,由度数小的连向度数大的,若度数相同则由编号小的连向编号大的.这样显然会得到一个DAG.那么原图的三元环中就一定有且仅有一个点有两 ...

  9. 查看本地Git仓库历史修改内容

    查看历史内容 在.git文件 同级目录下,右键 选择 git history 但是红框中的路径无法拷贝.右键红框中的任一文件,有 HighLight this only, Highlight this ...

  10. MT【222】几道自招面试真题

    1.(2015东南大学)2分钟找杯子,4分钟找茶叶,7分钟烧水,爸爸花13分钟给家访的老师泡茶,请问你怎么看? 2.(2014复旦大学)共有5顶帽子,三个黑的两个白的,三个人排成一排,并让这三个人每个 ...