静态方法 与 非静态方法的区别/static 关键字

为什么80%的码农都做不了架构师?>>>   hot3.png

使用static修饰的静态方法是属于整个类的类方法,它在内存中的代码段会随类的定义而被分配和装载;而非静态方法是属于具体对象的方法,当这个对 象创建时,在对象的内存中会拥有此方法的专用代码段。在引用静态方法时,可以使用对象名加前缀,也可以使用类名加前缀。eg. classA 实例化了一个对象objectA,

classA中定义了一个静态方法:run( ). 则可使用 classA.run( ) 或者objectA.run( )来执行。

非静态方法既可以访问静态数据成员 又可以访问非静态数据成员,而静态方法只能访问静态数据成员;同样地非静态方法既可以访问静态方法又可以访问非静态方法,而静态方法只能访问静态数据方法。特别注意的是静态方法中的main方法,它作为程序运行的入口点,在每个程序中有且只能有一个。
  例如:
public class Person{
      public int age;
      public static double height;
      public static String Address(String x){
      System.out.println("address:"+x);
      } 
      public int Birthday(int x){
      System.out.println("birthday is "+x+" month");
      }
      public static void main(String[] args){//静态方法
      age=24;           //引用了非静态数据成员
      height=173;
      Address("xi'an");
      Birthday(5);      //引用了非静态方法
      }
}
  编译时,就会出现无法从静态上下文中引用非静态变量age和非静态方法Birthday(int)的错误
  
  还有一点就是静态方法不能被覆盖,有一个形象的例子引自http://blog.csdn.net/rujiao/archive/2009/01/13/3764115.aspx
  首先我们提供两个类,基类为Parent,派生类为Child。在Parent中我们提供两个方法,一个是静态方法staticMethod(),一个是非静态方法nonStaticMethod()。在Child类中我们覆盖着两个方法。
class Parent
{
public void nonStaticMethod()
{
  System.out.println("parent's Non-Static Method is Called"); 


public static void staticMethod()
{
  System.out.println("parent's static method is called"); 
}
}

class Child extends Parent
{
public void nonStaticMethod()
{
  System.out.println("child's non-static method is called"); 
}

public static void staticMethod()
{
  System.out.println("child's static method is called"); 
}
  
}
    在Test类中我们分别使用Parent p1 = new Parent(),Parent p2 = new Child(),Child c = new Child()得到三个实例,并分别调用静态方法和非静态方法,我们来看程序的运行结果
public class Test
{
         public static void main(String args[]) 
         {
          Parent p1 = new Parent();
          Parent p2 = new Child();
          Child c = new Child();
          System.out.print("parent.static: "); Parent.staticMethod();
          System.out.print("p1.static: "); p1.staticMethod();
          System.out.print("p2.static: "); p2.staticMethod();
          System.out.print("p1.nonStatic: "); p1.nonStaticMethod();
          System.out.print("p2.nonStatic: "); p2.nonStaticMethod();
          System.out.print("Child.static: "); Child.staticMethod();
          System.out.print("c.static: "); c.staticMethod();
          System.out.print("c.nonStatic: "); c.nonStaticMethod();
         }

}
程序的运行结果为:
Parent.static: parent's static method is called
p1.static: parent's static method is called
p2.static: parent's static method is called
p1.nonStatic: Parent's Non-Static Method is Called
p2.nonStatic: child's non-static method is called
Child.static: child's static method is called
c.static: child's static method is called
c.nonStatic: child's non-static method is called
值得注重的是p2实际上是一个Child的类型的引用,然而在调用静态方法的时候,它执行的却是父类的静态方法,而不是Child的静态方法,而调用 p2的非静态方法的时候执行的是Child的非静态方法,为什么呢?原因是静态方法是在编译的时候把静态方法和类的引用类型进行匹配,而不是在运行的时候 和类引用进行匹配。因此我们得出结论:当我们在子类中创建的静态方法,它并不会覆盖父类中相同名字的静态方法。

_______________

 

static关键字

static表示"全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态代码块.

1)静态方法和静态变量是属于某一个类,而不属于类的对象。

2)静态方法和静态变量的引用直接通过类名引用。

3)在静态方法中不能调用非静态的方法和引用非静态的成员变量。反之,则可以。

4)静态变量在某种程序上与其他语言的全局变量相类似,如果不是私有的就可以在类的外部进行访问。

 

转载于:https://my.oschina.net/stuka/blog/644864

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1618931.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Python 通过traceback追溯异常信息

Python 通过traceback追溯异常信息 导入traceback包 import traceback自定义函数 def func_3():return 1 / 0def func_2():func_3()def func_1():func_2()捕捉异常 try:func_1() except Exception as e:traceback_info traceback.format_exc()print("traceback_info"…

TSRFormer:复杂场景的表格结构识别新利器

编者按:近年来,各大企业和组织机构都在经历数字化转型。将文档转换成计算机所能识别的样态,是数字化转型的关键步骤,如何识别出图片中表格具体的结构与内容,并直接提取其中的数据和信息是学术界和工业界共同瞩目的焦点…

C++设计模式_01_设计模式简介(多态带来的便利;软件设计的目标:复用)

文章目录 本栏简介1. 什么是设计模式2. GOF 设计模式3. 从面向对象谈起4. 深入理解面向对象5. 软件设计固有的复杂性5.1 软件设计复杂性的根本原因5.2 如何解决复杂性 ? 6. 结构化 VS. 面向对象6.1 同一需求的分解写法6.1.1 Shape1.h6.1.2 MainForm1.cpp 6.2 同一需求的抽象的…

聚类分析 | MATLAB实现基于AHC聚类算法可视化

聚类分析 | MATLAB实现基于AHC聚类算法可视化 目录 聚类分析 | MATLAB实现基于AHC聚类算法可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 AHC聚类算法,聚类结果可视化,MATLAB程序。 Agglomerative Hierarchical Clustering(自底…

从360随身WiFi到随身WiFi的改革发展史

摘要 随身WiFi从3G逐渐发展到4G、5G网络,再到WiFi,将网络信号转换成WiFi信号的设备,很大程度上的满足了出差需要移动办公的商务人士及旅游人士对网络的需求。 最先开始出现的是插电脑USB接口的随身WiFi,提前是你已经有了有线宽带…

360wifi使用方法|360wifi使用教程

360随身WiFi是一款超迷你、操作极其简单的无线路由器,只需把360随身WiFi插到一台可以上网的电脑上,不用做任何设置,就把连接有线网络的电脑转变成接入点,实现与其他终端的网络共享。简单方便实现手机WIFI上网。1、是否支持台式机&…

软件工程(九) UML顺序-活动-状态-通信图

顺序图和后面的一些图,要求没有用例图和类图那么高,但仍然是比较重要的,我们也需要按程度去了解。 1、顺序图 顺序图(sequence diagram, 顺序图),顺序图是一种交互图(interaction diagram),它强调的是对象之间消息发送的顺序,同时显示对象之间的交互。 下面以一个简…

iOS 4.3.5 红雪不完美越狱教程

苹果前不久放出了最新的iOS 4.3.5,声称是封堵了之前4.3.3的越狱漏洞,不过大神MuscleNerd很快就在他的推特上说Redsnow(红雪)0.98b4可以越狱4.3.5。下面为大家提供4.3.5详细越狱方法! 什么是不完美越狱? 不完美越狱就是越狱后你的设备不能…

iPhone / iPad iOS 5.0.1完美 越狱 教程 A4/A5处理器

黑客团队Dev Team的红雪列越狱软件Redsn0w 0.9.10b1,可以完美越狱部分iOS 5.0.1设备,1、此次完美越狱工具支持机型:iPhone 3GSiPhone 4iPhone 4-CDMAiPad (第一代)iPod touch 3GiPod touch 4G不支持的机型:iPhone 4SiPad 22、如果以上设备还不…

果粉的福音 ios5不完美越狱图文教程

转载自:http://mobile.sanhaostreet.com/Newsdata/2011/10/20111017104016162.shtml 2011年10月13日随着苹果全新系统ios5的开放下载,让诸多果粉又一次体验到了苹果的神奇与创新。全新的ios5系统增加了200余项新功能,通知中心、iCloud、报刊杂…

Xcode6.1 OS X 10.10 打越狱包和免证书测试方法

公司要发布包到91助手等平台上,需要打越狱包,之前没有动手打过,于是在网上搜集资料自己整理了一下,顺便分享给大家。 我的运行环境:OS X 10.10 ,Xcode6.1 iPhone5C (已越狱,这里就不详说越狱步骤,网上很多教程也很简单)。 1、首先要自己创建证书,并且名字必须叫做,iPh…

在vue项目中用vue-watermark快捷开发屏幕水印效果

我们先引入一个第三方依赖 npm install vue-watermark然后 因为这只是个测试工具 我就直接代码写 App.vue里啦 参考代码如下 <template><div><vue-watermark :text"watermarkText"></vue-watermark><!-- 正常的页面内容 --></div…

4.13 使用格式刷合并单元格和快速调整多列单元格的样式 [原创Excel教程]

原文&#xff1a;http://coolketang.com/staticOffice/5a97f2f7a22b9d0044326529.html 1. 本节课将为您演示&#xff0c;如何使用格式刷工具&#xff0c;对单元格进行快速合并&#xff0c;并对一定区域的单元格进行复制和应用。首先选择左上角的处于合并状态的单元格。 2. 然…

代码随想录第31天|认识贪心算法,455.分发饼干,376. 摆动序列,53.最大子数组和

贪心的介绍 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 例如&#xff0c;有一堆钞票&#xff0c;你可以拿走十张&#xff0c;如果想达到最大的金额&#xff0c;你要怎么拿&#xff1f; 指定每次拿最大的&#xff0c;最终结果就是拿走最大数额的钱。…

NoSQL数据库介绍+Redis部署

目录 一、NoSQL概述 1、数据的高并发读写 2、海量数据的高效率存储和访问 3、数据库的高扩展和高可用 二、NoSQL的类别 1、键值存储数据库 2、列存储数据库 3、文档型数据库 4、图形化数据库 三、分布式数据库中的CAP原理 1、传统的ACID 1&#xff09;、A--原子性 …

你真会进制的转换吗?进制之间的快速转换方法(我的转换很快,你忍一下)

前言 我们都知道计算机是用 2进制来表示的&#xff0c;也就是一堆的0 1代码组成的逻辑电路&#xff0c;可是当我们窥探内存的时候&#xff0c;计算机给我们显示的总是 16进制的数字&#xff0c;这使得我们作为人类来说&#xff0c;只熟悉 10进制的&#xff0c;阅读这 16进制&a…

Java流处理之转换编码的转换流

之前的博客梳理了基本的字节流和字符流&#xff1a;Java字节流和字符流详解&#xff0c;本文主要讲基于基础的字节字符流做转换编码的转换流。 文章目录 &#x1f926;‍♂️字符编码和字符集&#x1f3c3;字符编码&#x1f3c3;‍♀️字符集 ⛹编码引出的问题&#x1f3cb;In…

C语言【隐式类型转换】和【显式类型转换】的详解

本期介绍&#x1f356; 主要介绍&#xff1a;那些不被轻易发现的类型转换&#xff0c;隐式类型转换和显示类型转换&#x1f440;。 文章目录 一、前言&#x1f356;二、隐式类型转换&#x1f356;2.1 整形提升&#x1f356;2.1.1 例题1&#x1f356;2.1.2 例题2&#x1f356;2.…

基本数据类型的转换 (基础完整篇)

基本数据类型间的转换包括 自动类型转换 和 强制类型转换 ,本文还讲了基本数据类型和String类型间的转换&#xff0c;这些是学习的重点&#xff0c;掌握这些之后还有其他想法或疑问&#xff0c;都可以自己尝试用代码验证结果&#xff0c;总之多实践比死记硬背更有用。&#x1f…

真正的GHOXPGHOST纯净版“觉山孤鹤GHOSTXP纯净版”五一奉献

真正的GHOXPGHOST纯净版“觉山孤鹤GHOSTXP纯净版”五一奉献 描述&#xff1a;一、光盘DOS下启动图 图片&#xff1a; 描述&#xff1a;二、安装效果图 图片&#xff1a; 描述&#xff1a;三、进入桌面 图片&#xff1a; 描述&#xff1a;四、光盘WIN下启动图 图片&#xff1a; …