Java之小知识点整理(后续会补充)
- ++ 运算符
- finally关键字(这里主要讲注意的事项,不讲整个异常体系)
- java 环境变量设置
- 标识符规范及一些基本注意事项
- java变量及final关键字
- 日志级别
- 重定向和内部转发
- 登录拦截
- 分页逻辑
- HashMap无法保证put时的顺序,怎样解决?
- 文件上传
- GC简介
- 事务
- redis简单应用
- 模糊查询
- 网站集群部署
- 为什么不使用jsp而使用模板引擎
- 单点登录
- …
前言:为什么会写这篇大杂烩呢?
每次学习时,很多小知识点会突然想起来,但是又有点不清晰,此时又需要去百度去找一大堆资料,从中找到令自己满意的。emmm,so,自己就汇总下,以便日后复习,如果有讲错之处,请各位大神指点一下,还有啥补充的,也可以在评论区留言下,有时间我会一一整理的…
++ 运算符
从最浅显的看,i++是在操作之后增加,而++i是在操作之前增加。
那么接下来看一个经典例题(当然,这种操蛋例题正常情况下咱们是不会写的,主要是用来面试笔试为难求职者,考察其各个知识点掌握的程度,不过有些东西了解得细致一点只有好处没有坏处,所以自然咱们就得理清^_^):
public class Demo{
public static void main(String[] args) {
int i = 0;
i = i++;
System.out.println(i);
int j = 0;
// 下面这句编译器会报一个黄色警告
// The assignment to variable j has no effect(中文释义:变量j的赋值无效 )
j = ++j;
System.out.println(j);
}
}
这段代码运行结果是啥呢?答案是0 和 1。
为什么会这样嘞?
i ++ 运算过程中,先保存自增1之前的值即原值,然后将i 加 1,最后返回之前保存的原值。即 i ++等价代码如下:
temp = i;
i = i + 1;
return temp;
所以i = i++就等价于:
// i 此时等于0,所以temp = 0
temp = i;
// i 此时等于 1
i = i + 1;
// temp又被赋值给i ,所以此时i = 0
i = temp;
而下面那个j = ++j 为啥编译器报一个黄色警告(变量j的赋值无效)?
因为++j操作中是没有缓存变量(temp)去存储j的值的,就相当于一个 j = j + 1操作,而j = ++ j就相当于 j = j = j +1;重复赋值1给j了,相当于无效(此操作不会改变j的值),从这点看,理论上++i操作是比i++操作更高效。
标识符规范及一些基本注意事项
注意事项
- 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
- 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
- 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
- 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
- 主方法入口:所有的 Java 程序由 public static void main(String []args) 方法开始执行。
标识符规范
Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
- 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
- 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
- 关键字或保留字不能用作标识符
- 标识符是大小写敏感的
- 合法标识符举例:age、$salary、_value、__1_value
- 非法标识符举例:123abc、-salary
保留字:goto 、const
关键字有点多不一一例举,不过关键字都是小写,另外,true、false、null 这三个到底是不是关键字我还是有点蒙,不过确定的是,这三个是不能用来做标识符的。
日志级别
日志记录器(Logger)是日志处理的核心组件。log4j具有5种正常级别(Level)。日志记录器(Logger)的可用级别Level (不包括自定义级别 Level), 以下内容就是摘自log4j API (http://jakarta.apache.org/log4j/docs/api/index.html):
static Level WARN
WARN level表明会出现潜在错误的情形。
static Level ERROR
ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。
static Level FATAL
FATAL level指出每个严重的错误事件将会导致应用程序的退出。
另外,还有两个可用的特别的日志记录级别: (以下描述来自log4j APIhttp://jakarta.apache.org/log4j/docs/api/index.html):
static Level ALL
ALL Level是最低等级的,用于打开所有日志记录。
static Level OFF
OFF Level是最高等级的,用于关闭所有日志记录。
日志记录器(Logger)的行为是分等级的。如下表所示:
分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来,也是说大于等于的级别的日志才输出。
日志记录的级别有继承性,子类会记录父类的所有的日志级别。
这个知识点的总结来自于https://www.cnblogs.com/lingduqianli/p/7589173.html
HashMap无法保证put时的顺序,怎样解决?
LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。
参考:https://blog.csdn.net/weixin_43685889/article/details/84107694