00:00
然后下边呢,我们要说明一个问题啊,这也是算的,算是一个说明了啊啊说明什么呢?就是变量呢,必须得先声明,先赋值以后呢,你才可以去使用啊,变量必须先声明啊,然后呢去使用,举例子啊,比如说像这个语句,我把这个语句我CTRLX我放到这个位置行不行,显然不行了,对吧,就是咱们这个程序呢,咱们目前呢,都是按照这个先后顺序执行的啊,你一上来呢,就输出它这个变量根本在内存中还没有被加载,哎,所以是不可以的啊保存来测试这个你觉得它是编译不过还是运行不过呀,其实编译就不过了,因为编译我从这往下走的时候呢,就发现这个东西。
01:00
你前面没有啊,是编译就不过了啊,找不到这个符号啊,就是要么呢,是你这个变量前面你写错了,呃,你写了以后这边写错了,或者说呢,就是其实本质上就是没有是吧,有可能是你写错造成的啊,放到这不行了,那这个呢,原因就是因为我们此时内存中啊并未啊不能叫内存中了,内存中呢,还是咱们运行时候才会出现的啊,现在我编译就不过了啊,那你应该说在哎这个使用my number之前定位定义过的这个变量啊,放在这不行,那再问我放到这行不行。那同学说可以,那可以的话呢,那第二个问题输出多少啊,输出零,输出零,那是你认为它默认有一个值是零了是吧?啊只能说是你感觉上应该是这样子的啊,但这也算是一种观点啊,有认为不行的不没试过是吧,那咱们就通过这个结果呢,我们往回倒推啊来,我写到这个位置了,然后下边呢,我还是先编译。
02:25
走看又报错了23行,这不23行吗?说23张23行可能未被未未初始化的叫my number,哎,刚才有同学说说诶,那应该输出零,那是相当于你认为它有一个默认值了,哎,但是现在告诉你的是,哎这个位置我们定义的变量呢,是没有默认值的啊,哎,咱们现在定义在这里边是没有默认值的啊,也就是说呢,我现在想输入它,包括你想给它,呃在它的基础上加个一加个二,加个三,那这个变量现在还没有值呢,所以也不允许啊去使用啊,所以这个呢也是不对的。
03:07
啊,这个呢,你要说这个叫未定义过,而我们这块呢,就应该是未被赋值过啊,使用这个之前未被赋过,哎,这个它啊这个呢,是我们一个叫编译错误。哎,也就是说,也就是说总结一下啊,我们这个变量呢,必须你先声明了,然后呢,给他赋过值了,下边呢,我们才可以去用这个变量,哎,就是这个事情啊啊这个大家呢,注意一下这个问题。行,这是我们说的,这个算是第一个小的事情啊,说变量呢,必须先声明后使用啊,这是其一,然后第二个呢,我们说变量啊,它都有它所定义的一对作用域啊,这个我们也明确一下啊,说变量都定义在啊,这个其作用于内啊,然后呢,在作用于内,作用于内啊,然后呢,其啊或者他吧,哎,是有效的,这个言外之意呢,就是出了作用欲呢,它就失效了,换句话说,哎,出了作用哎,这个就失效了,好,那这个事呢,我稍微的给大家也演示一下啊,嗯,虽然说这个内容大家还没有接触过啊,我现在要定一个方法了,大家呢,就先看一下就行啊。
04:44
哎,这呢是另外一个结构,哎也是一个,其实这也是个方法,这也是个方法,都是方法啊,然后在这个方法当中呢,我现在也定义一个变量啊,定一个变量,比如说我叫my class。
05:00
哎,定一个in的型的my class,我的班级,哎班级呢,比如是一般的是吧,我就先这样的写一下啊,这个变量我定义好以后,我想看看能不能在这用,对,然后print这块我们去输出一下,叫my class,哎,就想这样去用一下啊,就看似说这个变量也定义了,也赋了值了,说能不能用呢?呃,因为这是程序入口嘛,所以我们只能是在这写输出了,对吧,保存一下对来编译。你发现报错了,说我们在这个30行的时候呢,说找不到符号,嗯,那就说明这个呢不行,对呃,你要说这个原因的话呢,应该这样说啊,就是我们这个变量呢,它的作用域是不是在这儿,对,就是它定义包含它的这一段大括号啊,然后它出了这一段大括号以后呢,它就失效了,你在另外一个大括号中用是不行的。
06:01
对,这里边这个作用域呢,就是定义它的那一对大括号啊,就是它的一个作用域啊呃,这个呢,大家注意一下这个问题啊,然后第三个问题哎,我们说同一个作用域内,然后不可以诶声明两个同名的这个变量啊,这个对变量名。呃,同名的变量,这个其实很好理解啊,咱们昨天呢,讲这个类的时候,其实呃也有这样一个要求,就是我们在同一个这个文件下啊,原文件下我们这上面这个class叫variable test了,你还能再写一个叫variable test吗?对,这肯定不可以啊,这个都应该算基本的一个常识了啊,像这种事情呢,大家其实关注一种想法啊,就这也是一种思维方式,叫做这叫什么逆向思维是吧?逆向思维或者呢,哎,你要说一种方法呢,就是反正法,哎这其实是一个非常好的一种思想哈,就大家呢,以后哎,我讲后边知识呢,也经常会这样去说啊,你不知道这个东西行不行的时候呢,你就可以假设他行,你看呢,他会不会有一些问题啊,如果确实有些问题了,那你你再回过来说啊,那应该不能这样,如果你发现假设它行,发现没什么问题,那就可以啊,比如说呢,我们哎允许在一个文件中定义两个同名的类啊,都叫VI test,那你可以想象一下。
07:37
我编译以后是不是会生成同一个文件目录下两个同名的直接码文件了,这个事儿是不是肯定在Windows下或在哪个系统下都不允许吧啊,你不可能出现两个同名的文是吧,物理上的文件啊,所以那自然然的我们在同一个原文件当中就不可以命名同名的类了,那推理到这也是一样,我上面呢,已经定义了一个比如叫my age是12了,哎,你就不可以再去定一个叫my age啊,我写成个22。
08:12
这就不对了啊,来编译来看这个manage啊,这个是还是刚才那个错啊,然后这块manage呢,说我已经在这定义过了,所以在32行呢,就不允许再定义了。啊,这个呢,我们把它呢先阻止掉啊,这个也是编译不通过,那这个呢,还说不可以再定义,诶不可以再定义同名的这个呃变量啊,应该准确的说不可以在这个同一个作用域内。哎,定义透明的变量啊,那如果你要非要说为什么。
09:02
为什么呀?对,还是这种想法啊,就是大家呢,你可以假设可以你想想有什么问题对你说,比如我对比如我下边我要去输出一下假设他要可以这样定义,你说我这输出的应该出12呢,还是应该出22呢,你到底用的是谁呢?是吧,分不出来了,哎,所以自然而然的呢,也就不能这样去定义了啊啊其实事实上呢,也就是这么回事儿啊,你都不知道你用的是哪个,我都区分不了,那自然而然的就不允许定义透明的啊啊啊,那再回过来,你看我们这个,呃,这里边写的这个注意点啊,其实我们这也提到了啊,说每个变量呢,先生明后使用啊,有它的这个作用域,哎,只有在作用域内才有效啊,在整个范围内内不可定义同名的了啊,然后下边提到这个事儿,说我们呢,实际上呢,是使用这个变量名啊,来访问这块区域的啊,那咱们这块调这不都是吗,我输出这个my number也好,输出MY也好。
10:07
数值的就是你具体的这个数值啊,就这样啊行,那通过咱们刚才这样一个讲解呢,大家对我们定义这个变量呢,有一个这样的一个认识啊就可以了,然后接下来呢,咱们再去展开说,在Java当中到底都有哪些具体的数据类型。
我来说两句