Java非访问修饰符static、final、abstract等关键字的详解

目录

一、static关键字★

1.通俗解释       

2.简单概括

3.注意

二、final关键字*

1.通俗解释

2.简单概括

3.作用

4.注意

三、abstract关键字★

1.通俗解释

 2.简单概括

3.注意


一、static关键字★

1.通俗解释       

        static英文所对应中文的翻译为“静态的”,词性为形容词。而在Java中,也就恰好用其来修饰变量或者方法,被其修饰的变量或者方法也就被称之为静态变量或者静态方法。变量和方法之所以被其修饰,原因简单来说,就是其修饰的变量(方法)就已经静态的躺在空间中。(详解如下)

        static其修饰之后的方法或者变量被赋予不一样的属性。举个例子:当我们现在有一个太理学生类,这个类中所包含的信息有姓名,年龄,班级,学校。而我们明显可以知道,在太理学生类中,那么这些学生肯定都来自于太理。所以在这里如果我们用类创建对象时,每个学生需要创建一个对象,而每个对象需要开辟空间去保存其每个变量(年龄,班级,学校),包括这相同的信息(同属太原理工大学),那么一直这个相同信息时就会造成空间的浪费。而static修饰学校这个变量之后,为其赋予这样一个属性:只要你属于太理学生类,那么你默认的学校信息就是太理,其不再随对象的创建一次次去浪费空间,而是在类加载时(对象的第一次创建),就找一块空间(公共空间),哪个对象用它,就来这找它。

        也就解释了,为什么this不能出现在static修饰的方法当中,也不能访问static修饰的变量。因为,this相当于对象自己的内存地址,用this就是去找对象那一块空间,static修饰的变量或者方法已经超然脱离对象这一内存范围,你再去对象那一块空间找,肯定找不见。

2.简单概括

        static为形容词,可修饰变量、方法、代码块以及类。被其修饰变量或者方法,就变成这个类中所有成员公共可以使用的东西(这个东西相同),类中成员(俗称对象)要想使用,根据类名.方式调用就行。既被称之为静态变量、方法,也被称之为类变量、类方法。

3.注意

  • static修饰的变量或者方法,可通过类名.的方式去调用
  • static修饰的方法,只可引用static修饰的变量。因为该方法在类的第一次加载时就会被创建,非static修饰的关键字在此时还没被加载。
  • static变量优先比static方法先加载(完善上点)
  • static修饰的代码块是静态代码块,也具有静态的特点,属于类本身,在加载时只需要加载一次,也就是说,如果加载过这个代码块,就不会再加载了。

二、final关键字*

1.通俗解释

        我们学习final关键字可以类比static关键字的思路,final对应的中文意思为“最后的”。同样其为一个形容词,其可以用来修饰变量、方法以及类。用其修饰之后,会给这些“货”赋予一种属性,同其中文意思一样,让其变为最后的变量,最后的方法,最后的类。而“最后”往往具有一个属性,那便是不可修改性。举例:你大物考试没过,问题不大,可以补考,但最后一次补考还是没过。那么,你的大物成绩终将是你心里抹不掉的一个伤心的数字,无法修改了。【排除重修】

2.简单概括

        final关键字可以用来修饰变量、方法以及类,被修饰之后变量无法修改、方法无法重写、类无法继承。

3.作用

        我们在编程时肯定会好奇,这样做的目的究竟是什么,闲来无事吗?引用《Java编程思想》第四版第143页:“使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。”(第二个原因看不懂,问题不大,博主现在也看不懂,以后总会看懂的)

4.注意

  • 除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。(换句话说,不要用它修饰类)
  • 当用final作用于类的成员变量时,成员变量必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再被赋值了。
  • final修饰局部变量只需要保证在使用之前被初始化赋值即可
  • 如常见的 java.lang.String 类即为final类

三、abstract关键字★

1.通俗解释

        同上述两个关键字相同,其同样为形容词“抽象的”,也可修饰于类、变量、方法等。那什么是抽象的类?举个例子,我们创建了一个动物类,如果我们想用其来new对象,可以吗?可以。但毫无意义的。

        为什么没意义?动物是一个宽范围的东西,非常抽象。既包括你家后院的狗,你手里抱着的猫,也包括在屏幕前码字的博主。这样的类,无法具体,我们就一般将其归类为抽象类。抽象方法亦是如此,你给动物定一个出行的方法。狗是四条腿跑,博主是开“兰博基尼”,显然也是不同。

        那么这样的类有什么作用的?但凡是动物,必定有其相同的性质,好比都要呼吸。动物类之下的每个动物不同的性质和方法,我们可以通过继承之后,再独特赋予其不一样的性质和方法。相同的用上,不同的自己补充。这就是其出现的价值。

 2.简单概括

        abstract修饰类,目的就是先保存这个类下所有东西一些共性。但这些共性往往不全,其天生被赋予的使命,就是被继承。同理,抽象方法的使命就是,告诉子类,我有个这样的方法,你必须重写。(不太完善,日益改进中)

3.注意

  • 有抽象方法的类一定是抽象类,但是抽象类不一定有抽象方法。()
  • 父类是抽象类,其中有抽象方法,那么子类继承父类,并把父类中的所有抽象方法都实现了,子类才有创建对象实例的能力,否则子类也必须是抽象类。
  • 抽象类中可以有构造方法,子类在构造子类对象时需要调用父类(抽象类)的构造方法。
  • 抽象方法不能用private修饰,因为抽象方法必须被子类重写,而private权限对于子类来说是不能访问的,所以就会产生矛盾。
  • 抽象方法也不能用static修饰,如果用static修饰了,那么我们就可以直接通过类名调用了,而抽象方法压根没有主体,没有任何业务逻辑,这样就毫无意义了。

编写不易,如有帮助点赞收藏,如有问题可联系博主qq2280006919,或者私信

@Hanpig编写


 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值