• 随心而动
    2019-08-03
    String a=空这个我有点没太明白,能不能具体讲述一下,他这个作用是什么。

    作者回复: 明确一下问题,你是对
    String a = null;
    有疑问。

    这个也算是计算机和编程里的一个略违和的地方。和从0开始计数有的一拼。

    FAQ版本在此:https://github.com/deepnighttwo/LetsJava/blob/master/FAQ/02%E7%AB%A0-%E7%BC%96%E7%A8%8B%E9%87%8C%E7%9A%84%E4%B8%A4%E4%B8%AA%E7%89%B9%E6%AE%8A%E7%9A%84%E5%80%BC.md

    要理解这些,可能要接触的知识比第一章的内容略多一点。

    从底层来说,a就是一个地址,指向一个实际的值。比如说,就好像从本子上撕下来一页纸,然后计划用这张纸记录一个房子的地址。那么这张纸就是a,a上的内容就是房子的地址,实际的值就是房子。

    三个主角:a(纸),房子的地址(a的内容),房子本身(a指向的实际的值,也就是后面我们要学到的对象和数组实体)

    回到问题本身,a = null是什么意思呢?a本身是内存里的以块内存,它本身可能是被使用过的,本身就是有内容的。就好像从本子上撕下一张纸,这张纸之前已经被人用铅笔写上过内容了。

    那么问题就尴尬了,我本来撕下这张纸,是用来记录一个房子的地址的。那么这张纸上原本的内容,可能是一首古诗里的几个字。比如“窗前明月”,如果把这四个字当作房子的地址,会出莫名其妙的错误。所以我们在撕下这张纸并打算用它记录房子地址的同时,应该做一个初始化的工作,简单来说就是,把这张纸上原来的内容擦掉。

    a = null, 正是这么一个“把这张纸上原来的内容擦掉”的操作。a被拿来指向一个对象或者数组实体,那么a之前无论被用作什么别的目的,都要先清除掉原来的内容。否则就会出问题,拿着a原来的值当作对象或者数组的地址,会出内存问题。这也是Java比C和C++省心的一个重要的方面。Java是不允许人为操作内存地址的。

    计算机里有两种特殊的值,和具体的编程语言无关。一种叫做null,0,空,随便叫它什么,它代表的就是无。比如Java里的null。

    还有一种叫做undefined,就是不知道是什么值。可以认为就是这个内存之前被使用过之后的值。这个值在新的用途下没有意义,必须清除掉,否则就会出问题。

    理解这两种特殊的值的含义,也算是编程的必经之路。

    
     3
  • 杨过
    2019-05-24
    请问写完一行代码,如何让这行代码变量之间自动有一个空格。就像a+b 自动变为a + b

    作者回复: 被你发现了,其实后面我会说到。这是intelliJ的format代码功能。在菜单栏 code 下面有 reformat code菜单项,就是这个功能。菜单项上有快捷键,不用每次点菜单,用起来贼爽。

    
     2
  • Master King
    2019-05-31
    老师,您好:
          在代码块上的理解上,其存在的意义是什么?
          如果理解变量作用域,这样的限制显得是否鸡肋了点,感觉业务场景用的不是很大呢。因为从其他角度来说类,方法上已经可以设计出各种场景的作用域了喔~

    作者回复: 单纯的代码块确实是鸡肋。很多人可能都不知道有这个语法。在这里列出来,其实是帮助大家统一对代码块的认识。其实代码块无处不在,跟在 if-else,while,for,还有后面要讲到的方法 后面。它就是来限定作用域的。单纯没有名字的使用代码块的地方确实不多。

    嵌套多了,逻辑复杂了,代码块的作用就更凸显了。

    
     1
  • 肥low
    2019-05-29
    很喜欢这种实操性强的教程,不过感觉课程有点冗长,我更喜欢几分钟的视频,个人拙见

    作者回复: 请叫我大啰嗦

    哈哈,第二篇的内容已经注意了,一节课只专注于一个点。成品内容应该会控制在10分钟以内。

    
     1
  • Geek_a7fd0f
    2020-02-06
    老师你好,又得问你个问题。是这样的,课程里讲到内层代码块不可以重复定义外层代码块已经定义过的变量,可是为什么被调用的方法里可以定义外层方法里的同名变量呢?谢谢老师

    作者回复: 写了一篇文章回答你所有问题,方法里的方法块执行时不会分配一个栈,但是方法调用会分配一个栈。

    https://github.com/deepnighttwo/LetsJava/blob/master/FAQ/02%E7%AB%A0-Java%20%E4%B8%AD%E7%9A%84%E5%86%85%E5%AD%98%E6%98%AF%E6%80%8E%E4%B9%88%E5%88%86%E9%85%8D%E7%9A%84%20.md

    
    
  • Sir丶雨轩
    2020-01-13
    public class MultiplicationTable {
        public static void main(String[] args) {
            for (int i = 1; i <= 9; i++) {
                for (int j = 1; j <= i; j++) {
                    System.out.print(i + "*" + j + "=" + i * j + "\t");
                }
                System.out.println();
            }
        }
    }
    老师 直接用j<=i判断 这样会不会简洁些 在第一层循环直接输入空 里面的循环输出语句不带In
    展开

    作者回复: 对的,例程里更多的是想展示一下break的用法。第一篇的内容对于很多有编程经验的同学来说可能太过于简单了。

    
    
  • 彧豪
    2019-12-15
    强迫症表示这样看起来更规整,哈哈哈:
    public class MultiTab {
      public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
          int product = 0;
          String res = "";
          for (int j = 1; j <= i; j++) {
            product = i * j;
            res += j + "x" + i + "=" + product + "\t";
          }
          System.out.println(res);
        }
      }
    }
    1x1=1    
    1x2=2    2x2=4    
    1x3=3    2x3=6    3x3=9    
    1x4=4    2x4=8    3x4=12    4x4=16    
    1x5=5    2x5=10    3x5=15    4x5=20    5x5=25    
    1x6=6    2x6=12    3x6=18    4x6=24    5x6=30    6x6=36    
    1x7=7    2x7=14    3x7=21    4x7=28    5x7=35    6x7=42    7x7=49    
    1x8=8    2x8=16    3x8=24    4x8=32    5x8=40    6x8=48    7x8=56    8x8=64    
    1x9=9    2x9=18    3x9=27    4x9=36    5x9=45    6x9=54    7x9=63    8x9=72    9x9=81
    展开

    作者回复: 8错8错

    
    
  • Geek_ae270e
    2019-11-09
    我用
    if(i > j){
        continue;
    }
    也可以耶!

    作者回复:
    欧耶!欧耶!!

    
    
  • 肥low
    2019-05-29
    mark,我没有用到break

    // 九九乘法表
            for (int i = 1; i < 10; i ++) {
                for (int j = 1; j <= i; j ++) {
                    System.out.print(i + " x " + j + " = " + i * j + "\t");
                }

                System.out.print("\n");
            }
    展开

    作者回复: 这是一个更好的实现,手动点赞👍

    
    
  • Link.W
    2019-05-25
    public class MultiTable {
        public static void main(String[] args) {
            for (int i = 1; i <= 9; i++) {
                String line = "";
                for (int j = 1; j <= i; j++) {
                    line = line + j + "*" + i + "=" + (j * i) + "\t";
                }
                System.out.println(line);
            }
        }
    }
    ============================================
    1*1=1    
    1*2=2    2*2=4    
    1*3=3    2*3=6    3*3=9    
    1*4=4    2*4=8    3*4=12    4*4=16    
    1*5=5    2*5=10    3*5=15    4*5=20    5*5=25    
    1*6=6    2*6=12    3*6=18    4*6=24    5*6=30    6*6=36    
    1*7=7    2*7=14    3*7=21    4*7=28    5*7=35    6*7=42    7*7=49    
    1*8=8    2*8=16    3*8=24    4*8=32    5*8=40    6*8=48    7*8=56    8*8=64    
    1*9=9    2*9=18    3*9=27    4*9=36    5*9=45    6*9=54    7*9=63    8*9=72    9*9=81
    展开

    作者回复: 所以你的问题是?

    
    
我们在线,来聊聊吧