【Java初探外篇02】——关于静态方法与实例方法
在Java的学习中,我们知道,方法的使用是不可或缺的重要部分,在我们编写第一个Java程序hello world的时候,我们就要开始使用主方法main();它就是一个静态方法(static method) 。
public class sty_01{
//主方法main()
public static void main(String[] args){
system.out.println("hello world!");
}
}
那么接下来我们具体学习下静态方法与实例方法的区别。
- 静态方法与实例方法的定义
- 实例方法(instance method)
我们知道在类体中,一个方法的创建,包括 权限修饰符,返回值类型,方法名,这样定义出来的方法就是实例方法。
public int aint(){
}
- 静态方法(static method)
而静态方法的定义则略有不同,静态方法的定义在权限修饰符和返回值类型之间多出了一个关键字static,而这,也是二者在语法上最根本的区别。
public static int aint(){
}
关键字static,它也是一个修饰符,用来修饰类方法和类变量。其主要作用就是使类和变量能够实现跨类使用,常用来声明独立于对象的静态方法。
二者的区别
由此,我们可以大致总结一下二者之间的区别以及使用的方法。语法定义上
静态方法是被static修饰符修饰的,而实例方法则没有。作用上
静态方法可以实现方法的跨类使用,而实例方法只能在本类中被实例化对象调用。机制上
静态方法是独立于对象的,而实例方法则必须依赖于实例化对象,才能被调用,静态方法的内存占用较实例方法大,因为实例方法,只有在实例化对象调用的情况下才会被执行,而静态方法是独立与对象的,所以程序执行之初就会被创建,占用内存。使用上
静态方法是不需要new一个实例化对象就可以调用的方法,因为静态方法是独立与对象的方法,可以直接进行调用。二者的使用分析
我们了解到了静态方法与实例方法的区别后,通过分析,可以得出两者的适应的使用方式。
静态方法,是跨类的,独立于对象的,并且是较占用内存的,所以第一首选的方法使用,是不会使用静态方法的,我们一般使用静态方法,应当是针对其特有的功能性,即实现跨类调用,这说明,静态方法就是为一些公共方法准备的,可以多类,多项目,多处通用的公共方法的定义,比如一些工具类Utils的方法,。
实例化方法,实例化方法只能在本类中调用,需要依赖于实例化对象,占用内存小,这说明实例化方法主要功能是实现当前类对象的某些功能,是特例的,并且多会调用到当前类的一些成员变量。
所以在一些具体功能类中,具体功能实现方法的定义上,应当使用实力方法,而在一些公共类,会在多个类中调用到的工具类等,其方法主要具有公共调用等需求时,使用静态方法。
关于静态方法与实例方法的了解,暂时就这么多,可能比较浅显,都是个人结合二者的部分特性分析得出,可能有缺错之处,还望能够不吝指教。
之后深入了解后再做详细分析。
更新时间:
2019-4-2
11:25
【Java初探外篇02】——关于静态方法与实例方法的更多相关文章
- 【java初探外篇01】——关于Java修饰符
本文记录在学习Java语言过程中,对碰到的修饰符的一些疑问,在这里具体的拿出来详细学习和记录一下,以作后续参考和学习. Java修饰符 Java语言提供了很多修饰符,但主要分两类: 访问修饰符 非访问 ...
- [Java初探外篇]__关于正则表达式
正则表达式通常用于判断语句之中,用来检测一段字符串是否满足某一个格式.在日常生活中被广泛的用于各种用户输入信息的检测上. 而正则表达式实际上是一些具有特殊意义的字符序列.通过这些特殊字符构成的特殊序列 ...
- [java初探外篇]__关于StringBuilder类与String类的区别
前言 我们前面学习到String类的相关知识,知道了它是一个字符串类,并且了解到其中的一些方法,但是当时并没有太过注意到String类的特点,今天就StringBuilder类的学习来比较一下两者的区 ...
- [Java初探外篇]__关于时间复杂度与空间复杂度
前言 我们在前面的排序算法的学习中了解到了,排序算法的分类,效率的比较所使用到的判断标准,就包括时间复杂度和空间复杂度,当时因为这两个定义还是比较难以理解的,所以决定单独开一篇文章,记录一下学习的过程 ...
- [Java初探实例篇02]__流程控制语句知识相关的实例练习
本例就流程控制语句的应用方面,通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识,设计到,if条件判断语句,switch多分支语句,for循环语句及其嵌套多层使用,while循环语句. 练习 ...
- [java初探总结篇]__java初探总结
前言 终于,java初探系列的学习,要告一阶段了,java初探系列在我的计划中是从头学java中的第一个阶段,知识主要涉及java的基础知识,所以在笔记上实在花了不少的功夫.虽然是在第一阶段上面花费了 ...
- [java核心外篇]__Object类与对象类型的转型
前言 我们在之前的学习中提过很多次了,java是面向对象的,java的基础可以说是建立在类和对象上面的.然后我们又学到了类的继承,发现了在java类库中,类的继承是极为普遍的,一个类继承另一个类,就像 ...
- 【Java初探实例篇01】——Java语言基础
示例系列,将对每节知识辅以实际代码示例,通过代码实际编写,来深入学习和巩固学习的知识点. IDE:intellij IDEA: 语言:Java 本次示例:Java语言基础知识的应用. 创建包day_4 ...
- Java微信公众平台开发--番外篇,对GlobalConstants文件的补充
转自:http://www.cuiyongzhi.com/post/63.html 之前发过一个[微信开发]系列性的文章,也引来了不少朋友观看和点评交流,可能我在写文章时有所疏忽,对部分文件给出的不是 ...
随机推荐
- TCP、UDP网络通信
IP地址和端口号 端口号是用两个字节(16位的二进制数)表示的,它的取值范围是0~65535,其中,0~1023之间的端口号用于一些知名的网络服务和应用, 用户的普通应用程序需要使用1024以上的端口 ...
- 图解Eclipse中配置Maven并创建Maven的Web工程
打开eclipse,Windows->Preferences,如下图所示: 2 在Preferences作如下配置,如下图所示: 3 配置完Maven的安装目录后,还需要配置Maven的配置 ...
- .net MongoDB使用
.net平台的MongoDB使用 CRL快速开发框架系列教程十二(MongoDB支持) MongoDB数据库 mongo-csharp-driver
- [转]Android中Intent传递对象的两种方法(Serializable,Parcelable)
http://blog.csdn.net/xyz_lmn/article/details/5908355 今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种 ...
- 转载:readLine()与read()
版权声明:本文为原博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sinat_31057219/article/details/78742653 参考: readLi ...
- bootstrap table 前端搜索
1.bootstrap-table对于前端的搜索可以通过官网设置,但发现前端搜索出现bug,网上找到一个bootstrap-table的扩充js bootstrap-table-mytoolbar. ...
- Swift简单实现一个常规条款、免责声明文字+带有链接的展示形式
效果: IMG_F08DABE063A6-1.jpeg class DisclamerView: UIView { //@objc weak var vc:UIViewController? // ...
- Linked List
链表是线性表的一种.线性表是最基本,最简单也是最常见的一种数据结构.线性表中数据元素之间的关系是一对一的关系,除了第一个和最后一个数据元素外,其他数据元素都是首尾相接的. 线性表有两种存储方式,一种是 ...
- ASP.NET Core 2.1 源码学习之 Options[3]:IOptionsMonitor
前面我们讲到 IOptions 和 IOptionsSnapshot,他们两个最大的区别便是前者注册的是单例模式,后者注册的是 Scope 模式.而 IOptionsMonitor 则要求配置源必须是 ...
- C#为什么不能像C/C++一样的支持函数只读传参
C#为什么不能像C/C++一样的支持函数只读传参? 这个问题其实问的人挺多的,我自己也经常想实现这个功能,但是发现总是那么的不尽人意. 有些人倒是给出了一下答案,但是都不能很好的解决像C/C++一样的 ...