博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
静态方法与实例化方法的常见误区
阅读量:3958 次
发布时间:2019-05-24

本文共 727 字,大约阅读时间需要 2 分钟。

1、静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存

事实上,它们都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别

2、静态方法在堆上分配内存,实例方法在堆栈上

事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码被加载到特殊的代码内存区域,这个内存区域是不可写的

3、实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单

事实上如果一个方法与它所在类的实例对象无关,那么它就应该是静态的,而不应该把它写成实例方法。所以所有的实例方法都与实例有关,既然与实例有关,那么创建实例就是必然的步骤。

从面向对象的角度上来说,在抉择使用实例化方法或静态方法时,应该根据是否该方法和实例化对象具有逻辑上的相关性,如果是就应该使用实例化对象,反之使用静态方法。如果从线程安全、性能、兼容性上来看 ,选用实例化方法为宜。

我们为什么要把方法区分为:静态方法和实例化方法 ?

如果我们继续深入研究的话,就要脱离技术谈理论了。早期的结构化编程,几乎所有的方法都是“静态方法”,引入实例化方法概念是面向对象概念出现以后的事情,区分静态方法和实例化方法不能单单从性能上去理解,JAVA这样面向对象的语言引入实例化方法不是要解决什么性能、内存的问题,而是为了让开发更加模式化、面向对象化。静态方法和实例化方式的区分是为了解决模式的问题。

 比如说人这个类,每个人都有姓名、年龄、性别、身高等,这些属性就应该是非静态的,因为每个人都的这些属性各不相同;但人在生物学上属于哪个门哪个纲哪个目等,这个属性是属于整个人类,所以就应该是静态的,这个属性不单独针对于某个特定的个体而存在。

 

参考  

转载地址:http://gwozi.baihongyu.com/

你可能感兴趣的文章
自定义标签库(Tag library)
查看>>
深入Java集合学习系列(一)
查看>>
深入Java集合学习系列(一)
查看>>
深入Java集合学习系列(二):
查看>>
图解Spring AOP
查看>>
性能调优之Weblogic调优
查看>>
性能调优之性能参数指标
查看>>
POJ3009---冰壶游戏(深搜剪枝+回溯)
查看>>
POJ3669---跳炸弹(广搜)
查看>>
POJ---1384Piggy-Bank (完全背包+装满问题)
查看>>
并查集基础知识
查看>>
POJ1182---食物链(带权并查集~技巧性超强的解法)
查看>>
POJ2492---A Bug's Life(做完食物链,再秒这个)
查看>>
POJ2063---Investment(完全背包)
查看>>
POJ1458---(最长公共子序列最基础题)
查看>>
POJ3356---(最长公共子序列)
查看>>
二叉树基础知识大全(核心理解遍历)
查看>>
03-树1 树的同构(25 分) 2017秋 数据结构 陈越、何钦铭
查看>>
04-树4 是否同一棵二叉搜索树(25 分)---陈越、何钦铭-数据结构-2017秋
查看>>
表达式求值(C实现,实现多括号,浮点数)---栈的实现以及运用。
查看>>