【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

原文地址:https://www.cnblogs.com/gemuxiaoshe/p/10641670.html

时间: 2024-11-09 03:17:43

【Java初探外篇02】——关于静态方法与实例方法的相关文章

java基础学习篇02(数据类型转换和基本面试题)

JAVA基本数据类型转换 java中的数据类型,分为,引用数据类型和基本数据类型.基本数据类型有8中 整型:byte 8位 . short 16位 .int 32位 .long 64位. (8位=1个字节) 浮点型:float 32位 .double64位 字符类型:char Boolean型:boolean 自动类型转换 转换图 正方向是自动转换  反方向强制转换(char--->double的转换  和byte到 double的转换) char -->int-->long-->

Java微信公众平台开发--番外篇,对GlobalConstants文件的补充

转自:http://www.cuiyongzhi.com/post/63.html 之前发过一个[微信开发]系列性的文章,也引来了不少朋友观看和点评交流,可能我在写文章时有所疏忽,对部分文件给出的不是很完全所以导致部分同学在有些地方做开发的时候遇到了一些阻力,收到这些朋友同学们的咨询反馈之后我也做了一些反思和总结,其中一部分同学说少了GlobalConstants这个文件(这个真心占的不少),还有一部分就是说源码的问题,所以今天特意抽了时间补充下这两点! (一)关于GlobalConstants

【喵"的Android之路】【番外篇】有关于null的一些知识点

[喵"的Android之路][番外篇]有关于null的一些知识点 1.首先,到底什么是null? null是Java中的一个关键字,用于表示一个空对象引用,但其本身并不是任何类型也不是属于任何对象.因此,下面的做法是错误的: int a = null; 但: Object obj = null; 是可以的,因为null表示Object类型的一个空对象引用,符合其用意. [注1]引用类型使用null声明对象变量后,无法使用该变量访问对象的成员.例如上述obj对象如果使用obj.toString()

[反汇编练习-番外篇] Delphi专攻

[反汇编练习-番外篇] Delphi专攻 鉴于OD在Delphi反汇编这一块的薄弱,狠狠研究了下当前的手段. 大家常用的反编译除了OD(ollydebug).IDA,还有Delphi用的Dede,C#用的NetReflector,还有几个跟踪易语言的.其实反汇编的利器还有很多,在吾爱云盘中收录了: AS3.Sorcerer.v2.72.CracKed.By.REPT.7z 28-Mar-2014 10:59 5M C32Asm.rar 28-Dec-2013 14:52 1M DJ.Java.D

Android插件开发初探——分析篇

承接上文 Android插件开发初探--基础篇 http://blog.csdn.net/yzzst/article/details/45582315 我们通过使用DexClassLoader能够将classes.dex中的类动态的加载进入当前进程.当然,也就可以预先定一些代理的接口完成四大组件的功能. 整体功能如下图所示: 当然,对于一个Android的应用程序而言,只是动态的加载类与声明四大组件是不够的.如下图所示,使我们常见到的一个APK文件解压缩后的文件内容. 有过Android项目开发

(apache+tomcat集群+memcached番外篇)单台tomcat的session信息的2种持久化方式

为什么要实现搭建tomcat集群环境呢?主要因为单个tomcat无论从吞吐量和并发数上,会达到一定的极限.如果访问量超过单个tomcat的承受能力的话,tomcat一般要么拒绝提供服务,要么直接宕掉.所以,必须要依靠tomcat集群技术.举个最简单的例子,拿"送快件"比喻,如果一个人,5分钟送一件,一小时之内,送10个,一个人完全能胜任这项工作.假设现在到了双十一,要求1小时,送100个, 那怎么办?只能安排更多的人加入"送快件"这项工作中来.这其实和集群一个道理.

《Mycat学习笔记》 番外篇一.客户端使用latin1字符集,后端MySQL为UTF8字符集,MyCat日志分析。

其实这个番外篇比较无聊——即客户端为lantin字符集,后面MySQL为U8字符集,MyCat在中间到底会起什么作用. 再说下本次验证的环境: Mac OS 10.11.2 MySQL 5.6 MyCat 1.5 OK,开始我们的验证工作. 1) 由于数据库与操作系统已被默认设置为U8编码,计划通过修改Mysql  “character_set_client” 参数调整客户端字符集配置进行验证. 关于MYSQL字符集较全面的介绍,请参考 <mysql_query("set names gb

【喵&quot;的Android之路】【番外篇】关于==和equals

[喵"的Android之路][番外篇]关于==和equals 在实际的编程当中,经常会使用==和equals来判断变量是否相同.但是这两种比较方式也常常让人搞得云里雾里摸不着头脑.下面是我个人做的总结,希望能起到拨云见日的作用. [讲前普及] 请阅读 [喵"的Android之路][基础篇(一)][Java面向对象基础]数据类型与运算符 了解Java基本数据类型和引用数据类型 1."=="运算符 通俗点讲,==运算符比较的是两个变量在栈中的内容是否相同. 以a ==

Linux入门之内核管理番外篇(4)udev入门(1)

Linux入门之内核管理番外篇(4)udev入门(1) 前言 在上篇中的内核模块管理讲解中,最后或多或少会留下一些疑问,那么这些疑问就是内核模块的参数是怎么和对应的硬件所匹配上的,而硬件又是怎么被内核识别,并且一个个都映射成实际存在的文件,而这些文件之间的关系及作用.当然在最后了解到,这些硬件设备的探测信息是通过一个叫udev的工具来实现的,通过udev中配置的规则可以很有效的识别每一个硬件,并配合sysfs文件系统,将每个探测到的硬件信息导入到/sys目录中,那么与/proc目录对与内核系统信