Android-问一个android中java基础哈。关于方法加载问题
最近做项目中要用到很多popupwindwows。所以想建立一个类来管理不同的popupwindwows。而有一点困惑就是,类中的方法该用静态还是非静态。用静态的话效率会高些,但是不知道不调用的时候会不会消耗资源(加载);如果用非静态的话,在新建一个对象的时候,方法是否加载(消耗资源)。求科普
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
静态方法是随着类的加载而同时加载的,随意什么时候加载类,什么时候就加载了静态方法。而实例方法则是在创建实例对象的时候才存在的。而且静态方法效率上要比实例方法高一些。但是静态方法无法实现面向对象的一系列特性,比如多态性。实例方法可以做到不同对象不同处理,但是静态方法只能作为所有对象的统一处理。
其实通过上述描述,一般来说,对于一些配置信息和管理工具类使用静态方法和静态变量,其他的一般都会为了保留面向对象的特性而使用实例方法和实例变量。
如果你想建立的类是用来管理不同的popupwindows的,那么可以考虑使用静态方法,方便高效。
同意楼上的观点,对于一些配置信息和管理工具类抑或常量类建议使用静态方法和静态变量,其他的一般都会为了保留面向对象的特性而使用实例方法和实例变量。
我做了实验,结论是在我的环境里(win7 64,sun jre7),方法用静态还是非静态 无明显区别:
建一个Sample类,里面写一个很大的实例方法,编译后.class文件为43k。用5000个不同的classloader实例转载进来;再建5000个实例。
建一个Sample类,里面写一个很大的静态方法。然后做1的步骤。
1的结果:
在Visual VM中可见:
可见,实例方法字节码载入permgen 和 类加载同时进行,而不是在新建对象时进行。
2的结果:
在Visual VM中曲线和1一样。
附部分测试代码:
FileSystemClassLoader 我复用了 @关于Java类加载器的代理模式的疑问的代码。