liubobuzhidao

有关Java的一些不常见问题

####

// 哼,这是个坑,我会跟你说嘛。。。

Double num = Double.NaN

// :(
if (num == Double.NaN) {
System.out.println(num);
}

// :)
if (Double.isNaN(num)) {
System.out.println(num);
}
for语句搭配break、continue一起使用:break表示结束循环,continue跳过本次循环继续执行

修改 public static final String 的值:
http://unmi.cc/java-reflection-modify-final-field-value/
此处对于Java端可用,但是android端不行,原因在于Android使用的Dalvik与JVM不一样,
会报错 java.lang.NoSuchFieldException: No field modifiers in class Ljava/lang/reflect/Field;

1
2
3
4
This works.
Field field = data.getClass().getDeclaredField("type");
field.setAccessible(true);
field.set(data, null);

http://taobaofed.org/blog/2016/05/05/new-compiler-for-android/

关于JDBC的一些细节信息

> 1、JDBC是从1开始的,也即第一行开始,不从0开始。
>      >      > 2、DriverManager.registerDriver(new Driver()); //此处查看源码你会发现驱动加载了两次,删除jar后会发现程序代码报错,说明Driver严重依赖jar的存在。
>      >       >      >      解决的办法使用反射:Class.forName("com.mysql.jdbc.Driver");
>      >       >       >      >      > 3、sql CUD使用executeUpdate(),查询推荐使用executeQuery();
>      >       >       >       >      >      >      > 4、单元测试 断言可以判断执行的结果是否和期望的结果是一样的。
>      >       >       >       >       >      >      >      >      > @Test执行之前都会先执行@before, @Test执行以后都会执行@After
>      >       >       >       >       >       >      >      >      >      >      > 面向接口编程  Dao :Data Access Object 数据访问对象     
>      >       >       >       >       >       >       >      >      >      >      >      >      > sql注入的原因是使sql语句的查询条件为true导致,解决办法是使用PreparedStatement,固定查询语句的格式以防止出现查询条件为true的情况。

关于xml的一些知识

> xml是Json出现之前流行的计算甲之间传输数据的格式,先多用于软件的配置文件。
>      >      > xml只能有一个根节点
>      >       >      >      > 语法比较严格, 属性值必须使用单引号后者双引号包起来,<Book price="20">
>      >       >       >      >      >      > 约束技术:DTD(早期 文档类型定义 struts2 hibernate) ~~ Schema(最晚 spring)
>      >       >       >       >      >      >      >      > 解析:Dom4j