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

技术标签: java  操作系统  数据库  

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

教材学习内容总结

  • 900aa2126c9823a5.png

  • 基本数据库操作相关的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时,不能用来显示指定类型信息,这个由编译器推导。

代码托管

0cbf0c4866074dec.png
fba7612a9c5fc7d4.png

上周考试错题总结

  • 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

转载于:https://www.cnblogs.com/STILLlover521/p/6743287.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30772261/article/details/97803920

智能推荐

ComfyUI 一键整合包- AIStarter启动器专属_comfyui-aki-v1.1.7z-程序员宅基地

文章浏览阅读532次,点赞9次,收藏7次。AIStarter使用教程及注意事项 -AIStarter tutorials and notes on how to use it。_comfyui-aki-v1.1.7z

【linu相关】Ubuntu 文件系统相关命令_bantu系统命令-程序员宅基地

文章浏览阅读8k次,点赞4次,收藏35次。linux系统(以Ubuntu系统为例)的文件系统Linux下“/”就是根目录,所有的目录都是有根目录衍生出来的。/是一切目录的起点,如大树的主干。其它的所有目录都是基于树干的枝条或者枝叶。在ubuntu中硬件设备如光驱、软驱、usb设备都将挂载到这颗繁茂的枝干之下,作为文件来管理。_bantu系统命令

有效解决linux后台运行python脚本_sh 脚本后台执行还在输出-程序员宅基地

文章浏览阅读4.4k次。1.sh test.sh &将sh test.sh任务放到后台 ,即使关闭xshell退出当前session依然继续运行,但标准输出和标准错误信息会丢失(缺少的日志的输出)将sh test.sh任务放到后台 ,关闭xshell,对应的任务也跟着停止。2. nohup sh test.sh将sh test.sh任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标..._sh 脚本后台执行还在输出

每日MySQL之020:使用EXPLAIN查看SQL的执行计划_mysql explain query_cost-程序员宅基地

文章浏览阅读1.2k次。MySQL中要查看执行计划,可以使用EXPLAIN命令,EXPLAIN 使用的对象是 SELECT, DELETE, INSERT, REPLACE, 和 UPDATE 语句。将EXPLAIN换成DESCRIBE也行,两者含义一样,但实际操作中一般用DESCRIBE查看表结构,用EXPLAIN查看执行计划。输出的结果不是图形化的,而是一张表。对于每个SELECT语句中的每个表,EXPLAIN都会返_mysql explain query_cost

【Linux】vimrc 配置方案_linux配置vimrc-程序员宅基地

文章浏览阅读659次。修改 ~/.vimrc 文件(该文件是用户自己vim的配置文件,可随意修改)。我的.vimrc配置。_linux配置vimrc

SpringBoot中mysql的驱动依赖问题_mysql依赖-程序员宅基地

文章浏览阅读6.7k次,点赞5次,收藏14次。springboot中mysql的驱动依赖问题_mysql依赖

随便推点

javaweb基于SSH开发校园社团管理系统源码 课程设计 大作业 毕业设计_tp6校园社团管理系统-程序员宅基地

文章浏览阅读106次。开发校园社团管理系统(大作业/毕业设计)+Jdk+Tomcat+MYSQL数据库。开发环境: Windows操作系统。_tp6校园社团管理系统

网络安全学习--用户和用户组_组或用户名-程序员宅基地

文章浏览阅读1.1k次。文章基于Windows2003服务器系统版本Windows:win200,win2003,win2008r2,win2012Linux:Redhat,CentOS用户每个用户登录系统后,拥有不同的操作权限每个账户有自己唯一的SID(安全标识符)用户SID:S-1-5-21-42342423434-1433343434-500系统SID:S-1-5-21-42342423434-1433343434用户ID:500windows系统管理员administrator的UID是500普_组或用户名

Java注解 编译_Java注解之编译时注解-程序员宅基地

文章浏览阅读427次。新建两个moduleannotation用来定义注解compiler用来编写处理注解的代码这两个module都要选择Java Library 那为什么要拆分两个module呢,因为编译期注解的处理代码是只在代码编译的时候使用的,所以这些代码要和主module分开拆成compiler,但是compiler又依赖于注解,主module也要使用注解。所以就将注解的定义也拆分出来。这样做的好处是可以..._bw.append

mini2440 uart 裸机c-程序员宅基地

文章浏览阅读66次。转载于:http://blog.csdn.net/yx_l128125/article/details/7703653Uart工作原理:数据通信方式为:并行通信与串行通信两种:§并行通信:利用多条数据线将数据的各位同时传送。它的特点是:传输速度快,是用于短距离通信;§串行通信:利用一条数据线将数据一位位地顺序传送。特点是通信线路简单,利用简单的线缆就实现通信,低成本..._mini2440 nand uart 裸机

解决“libboost_thread.so.xxx.xxx.xxx: cannot open shared object file: No such file or directory”问题-程序员宅基地

文章浏览阅读2.8k次。使用boost库的时候,编译没问题,但是运行的时候报“libboost_thread.so.xxx.xxx.xxx: cannot open shared object file: No such file or directory”错误,解决方法如下: 执行:sudo ldconfig /usr/local/boost_xxx_xxx_xxx/stage/lib..._libboost_thread.so

框架设计原理与实战:理解框架的代码重用与模块化_代码框架复用-程序员宅基地

文章浏览阅读119次。什么是框架?它与类库、组件、工具集之间的区别在哪里?框架最初的意义是什么?为什么现在还需要了解框架设计的原理与实践?这几个问题将作为框架的介绍。框架(Framework)是指一个或多个代码文件以及这些文件所依赖的其他资源集合,用来简化开发过程并提供特定功能的工具箱。在计算机编程领域,框架是一种设计模式,提供了一套模板或标准,用于解决常见的编程任务,比如输入/输出、网络通信等。框架有着广泛的应用,包括数据库访问、业务逻辑处理、Web应用开发、多媒体、科学计算、图形用户界面(GUI)等。_代码框架复用

推荐文章

热门文章

相关标签