探索static——不需要能够使用该类实例?
在一般情况下。需要使用一个上课时间。你必须先实例化类,它调用的能力。在编程过程中发现。有些类不能直接实例来使用,利用其场、法等等。
这时候。靠的就是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——不需要能够使用该类实例?的更多相关文章
- 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法
四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...
- 【C++】C++ static关键字详解
static的作用 1.隐藏 当我们编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,其他的源文件也能访问.如,我们有源文件source1.cpp定义了一个全局变量i和函数Fu ...
- Java关键字:static
通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...
- Java关键字final、static
一.final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. final ...
- #Java编程思想笔记(一)——static
Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...
- java中static 和 final 的一些使用规则
一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引 ...
- 【转】Java关键字final、static使用总结
转自:http://lavasoft.blog.51cto.com/62575/18771/ Java关键字final.static使用总结 一.final 根据程序上下文环境, ...
- Synchronized和Static Synchronized区别
通过分析这两个用法的分析,我们可以理解Java中锁的概念. 一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念), 一个是全局锁(该锁针对的是类,无论实例多少个对象,那么线 ...
- Java中static的理解
static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...
随机推荐
- 《Android内核剖析》读书笔记 第13章 View工作原理【View树遍历】
View状态分类 在View视图中定义了多种和界面效果相关的状态,比如拥有焦点Focused.按下Pressed等,不同的状态一般会显示不同的界面效果,而且视图状态会随着用户的操作而改变,一般通过xm ...
- 在web浏览器中判断app是否安装并直接打开
最近公司App产品在运营推广上有一个需求,就是要求可以让用户在访问我们的推广网页时,就可以判断出这个用户手机上是否安装了我们的App,如果安装了则可以直接在网页上打开,否则就引导用户前往下载.从而形成 ...
- CSS计数器妙用
做web的经常会遇到类似排行榜的需求, 特别是要求前n名的样式和后面人不一样. 通常大多数人对于这个需求的做法都是在后端处理好排名名次, 在前端填入内容, 然后针对前n名做特殊的样式处理. 但是这样有 ...
- CentOS 6.4 文件夹打开方式
CentOS 6.4 文件夹打开方式 在CentOS 6.4中,双击文件夹,默认会在新窗口中打开文件夹,没有路径.前进.后退这样的按钮,如果一个文件夹的路径很深,则需要打开n多的窗口才能找到最终想要的 ...
- android IllegalStateException
由于android的线程非安全,直接在子线程中对UI进行更新是不被允许的,同样在常用的 适配器+List<E> 组合中,子线程直接更新与适配器绑定的List,便可能产生IllegalSta ...
- JQuery日记_5.13 Sizzle选择器(六)选择器的效率
当选择表达式不符合高速匹配(id,tag,class)和原生QSA不可用或返回错误时,将调用select(selector, context, results, seed)方法,此方法迭代DO ...
- android一些面试题目
1.ListView怎么提高滑动效率 2.说下你做过项目的包的构架,(联网,解析,activity,database) 重点 3.载入大量图片怎么做(包含小图和查看大图) 怎么降低一次跟server的 ...
- InputStreamReader 和 OutputStreamWriter类使用方法简单介绍,及演示。
InputStreamReader 和 OutputStreamWriter类使用方法简单介绍. 一.InputStreamReader类 InputStreamReader 将字节流转换为字符流.是 ...
- ngrok 本机代码部署外网访问神器(转)
背景:听哥们说了个工具ngrok,可以让本机配置的web服务在外网访问,抱着将信将疑的态度试了试,发现还真的可以.下面记录下我自己的安装步骤,另外谈下自己还有些疑问的地方. 参考资料网站:http:/ ...
- Linux 下开启ssh服务(转)
二.SSH SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目 ...