第11章(上)--面向对象编程(高级特性)

Posted -xuewuzhijing-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第11章(上)--面向对象编程(高级特性)相关的知识,希望对你有一定的参考价值。

1.类变量

问题引入:有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在共有多少人在玩?请使用面向对象的思想,编写程序解决。

  • 思路

在main方法中定义一个变量 int totalNum = 0

当有一个小孩加入游戏就 totalNum ++;

  • 使用功能传统的方法可以解决问题

不是一个oop的解决方法,破坏了oop的一个基本原则,封装

技术图片

 

1.1.1       什么是类变量

 

类变量也叫静态变量/静态属性/static变量,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。这个从前面的图也可看出来。

 

1.1.2       如何定义类变量

 

定义语法:

1) 访问修饰符 static 数据类型 变量名; [推荐]

2) static 访问修饰符 数据类型 变量名; 

 

1.1.3       如何访问类变量     

类名.类变量名

或者 对象名.类变量名  【静态变量的访问修饰符的访问权限和范围普通属性是一样的。】

推荐使用:类名.类变量名;

 

1.1.4       类变量使用注意事项和细节讨论

 

1)      什么时候需要用类变量
当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量):比如:定义学生类,统计所有学生共交多少钱。

 

2)      类变量与实例变量(普通属性)区别
类变量是该类的所有对象共享的,而实例变量是每个对象独享的。

 

3)      加上static称为类变量或静态变量,否则称为实例变量

4)      类变量可以通过 类名.类变量名 或者  对象名.类变量名 来访问,但java设计者推荐我们使用 类名.类变量名方式访问。【前提是 满足访问修饰符的访问权限和范围】

 

5)      实例变量不能通过 类名.类变量名 方式访问。

6)      类变量是在类加载时就初始化了,也就是说,即使你没有创建对象,只要类加载了(到方法区),就可以使用类变量了。

 

7)      类变量的声明周期是随类的加载开始,随着类消亡而销毁。

2.类方法

 

1.1.1       类方法基本介绍

 

1) 类方法也叫静态方法 。

形式如下:

访问修饰符 static 数据返回类型 方法名(){   } 【推荐

static 访问修饰符 数据返回类型 方法名(){   }

 

1.1.2       类方法的调用:

使用方式: 类名.类方法名 或者 对象名.类方法名 【前提是 满足访问修饰符的访问权限和范围

技术图片

 

 技术图片

 

技术图片

 

3.类方法和普通方法加载到方法区的比较

技术图片

 

 

 技术图片

 

 技术图片

 

 这就是为什么静态方法不能使用非静态属性

 

4.类方法经典的使用场景

 

  • 当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率。

 

比如:工具类中的方法 utils

Math类、Arrays类、Collections类

  • 小结

     在程序员实际开发,往往会将一些通用的方法,设计成静态方法,这样我们不需要创建对象就可以使用了.

5.类方法的注意事项和使用细节

 

以上是关于第11章(上)--面向对象编程(高级特性)的主要内容,如果未能解决你的问题,请参考以下文章

Scala核心编程_第09章 面向对象编程(高级特性)

Scala核心编程_第09章 面向对象编程(高级特性)

Python之路第11章:Python面向对象

第10章 面向对象编程(高级部分)

第8章 面向对象高级编程与网络编程

韩顺平循序渐进学Java零基础 第10章 面向对象编程(高级部分)