如java.io.LineNumberInputStream(deprecated),是装饰模式(decorate)的实现;
如java.io.OutputStreamWriter,是适配器模式(adapter)的实现;
引用知乎海纳老师的说法,这样看java.io包中的类的名称就能大概知道使用方法了;
Adaptor所要解决的问题是适配,它的目的在于接口的转换。
而Proxy恰恰相反,它的目的在于保持接口不变,而改变接口定义的方法的行为。
代理的示意图:
海纳老师课程学习:
1、“我们能不使用外包类的时候还是尽量不要使用外包类,除非在使用容器,泛型等等的时候,不得不使用。跟这么多出乎意料的结果比起来,审美和品位已经不是最重要的了。”
2、数据结构,栈
网上找的字节码指令对照表:
中序表达式求和转换为后续表达式思路:
http://www.codebelief.com/article/2016/10/application-of-stack-calculate-expressions/
"1. 第一遍扫描表达式时,遇到运算符则压入栈中,遇到操作数则按顺序取出,放入等待生成的后缀表达式中。
2. 若扫描运算符时遇到 ),说明栈中有 ( 与之配对,此时应依次弹出运算符,放入等待生成的后缀表达式中,直到 ( 从栈中弹出。
3. 若当前扫描的运算符优先级低于栈顶运算符的优先级,则应先弹出栈顶运算符,之后再把当前运算符压入栈中。"栈的作用,保存当前结果值
面向对象:
java5提供的语法进行不使用new来实例化数组;来源慕客网
jdk中好用的jinfo工具,
使用示例:
jinfo 12104 | grep user.timezone
得到如:user.timezone = Asia/Harbin
下面链接中分析的很详细,关于java应用需要在应用启动中加入全局设置保证使用“Asia/Shanghai”时区
https://my.oschina.net/plutonji/blog/1933091
2020-01-13
public static String frontCompWithZore(int sourceDate,int formatLength) { /* * 0 指前面补充零 * formatLength 字符总长度为 formatLength * d 代表为正数。 */ String newString = String.format("%0"+formatLength+"d", sourceDate); return newString; } String newString = String.format("%02d", 5); System.out.println("newString === "+newString);
DecimalFormat df=new DecimalFormat("0.00"); System.out.println(df.format((float)a/b));