前言

第一次看到在Java中可以通过类实例调用静态方法,当然不推荐这么做,避免出现意想不到的问题,接下来会讲到,但是在C#中通过类实例调用静态方法在编译时就不会通过,这里做下记录。

类实例调用静态方法

首先我们来看一个简单的例子说明为何不能通过类实例调用静态方法,我们知道未实例化的对象去调用对应方法或者字段时会抛出空指针异常,比如如下:

public static void main(String[] args) {
Object o = null;
System.out.println(o.toString());
}

但是若将其应用到静态方法上则会出现意想不到的问题,比如如下例子:

public class Player {
public static final String type = "Human"; private int age; public static String getType() {
return type;
} public int getAge() {
return age;
}
}
public static void main(String[] args) {
Player player = null;
System.out.println(player.getType());
System.out.println(player.getAge());
}

上述对象并未实例化,但是调用其变量的静态方法却不会抛出异常并能打印出结果,当然答案也很简单,因为静态方法是属于类而非类实例,所以上述调用 player.getType() 本质上肯定是调用 Player.getType() 。

总结

在Java中通过类实例可以调用静态方法可能是在最初设计时所产生的缺陷,当然,这只是我个人的揣测,没有再过多深究,看到居然编译不出错而且可以正常运行,认为这一点和C#有很大的区别,故此记录总结下。

最新文章

  1. htm5l,第一个script代码练习
  2. oracle:ORACLE 实际返回的行数超出请求的行数
  3. 编写jquery常用插件的基本格式
  4. C#:控制台程序调用中间库创建窗体
  5. 使用 node-odata 轻松创建基于 OData 协议的 RESTful API
  6. ADG打补丁
  7. String中重要方法与字段
  8. Jquery插件写法及extentd函数
  9. 简易版CSS3 Tab菜单 实用的Tab切换
  10. 高级UNIX环境编程
  11. Visual Studio 2012中使用Zen Coding,写html的神器!
  12. shuffle一个简单的过程叙述性说明
  13. Linux分区的注意事项以及远程连接排错
  14. [LCA模版] Distance Queries
  15. Mysql 基于GTID的主从复制(实操)
  16. ORA-12541:TNS:无监听程序
  17. Azure Load Balancer : 动态扩展
  18. C#特性-表达式树
  19. LFR benchmark graphs 人工网络生成程序
  20. Django2.1更新日志

热门文章

  1. Node的require和module.exports
  2. mysql的锁与事务
  3. mysql(8.0连接navicat发生的错误解决方法)
  4. NoVNC安装部署
  5. 一起了解 .Net Foundation 项目 No.19
  6. MATLAB神经网络(7) RBF网络的回归——非线性函数回归的实现
  7. Google Flutter Clock 大赛优秀项目推荐
  8. 使用vue-router+vuex进行导航守卫(转)
  9. 基于Ubuntu的ORB-SLAM2项目环境搭建过程
  10. Swift 4.0 数组(Array)之过滤器(filter)的使用