在一般情况下。需要使用一个上课时间。你必须先实例化类,它调用的能力。在编程过程中发现。有些类不能直接实例来使用,利用其场、法等等。

这时候。靠的就是static作用。static英文意思为“精巧的。静态的”,在OOP中能够作为修饰符。类、字段、属性、方法等被static修饰后,变为静态类、静态字段、静态属性、静态方法……

static修饰的类成为静态类,静态类仅仅能包括静态成员(被static修饰的字段、属性、方法),不能被实例化,不能被继承;非静态中能够包括静态成员。

1、被调用时必须先实例化的情况:

       被调用成员为非静态成员(此时它所属的类肯定为非静态类)。例如以下小样例:

    public class ClassA      //ClassA类(非静态类)
{
public ClassA() { } //构造函数
public void Fun() { }//ClassA类中的方法(非静态方法)
} public class ClassB //须要调用ClassA类中方法的ClassB类
{
public ClassB() { } //构造函数
public void Fun()
{
ClassA a = new ClassA();//调用ClassA类中的方法须要先实例化
a.Fun();
}
}

说明:ClassA类为非静态类。当中的方法Fun()也为非静态方法,所以在ClassB中调用时须要先实例化ClassA类。

2、被调用时不须要实例化的情况:

       被调用成员为静态成员(此时它所属的类为静态类或非静态类)。例如以下小样例:

(1)被调用类为非静态类:

    public class ClassA      //ClassA类(非静态类)
{
public ClassA() { } //构造函数
public static void Fun() { }//ClassA类中的方法(静态方法)
} public class ClassB //须要调用ClassA类中方法的ClassB类
{
public ClassB() { } //构造函数
public void Fun()
{
ClassA.Fun(); //调用ClassA类中的方法直接调用:类名.成员
}
}

说明:ClassA类为非静态类,但当中的方法Fun()为非静态方法。所以在ClassB中调用时不实例化ClassA类(并且不能实例化)。直接调用其成员,语法为“类名.成员”。

(2)被调用类为静态类:

    public static class ClassA      //ClassA类(静态类)
{
//当然静态类中不能存在构造函数
public static void Fun() { }//ClassA类中的方法(静态方法)
} public class ClassB //须要调用ClassA类中方法的ClassB类
{
public ClassB() { } //构造函数
public void Fun()
{
ClassA.Fun(); //调用ClassA类中的方法直接调用:类名.成员
}
}

说明:ClassA类为静态类,当中的方法也Fun()为非静态方法,所以在ClassB中调用时不实例化ClassA类(并且不能实例化),直接调用其成员,语法为“类名.成员”。

3、static修饰符(拓展):

(1) 用来修饰类或类的成员,这时不须要创建实例就能訪问(并且不能实例化),在被调用的时候自己主动实例化,且在内存中产生一个实例。当含有静态成员的非静态类实例化出对象后,这些对象公用这些静态成员。通过类名或对象名都能訪问它们。

        在网上看到两个有趣的小样例:

        人是一个非静态类。

有脑子。这是一个用static修饰的属性。

这个属性是针对全部的人,是人的共同特征。而不是某个特点对象所特有的(比方张三有脑子。李四没脑子),由于仅仅要是个人,他都有脑子(尽管卡洛斯·罗德里格兹仅仅有半个脑子,还有些人比較脑残→_→。那也算是有脑子),既然是人类共同拥有的,那么他就不能被实例化。



       另外一个能被实例化的样例,还是人这个类。人的身高,就是一个非static的属性。

由于每一个人的身高是不同的。比方我身材魁梧,高达1.55米,这个1.55米是描写叙述我的身高,是跟我这个特定的对象有联系的。

姚明才2.26米。这是姚明这个对象的数据。无论是1.55还是2.26,这都和特定的对象有联系。而不是人类所共同拥有的特征。

所以非static的能够被实例化,而static不能被实例化。





       (2) 修饰方法内部的静态变量

       我们的代码都是从硬盘载入到内存中才干执行的。在内存中主要分为三个区域,来存放我们的代码。各自是堆、栈和静态存储区。堆中存放的是代码中的引用类型变量,如类的实例、数组等。栈中存放的是代码中的值类型,如整型、浮点型、布尔型等;静态存储区中存放静态变量和全局变量、常亮。

整个程序执行时。代码都是共用静态存储区中的静态变量的。比如定义存款剩余金额为静态变量,同一个银行卡号,不管你是在银行取钱、在ATM机取钱。还是网银消费,用的都是这个静态的剩余金额。

所以,方法内部的静态变量,运行完静态变量值不消失。再次运行此对象的方法时,值仍存在,它不是在堆和栈中分配的,是在静态区非配的, 这是与局部变量最大的差别。关于内存分配问题可參考《静态存储区、堆和栈的差别》

版权声明:本文博客原创文章,博客,未经同意,不得转载。

探索static——不需要能够使用该类实例?的更多相关文章

  1. 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法

    四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...

  2. 【C++】C++ static关键字详解

    static的作用 1.隐藏 当我们编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,其他的源文件也能访问.如,我们有源文件source1.cpp定义了一个全局变量i和函数Fu ...

  3. Java关键字:static

    通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...

  4. Java关键字final、static

    一.final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. final ...

  5. #Java编程思想笔记(一)——static

    Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...

  6. java中static 和 final 的一些使用规则

    一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引 ...

  7. 【转】Java关键字final、static使用总结

    转自:http://lavasoft.blog.51cto.com/62575/18771/   Java关键字final.static使用总结   一.final        根据程序上下文环境, ...

  8. Synchronized和Static Synchronized区别

    通过分析这两个用法的分析,我们可以理解Java中锁的概念. 一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念), 一个是全局锁(该锁针对的是类,无论实例多少个对象,那么线 ...

  9. Java中static的理解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

随机推荐

  1. python手记(52)

    python将信息加密进图片 从图片中解密信息 >>> runfile(r'K:\testpro\test1.py', wdir=r'K:\testpro') http://blog ...

  2. 使用OGG&quot;Loading data from file to Replicat&quot;的方法应该注意的问题:replicat进程是前台进程

    使用OGG的 "Loading data from file to Replicat"的方法应该注意的问题:replicat进程是前台进程 因此.最好是在vncserver中调用该 ...

  3. mmc生产任务分配问题

    mmc生产任务分配问题,本题目简单.

  4. 【剑指offer】面试题35:第一个数字只出现一次

    def FirstNotRepeatingChar(string): hashStr = [0] * 256 for c in string: hashStr[ord(c)] += 1 for c i ...

  5. client对象层次和0级DOM

    刚開始学了两天JS,闲着无聊,顺手画了张图

  6. POJ1300(欧拉回路)

    Door Man Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2139   Accepted: 858 Descripti ...

  7. C# 如何获取某用户的“我的文档”的目录

    Console.WriteLine(System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)); System.E ...

  8. java.lang.RuntimeException: Method called after release()

    主要引起是因為在 camera.stopPreview();   camera.release(); 前沒有將setPreviewCallback 設置為null, 解決情況: public void ...

  9. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:3.技术简介之MinaFilter——LoggingFilter (转)

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 LoggingFilter 接下来,使我们对Filter介绍的最后一个——LoggingFilter. 与Proto ...

  10. Eclipse 在线安装fat jar插件

    在线安装步骤: eclipse菜单栏 help >software updates >Search for new features to install>new update si ...