Java的类方法和对象方法

类方法: 又叫做静态方法

对象方法: 又叫实例方法,非静态方法

访问一个对象方法,必须建立在有一个对象的前提的基础上

访问类方法,不需要对象的存在,直接就访问

步骤 1 : 类方法

类方法: 又叫做静态方法

对象方法: 又叫实例方法,非静态方法

访问一个对象方法,必须建立在有一个对象的前提的基础上

访问类方法,不需要对象的存在,直接就访问

package charactor;

public class Hero {
public String name;
protected float hp; //实例方法,对象方法,非静态方法
//必须有对象才能够调用
public void die(){
hp = 0;
} //类方法,静态方法
//通过类就可以直接调用
public static void battleWin(){
System.out.println("battle win");
} public static void main(String[] args) {
Hero garen = new Hero();
garen.name = "盖伦";
//必须有一个对象才能调用
garen.die(); Hero teemo = new Hero();
teemo.name = "提莫"; //无需对象,直接通过类调用
Hero.battleWin(); }
}

步骤 2 : 调用类方法

和访问类属性一样,调用类方法也有两种方式

  1. 对象.类方法

    garen.battleWin();

  2. 类.类方法

    Hero.battleWin();

这两种方式都可以调用类方法,但是建议使用第二种 类.类方法 的方式进行,这样更符合语义上的理解。

并且在很多时候,并没有实例,比如在前面练习的时候用到的随机数的获取办法

Math.random()

random()就是一个类方法,直接通过类Math进行调用,并没有一个Math的实例存在。

步骤 3 : 什么时候设计对象方法,什么时候设计类方法

如果在某一个方法里,调用了对象属性,比如

public String getName(){
return name;
}

name属性是对象属性,只有存在一个具体对象的时候,name才有意义。 如果方法里访问了对象属性,那么这个方法,就必须设计为对象方法

如果一个方法,没有调用任何对象属性,那么就可以考虑设计为类方法,比如

public static void printGameDuration(){
System.out.println("已经玩了10分50秒");
}

printGameDuration 打印当前玩了多长时间了,不和某一个具体的英雄关联起来,所有的英雄都是一样的。 这样的方法,更带有功能性色彩

就像取随机数一样,random()是一个功能用途的方法

Math.random()

练习类方法

(在一个类方法中,直接调用一个对象方法,

比如在battleWin中调用die()

能否直接调用? 为什么?)

答案

不能调用,因为调用battleWin()的时候,很可能没有任何具体对象,然而die()是一个对象方法,必须建立在有对象的前提下。

如果能调用,就矛盾了。 所以编译器会不让通过。

最新文章

  1. Tcp/ip 报文解析
  2. 学习Linux系列--布署常用服务
  3. seajs的那点事(很坑的事),和本白的一点事(更坑的事)
  4. JS日期格式化函数性能优化篇
  5. hdu 2105
  6. 介绍PS大局观很不错的转文
  7. Oracle:ORA-01791: 不是 SELECTed 表达式
  8. Python 随即生成DAG(有向无环图)
  9. WCF学习心得----(三)服务承载
  10. SpringBoot整合Redis、ApachSolr和SpringSession
  11. Codeforces Round #415 Div. 1
  12. 自动把动态的jsp页面(或静态html)生成PDF文档,并且上传至服务器
  13. Cocos Creator 加载和切换场景(官方文档摘录)
  14. 解决16bit压缩贴图失真问题
  15. Ubuntu终端文件的压缩和解压缩命令
  16. 在Vue的webpack中结合runder函数
  17. node.js(http协议)
  18. Asp.net Vnext 中间件实现基本验证
  19. 九度OJ 1006 ZOJ问题 (这题測试数据有问题)
  20. Python监控Windows下的文件变化

热门文章

  1. jquery的select 2库,如果用js代码刷新选项?
  2. scapy构造数据包
  3. A Comparison of Serverless Frameworks for Kubernetes: OpenFaas, OpenWhisk, Fission, Kubeless and more
  4. 趣味编程:静夜思(C++17 Ranges版)
  5. SpreadJS 生成报表
  6. django -- ORM实现图书增删改查
  7. 洛谷 P5057 [CQOI2006]简单题 题解
  8. 微信小程序之简单记账本开发记录(七)
  9. 使用IDEA创建一个Servlet应用程序
  10. 《Linux就该这么学》培训笔记_ch11_使用Vsftpd服务传输文件