传智播客黑马程序员Java学习笔记(一)

最近在对照学习黑马程序员的Java视频,对照视频将学习笔记记录下来,以供复习。

1. Idea的安装

1.1 安装软件与版本

本套教程的开发环境是ideaIU-2017.3.4.exe和jdk-9.0.4_windows-x64_bin.exe。附了很详细的破解方法说明。

1.2 两个常用设置:

  1. 设置Editor的Font为Consolas 32(高清屏),看上去字体比较舒服。
  2. 设置KeyMap-Main Menu-Code-Completion-Basic Alt+/

1.3 IDEA 常用快捷键总结

  1. 智能补全:Ctrl+Shift+Space
  2. 自我修复:Alt+Enter
  3. 重构一切:Ctrl+Shift+Alt+T
  4. 切来切去:Ctrl+Tab
  5. 选你所想【选中上下文相关联代码】:Ctrl+W
  6. 代码生成:Template/Postfix +Tab
  7. 发号施令:Ctrl+Shift+A
  8. 无处藏身:Shift+Shift
  9. 自动完成:Ctrl+Shift+Enter
  10. 创造万物:Alt+Insert

2.正斜杠和反斜杠

  1. 因为dos的命令行参数用了正斜杠,所以路径只能用反斜杠。
  2. unix的命令行参数用的是中杠,因此路径可以用正斜杠。
  3. windows为了向下兼容dos,路径用正斜杠、反斜杠都可以。
  4. 转义符一直都是反斜杠。

3.L与F

  1. 不加L默认是int,int转为long是安全的,所以会自动转,能编译通过。如果超过int的取值范围还不加L,那么也会直接报错了。
  2. 浮点数不加F默认是double类型,double转float可能损失精度,因为不会自动转,编译通不过。
float f = (float) 4.5;
//Or, You can use this:
float f = 4.5f; 

4.ASCII码

常见的ASCII码

  • 字符0-9的ASCII码:48-57;
  • 小写字母a-z的ASCII码为:97-122;
  • 大写字母A-Z的ASCII码为:65-90;

助记:本人现年48岁,97年香港回归哪年参加工作人家叫我小a,65岁赶上延迟退休人家叫我老A。

  • 空字符的ASCII码为0;
  • 制表符的ASCII码为9;
  • 换行符的ASCII码为10。

助记:空制换----0 9 10(零酒食)
空置换,白捞一场,没有酒可以喝。

ASCII码获取

char c = 'A';
int a = Integer.valueOf(c);
System.out.println(a);

输出:65

5.自增符++的内幕

5.1 助记

  • i++ 先人后已
  • ++i 先已后人

5.2 助记可能带来的误区

在运算符的优先级中,自增符不管是在变量的前面还是后面,它的优先级是高于赋值符。哪是不是与前面的助记矛盾呢?其实变量是先完成了自增,只是把变量在自增之前的值先用“快照”先保留下来了。

public class JavaPlusPlus {

    public static void main(String args[]) {
        int x=0;
        x = x++;
        System.out.println(x);
    }
}
  // access flags 0x1
  public <init>()V
   L0
    LINENUMBER 3 L0
    ALOAD 0
    INVOKESPECIAL java/lang/Object.<init> ()V
    RETURN
   L1
    LOCALVARIABLE this Lcn/itcast/day04/demo01/JavaPlusPlus; L0 L1 0
    MAXSTACK = 1
    MAXLOCALS = 1

  // access flags 0x9
  public static main([Ljava/lang/String;)V
   L0
    LINENUMBER 6 L0
    ICONST_0  //将数字0压入操作数栈栈顶。
    ISTORE 1  //将栈顶数字从栈弹出到局部变量表索引为1位置,即保存到X。
   L1
    LINENUMBER 7 L1
    ILOAD 1//将局部变量表索引为1位置的值压到栈顶,即将X的值压入栈。
    IINC 1 1//直接在局部变量表索引为1位置,直接增加1。IINC,I代表整数,INC是增长的英文缩写,1是变量表索引号,1是增加1。
    ISTORE 1//操作数栈弹栈,将0从栈弹出到局部变量表索引为1位置,即将数字0存回X。
   L2
    LINENUMBER 8 L2
    GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
    ILOAD 1
    INVOKEVIRTUAL java/io/PrintStream.println (I)V
   L3
    LINENUMBER 9 L3
    RETURN
   L4
    LOCALVARIABLE args [Ljava/lang/String; L0 L4 0
    LOCALVARIABLE x I L1 L4 1
    MAXSTACK = 2
    MAXLOCALS = 2
}

5.3 理解底层后的助记

  1. 不管变量在++前还是后,自增操作都是优先执行。
  2. 当变量在++前时,表达式取自增前的值参加运算。
  3. 当变量在++后时,表达式取自增后的值参加运算。
  • i++
ILOAD 1
IINC 1 1
  • ++i
IINC 1 1
ILOAD 1

这是最本质的区别,什么都说清楚了。

public class JavaPlusPlus {

    public static void main(String args[]) {
        int x=0;
        x = (++x) + (++x);
        System.out.println(x);
    }
}
  // access flags 0x9
  public static main([Ljava/lang/String;)V
   L0
    LINENUMBER 6 L0
    ICONST_0  //将数字0压入操作数栈栈顶。
    ISTORE 1  //将栈顶数字从栈弹出到局部变量表索引为1位置,即保存到X。
   L1
    LINENUMBER 7 L1
    IINC 1 1//直接在局部变量表索引为1位置,直接增加1。IINC,I代表整数,INC是增长的英文缩写,1是变量表索引号,1是增加1。
    ILOAD 1//将局部变量表索引为1位置的值压到栈顶,即将X的值压入栈。
    IINC 1 1//直接在局部变量表索引为1位置,直接增加1。IINC,I代表整数,INC是增长的英文缩写,1是变量表索引号,1是增加1。
    ILOAD 1//将局部变量表索引为1位置的值压到栈顶,即将X的值压入栈。
    IADD//将栈顶的头两个值相加,并把结果压入栈。
    ISTORE 1//将栈顶数字从栈弹出到局部变量表索引为1位置,即保存到X。
   L2
    LINENUMBER 8 L2
    GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
    ILOAD 1
    INVOKEVIRTUAL java/io/PrintStream.println (I)V
   L3
    LINENUMBER 9 L3
    RETURN
   L4
    LOCALVARIABLE args [Ljava/lang/String; L0 L4 0
    LOCALVARIABLE x I L1 L4 1
    MAXSTACK = 2
    MAXLOCALS = 2
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值