20155315 2016-2017-2 《Java程序设计》第九周学习总结
教材学习内容总结
1.JDBC架构
- 数据库驱动
- 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道理,我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道。
- JDBC
- JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组成。
- SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC。这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加载具体的驱动,就可以操作数据库。
- 开发JDBC应用需要
java.sql
、javax.sql
这2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动)。
2.DriverManager类讲解
- Jdbc程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个API的常用方法:
DriverManager.registerDriver(new Driver()) DriverManager.getConnection(url, user, password)
3.Connection类讲解
Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,这个对象的常用方法:
- createStatement():创建向数据库发送sql的statement对象。
- prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
- prepareCall(sql):创建执行存储过程的callableStatement对象。
- setAutoCommit(boolean autoCommit):设置事务是否自动提交。
- commit() :在链接上提交事务。
- rollback() :在此链接上回滚事务。
4.ResultSet类卷动、更新数据
- dbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法: 提供了许多方法来获得当前文件系统的相关信息。 - 获取任意类型的数据
getObject(int index) getObject(string columnName)
- 获取指定类型的数据,例如:
getString(int index)
getString(String columnName)
- ResultSet还提供了对结果集进行滚动的方法:
next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast() :移动到resultSet的最后面。
5.反射与ClassLoader
- 当我们使用一个类,如果这个类还未加载到内存中,系统会通过加载、连接、初始化对类进行初始化。
- 类加载:指的是将类的class文件读入JVM,并为之创建一个Class对象。
- 类连接:指的是把类的二进制数据合并到JRE中,这又分为3个阶段:
- 校验:检查载入Class文件数据的正确性。
- 准备:给类的静态变量分配存储空间,并进行默认初始化。
- 解析:将类的二进制数据中的符号引用替换成直接引用。
- 注意:
1.一个final类型的静态属性,如果在编译时已经得到了属性值,那么调用该属性时,不会导致该类初始化,因为这个相当于使用常量;
2.使用ClassLoader()方法,只是加载该类,并未初始化。
- 类加载器就是负责将.class文件加载到内存中,并为之生成对应的java.lang.Class对象,它负责加载所有的类,而一旦一个类被加载入JVM中,就不会被再次载入了。
- 在Java中,一个类用其全限定类名(即包名+类名)作为标识。
- 在JVM中,一个类用其全限定类名和其类加载器作为标识。
- JVM运行时会产生3个ClassLoader,分别为:
BootstrapClassLoader
(根类加载器)、ExtClassLoader
(扩展类加载器)和AppClassLoader
(系统类加载器)。
6.自定义泛型、枚举与注释
1.泛型
- 在JDK1.5版本之前,如果在集合中添加了不同类型的数据,需要在程序的运行期间对类型之间的转换进行检查。
List arrayList=new arrayList();
- 在arrayList中添加String类型的对象和Integer对象,但是我们定义如下一个数组
String[] values=new String[arrayList.size()];
- 在JDK1.5版本之前,如果在集合中添加了不同类型的数据,需要在程序的运行期间对类型之间的转换进行检查。
2.泛型在集合中的应用
-在JDK1.5版本之后Java提供了对泛型的支持。例如对于一个ArrayList列表来说,如果只想在列表中放入String类型元素,可以用下面的方法来实现:ArrayList<String> list=new ArrayList<String>();
- 泛型使得编译器能够在编译期间对集合中加入的对象进行检查,如果加入了不同类型的对象,就会报错,而不必等到运行期间再进行相关的类型转换。和原来没有使用泛型相比,它将原来需要在运行时期才能发现的异常提前到了编译期间,使得程序的安全性也大大提高,泛型一般用于集合类中。
3.枚举
枚举也是JDK1.5之后的版本以后Java新加入的特性。使用枚举可以表示一组常量数据。枚举的本质是一个类,可以使用enum关键字来声明一个枚举类型,其声明方式如下:
[访问控制符] enum 枚举类型名{value1,value2,......}
使用枚举类型需要注意以下几点:
- 枚举类型可以定义在类的内部也可以定义在类的外部。如果定义在类的内部,那么其访问控制符可以是public,protected,private或者默认的控制符。如果定义在类的外部,其访·问控制符只能是public和默认控制符;
- 枚举类型中定义的value值都默认为public static final的。其值一经定义就不能在被修改了。多个value值之间需要用逗号隔开;
- 枚举类型中除了可以声明常量之外还可以声明方法。但是方法需要在常量之后,并且常量和方法之间要用分号区分;
- 枚举类型中的值可以通过枚举类型名直接对他们进行访问;
- 枚举类型不能声明为abstract或者final类型;
4.枚举类型的常用方法
public final String name()//返回枚举常量的名称;
public final int ordinal()//返回枚举常量在枚举类型中的位置,第一个枚举值序号为0,依次类推;
public String toString()//返回枚举常量的名字,可以重写此方法;
public static valueOf(enumType,String name)//返回与name名字相对应的枚举常量;
- 5.注释
- 在原始码中使用注释,对编译程序提供额外编译提示,或提供应用程序执行时期可读取的组态信息。注释可以仅用于原始码,编译后留在.class文档仅供编译程序读取或开放执行时期读取。
- 常用标准注释
@Override //就是标准注释,被注释的方法必须是父类或接口中已定义的方法,请编译程序协助是否真的为重新定义方法。
@Deprecated //如果某个方法原先存在与API中,后来不建议再使用,可以在该方法上注释。若有用户后续想调用或重新定义这个方法,编译程序会提出警告。对于支持泛型的API,建议明确指定泛型真正类型,如果没有指定,编译程序会提出警告。
@SuppressWarnings //指定抑制unchecked的警告产生:
@SuppressWarnings(value={"unchecked"})
@SafeVarargs //表明开发人员确定避免了heap pollution问题。heap pollution问题就是编译程序无法检查执行时期的类型错误,无法具体确认自变量类型。
@FunctionalInterface //让编译程序可协助检查interface是否可做为lambda的目标类型
- 对于日后可能变动的文字信息,可以考虑将信息移至程序之外,使用ResourceBundle来做信息绑定。
- ResourceBundle的静态getBundle()方法会取得一个ResourceBundle的实例,所给定的自变量名称是信息文档的主文件名,getBundle()会自动找到对应的.properties文档,取得ResourceBundle实例后,可以使用getString()指定键来取得。
- 定义注释时,可使用java.lang.annotation.Target限定时可指定java.lang.annotation.ElementType的枚举值。
- 在制作JavaDoc文件时,默认不会将注释数据加入文件中,如果想要将注释数据加入文件,可以使用java.lang.annotation.Documented。
- 默认父类设定的注释,不会被继承至子类,在定义注释时,设定java.lang.annotation.Inherited注释,就可以让注释被子类继承。
- JDK8标注增强功能
1.ElementType的枚举成员是用来限定哪个声明位置可以进行标注。在JDK8中,增加了两个枚举成员TYPE _PARAMETER、TYPE _USE。
2.ElementType.TYPE _ USE可用于标注在各式类型,一个标注如果被设定为ElementType.TYPE_USE,只要是类型名称,都可以进行标注。
3.@Repeatable 可以让你在同一个位置重复相同标注
4.@Filters 作为收集重复标注信息的容器,而每个@Filters储存各自指定的字符串值。
- 执行时期读取注释信息
1.自定义注释,默认会将注释信息存储于.class文档,可被编译程序或位码分析工具读取,但执行时期无法读取注释信息,在执行时期读取注释信息,可以使用java.lang.annotation.Retention搭配java.lang.annotation.RetentionPolicy枚举指定。
2.RetentionPolicy为RUNTIME的时机,在于让注释在执行时期提供应用程序信息,可使用java.lang.reflect.AnnotatedElement接口操作对象取得注释信息。
3.JDK 8中新增了getDeclaredAnnotation()、getDeclaredAnnotationsByType()、getAnnotationsByType()三个方法。
getDeclaredAnnotation()可以让你取回指定的标注,在指定@Repeatable的标注时,会寻找收集重复标注的容器。
getDeclaredAnnotationsByType()、getAnnotationsByType()就不会处理@Repeatable的标记。
教材学习中的问题和解决过程
- 问题1:实际开发中并不推荐采用registerDriver方法注册驱动
- 解决1:
- 查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。
- 程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。
- 推荐方式:
Class.forName("com.mysql.jdbc.Driver")
;采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。
代码调试中的问题和解决过程
这一次主要是创建数据库及数据库的连接。
- 代码链接
- 对JDBC了解还不够,这周的学习也比较仓促,希望多通过一周的时间来学习JDBC。
代码托管
用statistics脚本查看代码行数
代码提交结果
上周考试错题总结
4.NIO2中,可以使用()中的方法取出文件系统根目录信息。
- A . Path
- B . DirectoryStream
- C . FileStore
- D . FileSystem
正确答案: D
理解情况:FileSystem的getRootDirectorie方法
- 7.正则表达式”(‘|”)(.*?)\1”匹配 “'Hello',"World””的结果是()
- A . 不匹配
- B . 'Hello'
- C . "World"
- D . 'Hello',"World"
正确答案: BC
理解情况:反向引用 \1 代表第一个()中的匹配内容
- 11.正则表达式 r.t 能够匹配字符串()
- A . rat
- B . rt
- C . rut
- D . root
正确答案: AC
理解情况:r.t 表示 r开着,中间为任意字符接着为t的三字母字符串。
- 25.Which of the statements is true about the following code snippet?(对于下面的代码段,说法正确的是?)
int[] array = new int[25];
array[25] = 2;
- A . The integer value 2 will be assigned to the last index in the array.(整数2会赋给数组中最后一个元素)
- B . The integer value 25 will be assigned to the second index in the array.(整数25会赋给数组中的第2个索引)
- C . The integer value 25 will be assigned to the third value in the array. (整数25会赋给数组中的第3个元素)
- D . This code will result in a compile-time error.(代码会产生编译时错误)
- E . This code will result in a run-time error. (代码会产生运行时错误)
正确答案: E
理解情况:所有这三个都是有效的数组声明。选择B使用另一种语法。选择C使用初始化列表初始化数组。
26.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(可以任意指定)
正确答案: B
理解情况:在java中,数组索引的长度小于数组长度的0到1。
结对及互评
结对学习情况
交流代码上的错误并互相改正,学习第十六章、第十七章和第十八章的内容,并检查以前的代码。共同学习实验二的内容,学习使用StarUML,对彼此遇到的问题会一次讨论解决。结对照片
评分标准(满分10分)
从0分加到10分为止
正确使用Markdown语法(加1分):
- 不使用Markdown不加分
- 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
- 排版混乱的不加分
模板中的要素齐全(加1分)
- 缺少“教材学习中的问题和解决过程”的不加分
- 缺少“代码调试中的问题和解决过程”的不加分
- 代码托管不能打开的不加分
- 缺少“结对及互评”的不能打开的不加分
- 缺少“上周考试错题总结”的不能加分
- 缺少“进度条”的不能加分
- 缺少“参考资料”的不能加分
教材学习中的问题和解决过程, 一个问题加1分
代码调试中的问题和解决过程, 一个问题加1分
本周有效代码超过300分行的(加2分)
- 一周提交次数少于20次的不加分
6 其他加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 结对学习情况真实可信的加1分
7 扣分:
- 有抄袭的扣至0分
- 代码作弊的扣至0分
点评模板:
博客中值得学习的或问题:
- xxx
- xxx
- ...
代码中值得学习的或问题:
- xxx
- xxx
- ...
基于评分标准,我给本博客打分:XX分。得分情况如下:xxx
点评过的同学博客和代码
体会
这周代码主要是关于JDBC数据库的建立和连接,第一次接触还有许多不懂的地方,不理解代码要表达的意思,学习也较为仓促,没有更深的理解,希望在接下来的一周里能再系统地学习一遍JDBC,弄懂代码来帮助自己学习Java。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 20/20 | 1/1 | 10/10 | 安装了JDK、IDEA和Git,写了第一个Java程序 |
第二周 | 97/117 | 2/3 | 20/30 | 用Linux上传代码,熟悉修改文件的命令行 |
第三周 | 336/453 | 2/4 | 35/65 | 在Linux上安装JDK和IDEA,更熟悉vi的操作指令以及修改时需要注意的地方。 |
第四周 | 851/1304 | 1/5 | 25/90 | 学习用JDB调试程序 |
第五周 | 834/2138 | 1/7 | 32/122 | 能自己设计简单的程序,遇到问题也基本上能通过前面的学习和查资料解决,还有问题没有得到解决。 |
第六周 | 573/2711 | 1/8 | 15/137 | 理解课本中的内容并自己把之前的代码加以改正,更理解程序的作用,继续学习用JDB调试程序 |
第七周 | 400/3111 | 2/10 | 20/157 | 用IDEA编辑并调试程序,设置断点,完成了实验一 |
第八周 | 403/3511 | 1/11 | 20/177 | 熟悉通用API,深入学习代码并测试代码 |
第九周 | 1500/5011 | 2/13 | 20/217 | 了解了JDBC,章、第十七章和第十八章的内容,并检查以前的代码。共同学习实验二的内容,学习使用StarUML,用单元测试测试代码 |
- 计划学习时间:25小时
- 实际学习时间:20小时
参考资料
20155315 2016-2017-2 《Java程序设计》第九周学习总结的更多相关文章
- 201521123027 <java程序设计>第九周学习总结
1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2.书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什 ...
- 20145220java程序设计第九周学习总结
20145220java程序设计第九周学习总结 教材学习内容总结 JBDC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商对接口直接操作,开发人员无须接触底层数据可驱动程序的差异 ...
- 201771010134杨其菊《面向对象程序设计java》第九周学习总结
第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...
- 201521044152<java程序设计>第一周学习总结
本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...
- 20145304 刘钦令 Java程序设计第二周学习总结
20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...
- 20145304 刘钦令 Java程序设计第一周学习总结
20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...
- 201621123007 Java程序设计第一周 学习总结
第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...
- 马凯军201771010116《面向对象与程序设计Java》第九周学习总结
一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3 ...
- 201521123063 JAVA程序设计 第二周学习总结
1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...
- 《Java》第九周学习总结
下载mysql 选择mysql的管理软件 idea可以直接连接 然后用库运行程序,但是没有截图,,因为想在navicat上试试,可惜速度太慢了 打开idea又很慢,所以明天再更新
随机推荐
- 算法笔记--STL中的各种遍历及查找(待增)
算法笔记 map: map<string,int> m; map<string,int>::iterator it;//auto it it = m.begin(); whil ...
- "is not allowed to connect" mysql
好像过几次,安装mysql时,总会遇到这个问题. 每次都忘怎么解决. 这回写下来吧. 编辑 mysql数据库的 user表太麻烦了, 最简单的方法是加一个用户,以后就用这个用户登录 CREATE US ...
- delphi文件名获取方法
取文件名 ExtractFileName(FileName); 取文件扩展名: ExtractFileExt(filename); 取文件名,不带扩展名: 方法一: Function Extrac ...
- 3-23Agile Web Development,3-24(chapter: 6)
第2章 Instant Gratification 复习 和 练习第一章,新建rails web页面. 重点: 知道了类,方法,实例变量 在rails是怎么用的. rails generate con ...
- 『cs231n』神经网络组件
- MySQL Replication 线程(理解详细过程)
Replication 线程 Mysql 的Replication 是一个异步的复制过程,从一个Mysql instace(我们称之为Master)复制到另一个Mysql instance(我们称之S ...
- OAF 交互式列车 上一步 下一步的简单使用
在实际的需求中,我们往往会遇到在下一步的时候验证某些参数,而上一步不需要验证. 这个是非常粗暴的解决方式 if( "goto".equals(pageContext.getPara ...
- MySQL 事件跟踪器
/*第一步 创建以下两个 日志表 */ CREATE TABLE `slow_log` ( `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMEST ...
- 进程通信方式-管道pipe
管道是两个进程间进行单向通信的机制.因为管道传递数据的单向性,管道又称之为半双工管道. 1.数据只能从一个进程流向另一个进程(其中一个写管道,另一个读管道):如果要进行全双工通信,需要建立两个管道. ...
- Python的数据类型3元组,集合和字典
首先要讲到的就是元组 元组其实拥有列表的一些特性,可以存储不同类型的值,但在某些方面元组又比不上列表 定义一个元组,你可以不用加‘ [ ] ’,你只需用逗号隔开即可 例如 1 2 3 4 5 6 7 ...