当前位置:网站首页 > Java基础 > 正文

java基础语法修饰符



Author : Cyan_RA9 (CSDN同名同人)

一、private关键字(重要) : 

        1.封装的必要利器—private介绍:

                我们之前写类的时候,从来没有用过private(假设你才刚学,确实没用过🤗)。那不用private使用类时的效果是什么呢,我们可以在本包下的其他类随意的使用该类的属性和行为。平时我们自己玩玩儿啥的雀氏也没啥,但是将来开发怎么可能让你这么专横哈哈。所以,我们要学会去保护它们。So,如何保护呢?private上就完了。

                现在我们先给大家看一下不用private是怎样的?假设(其实就是定义了)定义一个Phone类(手机类),在Phone中定义一些属性和方法,均不用private修饰,甚至方法我们也暂且不用static修饰(假设你还没学嘛,因为我还没讲捏🤗),然后再新建一个TestPhone类,测试其中的属性和方法。

                Δ不用private的代码演示 : 

                Phone类代码如下: 

 

                TestPhone类代码如下

 

                输出结果如下图 : 

                注意看TestPhone类中的代码,我们是可以通过创建对象,以“对象.” 的形式直接访问Phone类中的属性的,可能你一听也觉得没什么,但其实这是一件顶可怕的事儿😱。

        2.基本概念:

                private [ˈpraɪvət] ,私有的。private是Java四种访问权限修饰符中的一种,关于访问权限修饰符,大家先了解即可,之后讲到继承时,我们会详细地介绍四种访问权限修饰符。

        3.特点 :

                Δ被修饰的成员只能在本类中访问。其他类无法直接访问本类中被private修饰的成员。

        4.用法 : 

                修饰成员变量 : 

                private 数据类型 变量名;

                修饰成员方法 : 

                private 返回值类型 方法名 (形参列表) { //方法体 }

        5.private关键字代码演示 : 

                以我们刚刚演示的Phone类和TestPhone类为栗,我们给Phone类中的成员变量加上private修饰符,TestPhone类保持不变。Phone类代码如下

 

                这时候你会发现,这刚加上private关键字就报错了,如下图所示 : 

                IDEA提示我们有两条相关问题。什么是相关问题呢?意思就是问题本身不是在当前类,但是出了问题的类呢,又与当前类有关系。显然,只能是TestPhone类出了问题!如下图:             

                明明白白,它提示我们:这些个变量都有private修饰🌶!你不能直接使用!  

                这下很多小伙伴儿要蒙圈了!不加private嫌我不保护数据,加上又不让我用,这不是耍👴吗?让👴怎么玩儿?

                这位👴您先别生气!马上我们就要隆重介绍新的嘉宾出场 : setter,getter方法!

        6.setter,getter方法展示(重要) : 

                ①介绍:

                setter[ˈsetər] ,制定者,安排者。

                getter[ˈɡetər] ,获得者。

                setter和getter其实指的分别是setXxx和getXxx两个函数,当然了,相信聪明的你看名字也能猜出来!setXxx可以修改对应属性的值,而getXxx则可以获取对应属性的值。比方说,假设有一个私有的brand(品牌)属性,我们可以通过函数setBrand来修改brand属性的值,而通过函数getBrand来获取brand属性的值。                

                ②如何定义setter,getter方法 : 

                两种方法 : 手写。或者快捷键。

                当然,对于初学者来说,当然是建议大家先手写,写熟练了你再用快捷键嘛,快捷键的方法up已经专门写过一篇博客,在此不再赘述,有兴趣可以看看。现在我们来讲一讲,如何去手写定义这两个函数:

                首先,setXxx() 方法,肯定需要你去传入一个值,不然谁知道你要改成啥呀。然后这个函数还必须将接收到的值赋值给类中的对应属性(对应属性即指setXxx中的Xxx),否则对应属性肯定不会修改成功,你的目的就是修改对应属性的值嘛,假如你定义该属性时未进行显式初始化,那么该属性就是默认值。因此,setXxx() 方法的关键两步骤就是:传入值和赋值值,方法体中仅需要一句赋值语句,当然,函数的返回值类型就是void了,你只需要修改就好。

                其次,getXxx() 方法,我们想达到的效果是:每次调用该函数都可以返回对应属性的当前值,所以,getXxx() 方法是一定有返回值的,而返回值类型取决于你后面的Xxx属性本身的数据类型,对应返回就好。而且,getXxx() 方法的方法体中,仅需要"return Xxx; "一句代码就可以,简洁高效。

                ③代码演示 及 问题延申 :

                新的Phone类代码如下

 

                有了setter,getter方法,我们就可以在TestPhone类中测试它们了,新的TestPhone类代码如下

 

                 输出结果如下 : 

                😁效果不错。               

                这时候,就要有p小将(personable小将,指风度翩翩的人!)要说理了:诶诶诶,up你难道没发现吗,你的setter方法体中形参的定义不符合见名知意的效果!我把其中的一个setter方法拿出来给大家看看

 

                我趣,还真是这样,不愧是p小将😭,6。没错,所谓见名知意,就是指看到变量名就可以基本确定这个变量是干嘛的,但是你看我们写得setter方法,传入的形参变量定义成了n,要知道n开头的英语单词可是多的很捏,谁知道你表示名字呢?因此这么定义形参名无法满足“见名知意”的效果,降低了代码的可读性和逻辑性

                好,改!下面我们把形参名统一改成成员变量名,如下 : 

                就让我们来看看p小将的方法能不能行得通。        

                再次运行TestPhone类结果如下 : 

                我趣?!这时候很多小伙伴儿要懵了,这咋还一问三不知了。 

                出现这个问题的原因也很好解释

                大家都知道一句话吧,叫“强龙不压地头蛇”。没错,仔细看我们定义的setter方法,可以明确地看出,setter方法的形参列表都定义了局部变量,都不为空! 而Java中变量的使用规则是“就近原则”。即局部位置-> 成员位置-> 父类-> 更高的父类-> ...... -> Object,如果一直到Object还没找到这个变量,报错!(Object是所有类的顶层父类,先了解一下即可,之后的继承特性中我们会讲到)。那既然现在setter方法内(局部位置)定义了形参,方法内部当然是优先使用这个定义的形参喽!所以,如果仅仅这么更改的话,达到的效果想必你也猜到了,没错,就是形参变量自己赋值给了自己,而成员变量,也就是我们要更改的属性,却仍然是String类型的默认值null

                其实,大家只要把鼠标悬停在右边的变量上,智能的IDEA就会自动报出提示 : 该变量自己赋值给了自己。如下图 : 

java基础语法修饰符

                因此,我们需要想办法让左面的变量name能够正确表示成员变量name,而让右边的变量name,依旧表示我们的局部变量name,即接收用户传入的参数。可是,我们怎样才能达到这样的愿景呢?                 

                😋,问得好,这就需要用到我们真正牛逼哄哄的this关键字了。                

        7.关于public关键字 : 

                在讲this关键字之前,稍微穿插一下关于public关键字的那些事儿。

                public[ˈpʌblɪk] 公众的,公有的,公开的。很明显,这是和private反着来的访问权限修饰符。public,是Java四种访问权限修饰符之另一个。

                public可以用来修饰类,成员变量,成员方法等,被public修饰的内容可以在任意类中访问。因此,public是访问权限最高的修饰符。其实吧,现在说太多也没啥用,直接说一个结论吧,记住就行。

                private 一般用来修饰成员变量(属性)

                public 一般用来修饰成员方法(行为)

版权声明


相关文章:

  • 零基础跨专业学java2025-04-05 09:50:06
  • java基础变架构2025-04-05 09:50:06
  • java基础 接口2025-04-05 09:50:06
  • java基础运算符2025-04-05 09:50:06
  • Java基础入门二2025-04-05 09:50:06
  • java语言基础数组2025-04-05 09:50:06
  • 基础语法java常量2025-04-05 09:50:06
  • java基础36问2025-04-05 09:50:06
  • java入门基础体系2025-04-05 09:50:06
  • 王者荣耀java基础2025-04-05 09:50:06