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


    教材学习内容

    JDBC 简单功能
    • 连接数据源,如数据库

    • 传给数据库查询和更新指令

    • 获取并处理数据库返回结果(对查询等的响应)

      public void connectDBAndQuery(String username, String password) 
      {
      Connection con = DriverManager.getConnection("jdbc:myDriver:myDatabase",  username, password);
         Statement stmt =  con.createStatement();
         ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
         while (rs.next()) {
         int x = rs.getInt("a");
         String s = rs.getString("b");
         float f = rs.getFloat("c");
        }
      }
      
    JDBC 组成
    1. JDBC API
    • 提供关系型数据的编程访问接口
    • 与分布式或异构环的数据源交互
    • 是 Java平台的一部分(包括J2SE和J2EE)
    • JDBC 4.0 API 分成 java.sql 和 javax.sql 两个包

    2.DriverManager

    JDBC 架构的基石:定义对象,将 Java 应用连接到 JDBC 驱动

    标准扩展包 :javax.naming 和 javax.sql,允许使用注册到 JNDI 的 DataSource对象,来部署数据源的连接

    评价:小而简

    推荐:虽可使用 Connection,但推荐使用 DataSource

    3、JDBC 测试组件

    判断 JDBC 驱动是否运行程序

    虽不全面,但体现 JDBC API 很多重要特性

    4、JDBC-ODBC 桥

    通过 ODBC 驱动,来提供 JDBC 访问

    但要求每个机器都有 ODBC 驱动

    因此,适用于企业网络(如果客户端安装不是问题),或三层架构的应用服务器代码

    JDBC 架构

    分为双层架构和三层架构

    双层

    • 作用:此架构中,Java Applet 或应用直接访问数据源

    • 条件:要求 Driver 能与访问的数据库交互

    • 机制:用户命令传给数据库或其他数据源,随之结果被返回

    • 部署:数据源可以在另一台机器上,用户通过网络连接,称为
      C/S配置(可以是内联网或互联网)

    三层

    • 侧架构特殊之处在于,引入中间层服务
    • 流程:命令和结构都会经过该层
    • 吸引:
      可以增加企业数据的访问控制,以及多种类型的更新;

    另外,也可简化应用的部署,并在多数情况下有性能优势

    • 历史趋势:
      以往,因性能问题,中间层都用 C 或 C++ 编写
      随着优化编译器(将 Java 字节码 转为 高效的 特定机器码)和技术的发展,
      如EJB,Java 开始用于中间层的开发
      这也让 Java 的优势突显出现出来
      使用 Java 作为服务器代码语言,JDBC随之被重视

    反射与ClassLoader

    java的反射机制原理
    一 反射机制的概念:

    指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法.这种动态获取信息,以及动态调用对象方法的功能叫java语言的反射机制.

    二 反射机制的应用:

    生成动态代理,面向切片编程(在调用方法的前后各加栈帧).

    三 反射机制的原理:

    1 首先明确的概念: 一切皆对象----类也是对象.

    2 然后知道类中的内容 :modifier constructor field method.

    3 其次明白加载: 当Animal.class在硬盘中时,是一个文件,当载入到内存中,可以认为是一个对象,是java.lang.class的对象.

    ClassLoader类位于java.lang包中,直接继承自Object,是一个抽象类。

    ClassLoader翻译过来就是类加载器,普通的Java开发者其实用到的不多,但对于某些框架开发者来说却非常常见。理解ClassLoader的加载机制,也有利于我们编写出更高效的代码。ClassLoader的具体作用就是将class文件加载到jvm虚拟机中去,程序就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载。想想也是的,一次性加载那么多jar包那么多class,那内存不崩溃。本文的目的也是学习ClassLoader这种加载机制。

    自定义泛型

    泛型定义:

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

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

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

    自定义枚举

    了解java.lang.Enum类

    1、直接撰写程序继承Enum类会被编译程序拒绝。

    2、Enum是个抽象类,无法直接实例化,它操作了Comparable接口。Action的构造函数被声明为private,因此只能在Action类中调用。

    3、在JDK1.4之前撰写的API,仍是使用interface定义常数作为枚举值。

    4、Enum的equals()方法与hashCode()方法基本上继承了Object的行为,但被标示为final。由于标示为final,所以定义枚举是,不能重新操作equals()与hashCode(),这是因为枚举成员,在JVM中智慧存在单一实例,Object定义的equals()与hashCode()作为对象相等性比较是适当的定义。

    常用标准注释

    1、@Override
    就是标准注释,被注释的方法必须是父类或接口中已定义的方法,请编译程序协助是否真的为重新定义方法。

    2、@Deprecated
    如果某个方法原先存在与API中,后来不建议再使用,可以在该方法上注释。若有用户后续想调用或重新定义这个方法,编译程序会提出警告。对于支持泛型的API,建议明确指定泛型真正类型,如果没有指定,编译程序会提出警告。

    3、@SuppressWarnings
    指定抑制unchecked的警告产生:

    @SuppressWarnings(value={"unchecked"})

    4、@SafeVarargs
    表明开发人员确定避免了heap pollution问题。heap pollution问题就是编译程序无法检查执行时期的类型错误,无法具体确认自变量类型。

    5、@FunctionalInterface
    让编译程序可协助检查interface是否可做为lambda的目标类型

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

    问题1:JDBC到底是什么?
    问题1解决方案:jdbc是 java数据库连接(java DataBase Connectivity)技术的简称,由一组使用java语言编写的类与接口组成,可以为多种关系数据库提供统一访问。

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

    问题1:没有some类

    补充some类

    代码托管

    上周考试错题总结

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

    A .-r
    B .-R
    C .-c
    D .-f
    正确答案: D

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

    A .-r
    B .-directory
    C .-all
    D .-R
    正确答案: A D

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

    A .不匹配
    B .'Hello'
    C ."World"
    D .'Hello',"World"
    正确答案: B C

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

    A .z
    B .zo
    C .zoo
    D .zooooooooooooooooooooooooooo

    • 以下代码,第五行和第七行设为()结果只会出现两条日志信息:

    1 import java.util.logging.*;

    2 public class LoggerDemo {

    3 public static void main(String[] args) {

    4 Logger logger = Logger.getLogger(LoggerDemo2.class.getName());

    5 logger.setLevel(XXX);

    6 for(Handler handler :
    logger.getParent().getHandlers()) {

    7 handler.setLevel(XXX);
    8 }

    9 logger.log(Level.WARNING, "WARNING 訊息");

    10 logger.log(Level.INFO, "INFO 訊息");

    11 logger.log(Level.CONFIG, "CONFIG 訊息");

    12 logger.log(Level.FINE, "FINE 訊息");

    13 }

    14 }

    A .Level.FINE
    B .Level.CONFIG
    C .Level.INFO
    D .Level.WARNING
    正确答案: C

    • It is possible to send in data to a Java program via the command-line.(可以在命令行中给Java程序发送数据)

    A .True

    B .False

    正确答案: A

    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(以上三个都不合法)

    正确答案: D

    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

    结对及互评

    评分标准

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

    不使用Markdown不加分

    有语法错误的不加分(链接打不开,表格不对,列表不正确...)

    排版混乱的不加分

    模板中的要素齐全(加1分)

    缺少“教材学习中的问题和解决过程”的不加分

    缺少“代码调试中的问题和解决过程”的不加分

    代码托管不能打开的不加分

    缺少“结对及互评”的不能打开的不加分

    缺少“上周考试错题总结”的不能加分

    缺少“进度条”的不能加分

    缺少“参考资料”的不能加分

    教材学习中的问题和解决过程, 一个问题加1分

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

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

    一周提交次数少于20次的不加分

    其他加分:

    周五前发博客的加1分

    感想,体会不假大空的加1分

    排版精美的加一分

    进度条中记录学习时间与改进情况的加1分

    有动手写新代码的加1分

    课后选择题有验证的加1分

    代码Commit Message规范的加1分

    错题学习深入的加1分

    点评认真,能指出博客和代码中的问题的加1分

    结对学习情况真实可信的加1分

    扣分:

    有抄袭的扣至0分

    代码作弊的扣至0分

    迟交作业的扣至0分

    点评模板:

    博客中值得学习的或问题:
    xxx
    xxx
    ...
    代码中值得学习的或问题:
    xxx
    xxx
    ...
    基于评分标准,我给本博客打分:XX分。得分情况如下:xxx

    参考示例

    结对及互评

    点评过的同学博客和代码

    本周结对学习情况

    结对学习内容
    -时间与日期

    上周博客互评情况

    其他(感悟、思考等,可选)
    这周学习效率一般般,有待提高。不熟悉地方后面花些时间多看看。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时

    | 第九周 | 300/2080 | 2/9 | 30/90 | |

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

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

    • 计划学习时间:XX小时

    • 实际学习时间:XX小时

    • 改进情况:

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

    参考资料

  • 相关阅读:
    C# 酒鬼买酒喝,瓶盖和空瓶子可以换新的酒
    C# 图结构操作
    C# 二叉堆
    Unity 单元测试(NUnit,UnityTestTools)
    Unity PlayerPrefs类进行扩展(整个对象进行保存)
    客户端操作判断以服务器时间为准
    C# 使用枚举获取对应的数组值时
    C# 实现简单状态机(参考代码)
    叶脉图案以及藤蔓生长算法在houdini里面的实现 Leaf Venation
    steering behaviors 转向行为 集群模拟 小结
  • 原文地址:https://www.cnblogs.com/lyx1996/p/6748179.html
Copyright © 2020-2023  润新知