00:00
那好了,咱们再继续往下吧,啊,那咱们现在为止啊,是把这个静态变量的事儿说了,就是这个方法,我们什么时候定义成静态方法,什么时候定义成实例方法。有没有什么标杆呢?因为我们刚才在课程当中啊,我们说了啊,这个国籍啊,它是什么呀。哎,国籍是什么呀,是中国人这个类,每一个人,每一个对象,他都有的一个。特征,并且这个特征的值是什么是一样的,那么我们生命成静态变量,那对于方法来说呢,我们方法什么时候生命成静态方法,什么时候生明成这个实例方法呢?对吧?哎,我们一起来把这个研究一下啊,把它研究一下。来在这呢,我们点右键,我们新建一个什么呢?我们叫做s static test05好啊打开啊,那么这块呢,我们主要研究的一个题目就是对吧?哎,就是关于方法来说,什么时候定义为实例方法。
01:05
什么时候定义为静态方法?啊,你呢去思考一下,我觉得这个我不讲,其实你也能思考出来。啊,Public VO主方法加上。哎,想一想,什么时候方法定义成实例方法,什么时候定义成静态方法,就这个方法应该定义成静态方法还是实例方法呢?啊,应该应该应有没有什么标准呢?有没有什么,有没有参考标准,就是达到这个我们就定义成实例方法,达到那个我们就定义成静态方法。首先我觉得大家先去理解一个东西,啊,类等于什么?等于属性加方法是不是?哎,这个你得先认识到属性描述的是什么,描述的是什么,描述的是状态对吗?方法描述的是什么?描述的是行为动作对吗?一个方法代表是一个动作是不是?哎,一个方法代表了一个动作。
02:04
好,那我问大家什么时候你你会生成实例方法。就是对象方法,什么时候你你会把这个,把这个方法动作,把这个定义成静态方法呢,有没有什么标准呢。有没有什么标准,各位?咱们一起探讨一下,就是你从思想层面去理解一下实例方法,实例方法实例实例实例实例实例是啥?对象对象对象对象方法,因为这个方法得先就对象才能去执行这个方法,那这个方法就代表的是行为或者是动作,对吗?行为不同的时候。实力相同的时候静态于阳说的对啊。呃,懒得创建对象,就写成静态的呗,哎,也有道理啊,胡浪说的也有道理啊,也有道理,就是懒得创建对象是吧?哎,通过这个类名点去访问方法需要对象参与,行为需要对象去触发,其实这个地方啊,我说一下啊,就是此方法一般都是什么呀,描述了一个行为。
03:04
啊,此方法一般都是描述了一个行为,如果说该行为必须由对象触发,由对象去触发啊,去触发啊触发,那么该方法定义为实例方法。啊,实例方法。就属于对象级的特这个行为啊,属于对象级的行为。那么在这里呢,我给大家说一下啊,我给大家说一下,比如说吧,我在这里有个class user,那么这个user呢,它有什么呀?哎,有这个叫做这个ID啊,然后接下来我在这提供一个什么呢?提供一个public void set ID,然后呢,Int类型呢,AI,那么接下来把这个I呢付给谁呀?哎,付给这个ID,那么接下来我们在这public返回int叫get ID,那么接下来我们在这return一个什么呀?ID。
04:05
那么大家思考一个问题啊,我们这是一个什么变量,各位是不是一个实例变量对吧?哎,是不是一个实例变量啊,需要对象。对吧?哎,需要对象,那么接下来大家想一想,在这个方法上我们能不能加static。能不能加?或者说这个方法上我们能不能加。能不能?各位思考一下。想象一下这个方法能不能加static?可以啊。能加吗?你首先知道啊,这个大框里边访问的是ID。这个大括号里边执行的时候I。他实际上访问的是什么,访问的是。
05:01
某个对象的ID是吗?这个ID是不是每个人不一样?每一个人的ID不一样,这个ID是属于对象级别的,对吗?你在大块里边执行过程当中,你访问的这个ID是不是一定是访问某个对象的ID。对吧,但假如说你加一个static,是不是就意味着可以用类名去访问它。注意听啊,关键类名去访问这个get ID方法的话,大家想一想,是不是压根从头到尾你调这个方法的时候,就连对象都没有new对吗?你没有去new这个对象,你通过这个类去调的,那你对象从何而来?那你在这个get ID方法执行过程当中,你又访问了某一个对象的ID,你想想你你你你用类名去访问有对象吗?你用类名去访问是不是根本就没有对象?你你整个过程当中,大块里边有没有六个对象没有吧。没有吧,你是不是采你你如果定义成static,那我问你,你现在访问的是不是采用类名去访问这个get ID方法。
06:01
就类名访问概念,是不是整个过程连new对象都没new没new对象,你在大块里边执行过程当中,你要访问这个idd又是实例变量,你实例变量是需要对象的,对吗?所以你这块按道理来说,访问的是不是一定是某个对象的ID啊,那你这个类名去访问他的话,你有对象吗?你在执行这个方法的过程当中,你有对象的参与吗?你根本没有对象的参与,你这个方法能定义成静态的吗?能不能定义成静态的呀?哎,你定义成静态的,你会发现它编译错了。你看啊,Java c编译static test05.java。Get ID是吧,找不到符号。Static test5。Get。User。啊来。看看再来啊。好,大家看27和三十一二十七和31是不是都有问题。用类名去访问啊。
07:01
对吧,啊,刚才27和这个31是不是都有问题。是不有问题啊。钙的方法,赛的方法,钙的方法能定成静态的吗?你好好想想,你是不是用user去访问类名去访问它。但如果说你这块要是给它注释掉,是不是就没问题了。这个注释掉return,有一个int吗?返回零,你这样这样是不是就没问题了,这样static是不是就可以定义定义成static。对吧,哎,RETURN0后面加个分号。嗯,是不是没问题了。对吧,那为什么说把这个ID放开,或者说把上面这个ID放开,为啥这个就过不去呢,编译就报错呢。说明啥呢?
08:00
啊。如果你是静态的,我就会用类名去调你这个方法,用类名去调你这个方法,整个过程当中我就没有new对象,没有对象你在执行这个方法的过程当中,你又去访问了ID,而ID是一个实例变量,实例变量又是对象相关的,对吗?那你在这个执行过程,你有对象了吗?你没有,你有对象,你去调这个方法,你在大块里边又去访问对象的ID,你对象在哪啊,你没有对象啊。是不是,所以说你这个不能加地方。大家都知道,如果在这儿不加static,大家都知道这样的方法必须得先用对象是不是才能调这个方法。还记得吧?是不是必须得先拗对象,然后才能执行这样的方法呀?你好好思考一下。好,你你你你这样可能就不行了。对吧。你想想是不是这个零,你user new一个什么呀?User,好,我问你,你new user的时候,它是不是给这个变量默认负一个值是几。
09:03
零对吗?ID有没有值?是不是零有值?那么我问你,现在你再去调u.get ID。以及 uu.get ID这个方法,或者u.set ID这个方法,现在ID给他传一个100进去,那么100进去把这个100付给这个ID,这个ID指的是谁?这个ID指的是就是你用这个U的时候,这个U的当前对象,它的ID原先不是等于零吗?是不是你优点set ID,或者是你有点get ID?总算是我们调你这个方法的时候,用引用去调的,有这个对象的参与吗?那你get ID,这个ID实际上就是我们这个出来user对象的ID对吧,所以这个值就是几啊,是不是就是零。你好好想想,有点get ID,因为你new的时候,是不是把这个对象创建出来了,这个值默认值是不是就是零,而你现在调get ID这个方法的时候,执行过程当中,你读这个ID的时候,实际上读的是当前对象的什么ID,对吗?当前对象是谁?各位是不是你在这这个对象,你是不是用U去调的这个方法,所以当前对象是不是就是这个对象,所以你get ID拿到的这个ID的值是不是就是零啊?
10:12
在这是不是输出就是零啊,你好好好想想。好好想一下,那为什么说我们这样的方法不能加static,为什么这不能加static,你好好思考一下,你看现在就是允许的允许,然后加小君一行static test05走,看是不是零啊。对不对,哎,零没问题,但如果说你这加上static,你看妥了,你加了static,那就意味着我将来就是这块啊,假如说你这个方法不是实例的,你是静态的方法,你加了一个staic,那我问大家,你在调这个方法的时候,你是不是也只能采用类名去调了,类名是U点什么呀,叫get ID这个方法拿过来,拿过来之后大家知道我们在调这个方法过程当中,根本就连对象都没有new,你是直接通过类名去调的,那么接下来访问大括号,假如说调这个方法能能运行的话,是不是将来肯定会执行大框里的代码,执行大框里边代码的过程当中,大家想去找这个ID的时候,这个ID是不是是不是应该是实例变量,实例变量是不是应该需要对象,而你当前对象有吗?你没有尿布对象啊?
11:20
你19号这没有那性,所以大家从这里可以得出个什么结论,各位。就什么时候我们的方法定义成实例方法。什么时候我们这个方法定义成实例方法,什么时候我们方法定义成静态的,你有这个标准吗?代码最后应该这样去写。有没有什么标准,就是如果说我们这个方法体里边访问的变量是实例变量的话,我们这个方法必须得是啥。嗯。如果这个方法体当中,在执行过程当中访问了某一个变量,结果这个变量是一个实例变量的话,你这个方法就得就得是什么。
12:10
各位。好好想想。这个访问这个ID是谁?是不是访问实例的。可以呀。你变量加一个static可以啊,你可以加呀,你加一个static,我这个方法就可以是static呀。没问题。啊,但你现在不是没有static吗?没有static你不是实力的吗。你是实例的,就是对象相关的呀,那你访问在这个方法执行过程当中,你访问这个ID是对象的ID呀,那你想一想调这个方法是不是必须有对象参加呀。你要调这个方法,有对象参加才行。啊。这样各位啊,我给大家总结一个一个标准就行了。就是参考标准啊,当这个方法体当中。
13:07
直接访问了实例变量,这个方法一定是实例方法。啊,当这个方法体当中直接访问的实例变量,这个方法一定是实例方法。啊,当这个方法体里边访问的这个变量是一个实例变量,你访问实例变量去了。那么你这个方法就得实例方法。实例方法可以访问实例变量。然后还有一个什么呢,就是说这样吧,大家如果现在不理解的话,先放一放啊。我们以后啊,开发中大部分情况下,大部分情况下啊,如果是工具类的话。
14:07
啊,方法工具类当中的方法一般都是静态的。就是胡浪同学刚才说的一句话,挺好的啊。没听明白,没听明白,先放一放行不行?没听明白,先放一放,行吗?邓军。先放一放啊这个。这块先放一放啊,如果这块没有听明白,先放一下啊,先放一下就说。我们以后开发你你这样去界定好吧,这样去定啊,如果以后我们以后以后我还会再讲啊,还会反复讲,还没有到关键时刻,到关键时刻我自然会去讲这个东西啊,现在呢,可能大家还没有听明白,没关系啊,先放一放,就是说我现在这个主题讲的是什么,讲的是我们这个方法什么时候定义成静态的,对吧,什么时候定义成实例方法是不是,哎,这是我们现在要面临的一个问题,是不是哎。
15:02
你就这样这样认为啊,如果这个方法是一个需要对象参与的行为,对吧?哎,那你就用什么呀,实例方法啊,就你比如说你说你科科比会打篮球,你也会打篮球。是不是啊,但是你俩打篮球打的效果一样,不一样,不一样,我考试你也会考试,你考的结果是100分,我考的什么呀,零分对吧,那咱俩最后考的结果是不是不一样啊?好,那我问你是不是这样的考试,这样的方法是不是就应该是实例方法。对吧,哎,你这样先先这样去理解,如果说你从语法上没有办法理解的话,你就从这个理论上去给他来理解一下,就刚才我所说的张三去考试和李四考试,最后考的结果不一样,那我认为考试的这个方法,那就是一个什么呀,实例方法。啊,实例方法,那么我们以后开发中大部分情况下,如果是工具类的话,工具类当中的方法一般都是静态的,我说一下啊,沉着住各位啊,别乱啊,别慌啊。静态方法有一个优点是不需要什么你有对象,直接采用类名调用。
16:08
极其方便。所以工具类注意啊,工具类就是为了什么方便,所以工具类中的方法一般都是static的。有同学就问老师,什么是工具类?好,以后讲啊,什么是工具类?答案是以后讲啊,现在呢,我先不说总之的工具类,你一听这个名字,工具,工具就应该是为了方便编程开发的一些类,对吧?啊,就是工具类,就是为了方便编程而开发的一些类啊,开发的一些类,至于说工具类是什么,以后大家自然会接触。啊,现在我就不再讲了啊,工具类一般就是为的方便使用,为了方便使用,一般工具类的方法都是静态的,直接采用类名点的方式去访问就行,不需要你对象比较便捷啊,但如果说从这个语法角度。
17:08
从语法角度来看的话啊,什么时候我们方法声明成实例方法。就是从什么时候方法生命成实例方法。什么时候方法定义为实例方法?张三,是吧,考试得分90,李四,考试得分100啊,不同的对象参加考试的结果不同,我们可以认定什么呀?考试这个行为是与对象,什么是与对象相关的行为?啊,建议将考试这个方法定义为实例方法,定义为实例方法,各位啊,考试就是说张三考试得分,李四考试得分,不同对象参加考试结果不同,我们可以认定考试这个行为是与对象相关的行为,建议将考试这个方法定义成实例方法,你先这样去认为,各位啊,先这样去认为,至于说刚才我讲的这个东西,大家好像你没太听懂,刚才那个邓俊呢,没没没太听明白,那这个比较高深啊,现在就这块儿的一个理解比较高深,高深到哪呢来。
18:25
是这样的。各位啊,嗯,这么说吧,这么说啊,我在这里啊,有一个实例变量,我再说一下啊,实例变量叫做name name啊name string类型name,好,那现在呢,我在这儿给一个方法来分析啊,这个方法应该定义为实例方法还是静态方法呢?就是打印打印打印什么呀,用户的名字这样的一个方法。
19:03
就分析这个方法应该定位实例方法还是静态方法,就是打印用户名字这样的一个方法,你比如说public void print name是不是,哎打印名字,那你说这个方法定义成这个好呢,还是说这个方法定义成这个好呢?对吧,哎,system.out.print line打印输出谁啊,哎,Name,然后这块呢,也去输入谁啊,输入这个name。好,那我问大家一个问题啊,每这个首先先分析这个这个上面有没有static,这个没有static,这说明这个变量是个什么变量,是实例变量,实例变量是不是就意味着这个name是一个对象一份。首先先分析的是。这个name是对象级别的name啊,是对象级别的一个对象一份,这个首先大家理解吧,好,那我问你印名字,最后输出这个名字,打印名字输出名字,那我问你,你应该这个方法定义成static还是说不带S。
20:05
啊。你定你定义成这个行不行。这个点print name1,这叫print name2啊。你定义成这个行不行,各位。我问大家一个问题啊,调这个方法是不是直接采用类名去调?类名去调,这个方法是不是就代表没牛对象?你没有对象,你输出name name人家是对象的呀,Name是对象上的东西,明白吗?这个name是对象上的东西,同学。你调这个方法是不是static静态的,静态的方法是不是用类名去调,类名调这个方法是不是代表没new对象,你没new对象你就在大框里边访问你的内内内name,你合理吗。你name是人家对象上的一个name啊。同学,哎,这个位置是不是输出的是name啊,是不是输出的是一个一个对象的name啊,是不是啊?好,那我问你,你定义成静态的,你是不是只能采用类名去访问,你是不是只能采用user.print name2的这样的方式去访问这个方法,那我问你,你在整个从头到尾执行过程中,你拗对象了吗?你在这是不是没有new对象,没有new对象你调这个方法执行过程当中,你却要说出一个名字,你这个名字是谁的名字?
21:27
是谁的名字?你连个对象都没有,你,你输出谁的名字啊?对呀,伟斌说的,没有创建对象就没有对象的name,所以你像这样的方法,你就不能加静态的,你不能加sta,你加废了,你加sta废了,编一下你看报错不报错,加va c static test05点加va走。报错了58行,就就说你58行就有问题,你58行就有问题,明白吗?就说你这行有问题,你这不行。你这不行,你这就行了。
22:01
但如果是你一旦把它放开,你就妥了,你这块加个static还能行吗?你加static,你加个static是不是代表类名去访问,类名去访问是不是代表没有对象啊,没有对象你却在这里大括号里面输出name,输出name,你输出谁的name啊,Name是人家是个实例变量,是个对象上的一个一个东西,你你在执行这个方法过程中,你你有对象吗?你你有对象吗?没有啊。你你再看啊U,你再看这个方法是不是个实例方法,各位它是个实例方法,是不是代表他没有这个static,没有static,我问大家调这个方法是不是必须得有对象,所以注意听user X new一个user,我现在对象有了没有,有了对象我通过X是不是去调这个print name这个方法print name1这个方法好,我问你谁X去调用这个方法,那我问你当前对象是不是就是这个对象。你访问的这个里边的这个name,是不是也就是这个对象里边的name,你看因为你用X去调的print name1啊,你用X去调的print name1,那是不是X指向了一个对象啊,那你在这个大块里面执行过程当中,你访问的这个name,这个name是不是就是X指向了这个对象的name啊。
23:11
这样的话是不是可以说通啊?是不是你这个就不行。你这得注释掉,你看编译一下你看。没问题吧?是吧,那你加一个static就废了,你加行不行啊。你这个方法一旦加上static,虽然你用X去调,大家知不知道用X去调,但是跟这个对象有没有关系,我之前今天上午我是不是说过,就是你这个方法一旦加了static,是代表是静态方法,静态方法是不是就算你用引用X去掉,但是程序运行的时候,它也会把这个X变成什么?变成user对吗?因为他知道这个print name1是一个静态方法吗?那这个方法在执行过程当中,大家想一想,你你这个用类名去调的这个方法,你在这个方法大块里边执行过程当中有没有对象啊。
24:02
有没有对象啊?没有吧,所以又不行了吧,所以这块不能加。不能加,为啥不能加?因为里边有实例变量,所以这句话就对应上我刚才说的那句话了。当这个方法当中直接访问的实例变量,这个方法一定是实例方法。当这个方法里边访问实例变量,这个name是实例变量,那么这个方法就一定是个实例方法。你好好想想,再再再捋捋啊,后期我还会再讲,还会再讲这块的东西啊,所以你这块如果是完全就是现在听懵了,不知道咋回事,那么这个时候呢,我。后面的内容会让你明白的啊,会让你明白的user X等一个user X print name1啊。名字都是一样就可以static对,如果大家所有人的名字都一样,这加个static加上static就妥了啊,那这个就跟对象没关系了,跟对象没关系的话,就不需要你对象了,通过类名去访问就行了,那你直接这个方法,你就加个sta可以的,没有任何问题啊。
25:07
但这个名字不可能是static啊,因为每个人的名字是不一样的,嗯。好,你看现在这个程序是可以的。啊,没有这个问题。行了,咱们今天上午先到这儿吧,各位啊,咱今天上午讲了什么内容呢?就讲了一个study关键字,这个study关键字还没讲完,下午咱们继续看study关键字啊,关键字讲完之后,我们看看this关键字啊,这面向对象呢,就是这些东西好吧。啊,咱们休息一下啊,吃饭去吧。
我来说两句