对象static作用

static的作用  时间:2021-02-28  阅读:()

是静态修饰符什么叫静态修饰符呢大家都知道在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的而所谓静态就是指在编译后所分配的内存会一直存在直到程序退出内存才会释放这个空间也就是只要程序在运行那么这块内存就会一直存在。这样做有什么意义呢

在J av a程序里面所有的东西都是对象而对象的抽象就是类对于一个类而言如果要使用他的成员那么普通情况下必须先实例化对象后通过对象的引用才能够访问这些成员但是有种情况例外就是该成员是用stat i c声明的在这里所讲排除了类的访问控制 例如

未声明为stat i cclass ClassA{int b;public void ex1(){

}

}class ClassB{voidex2{int i;

ClassA a=new ClassA();i=a.b; //这里通过对象引用访问成员变量ba.ex1; //这里通过对象引用访问成员函数ex1

}

}

声明为s tat i cclass ClassA{static int b;static vo id ex1(){

}

}class ClassB{void ex2{int i;i=C las sA.b; //这里通过类名访问成员变量b

ClassA.ex1; //这里通过类名访问成员函数ex1

}

}

通过以上两种比较就可以知道s tat i c用来修饰类成员的主要作用了

在j ava类库当中有很多类成员都声明为stati c可以让用户不需要

实例化对象就可以引用成员最基本的有Inte ge r.par seInt() F loat.p arseFloat()等等用来把对象转换为所需要的基本数据类型。这样的变量和

方法我们又叫做类变量和类方法。

接下来讲一下被s tat i c修饰后的变量的值的问题刚才在前面讲过被stat i c修饰后的成员在编译时由内存分配一块内存空间直到程序停止运行才会释放那么就是说该类的所有对象都会共享这块内存空间看一下下面这个例子class TS tatic{static int i;public TStatic(){i=4;

}public TStatic(int j){i=j;

}public static void main(String args[]){

TStatic t=new TStatic(5); //声明对象引用并实例化

TStatic tt=new TStatic(); //同上

Sys te m.out.print ln(t.i);

Sys te m.o ut.println(tt.i);

Sys te m.o ut.pr intln(t.i);

}

}

第一个用于初始化I为4第二个用于初始化i为传进函数的值

在ma in中所传的值是5程序首先声明对象的引用t然后调用带参

数的构造函数实例化对象此时对象t的成员变量I的值为5接着

声明对象tt调用无参数的构造函数那么就把对象tt的成员变量i的值初始化为4了注意了在这里i是s tat i c那就是说该类

所有对象都共享该内存那也就是说在实例化对象tt的时候改变了i的值那么实际上对象t的i值也变了 因为实际上他们引用的

同一个成员变量。最后打印的结果是三个4。呵呵写到这里大家

是否明白了呢不明白就再看看书或者多写几个例子印证一下

呵。

是这样的 static定义的变量是个所有该类对象共有的变量那

么我们可以举个例子来说明 比如我编写一个Student类该类中有个s tat i c变量c o unt用来记录学生的个数在构造方法中做c o unt。那么当我每创建一个对象时count都会做自加也就是每创建一个S tude nt的对象系统就会记录一个那么很显然我就可以调用这个count知道一共有多少Stude nt对象了。这个是个很简单的例子不过应该可以说明问题了。

问题:雇员类有个雇员基本工资,对于员工A员工B都是一样的,但是管理员又有可能需要对这个工资做调整,也就是不能定义成常量.像这样的变量你要怎么处理呢?怎么保证这样的一致性?

于是stati c成员变量和成员方法就产生咯:static int salary;public static void setSalary(int salary){this.salary=salary;}public static int getSalary(){return salary;}

这样的话我就直接用员工类.方法得到统一的基本工资值啦:

Employee.setSalary(800);

Emp loye e.getSalary();

至于每个员工嘛,也可以调用这个方法查看自己的基本工资

Employee A=new Employee();

A.getSalary();

PS:这里还涉及到对员工实体屏蔽setSalary()方法的问题,我也懒得想啦. . . . .

其实楼上的各位说得已经很清楚了,我只是更形象得告诉你,好理解一点.

GeorgeDatacenter:洛杉矶/达拉斯/芝加哥/纽约vps云服务器;2核/8GB/250GB/2TB流量/1Gbps端口,$84/年

georgedatacenter怎么样?GeorgeDatacenter是一家2017年成立的美国商家,正规注册公司(REG: 10327625611),其实是oneman。现在有优惠,有几款特价VPS,基于Vmware。支持Paypal付款。GeorgeDatacenter目前推出的一款美国vps,2核/8GB内存/250GB NVMe空间/2TB流量/1Gbps端口/Vmware/洛杉矶/达拉...

Dynadot多种后缀优惠域名优惠码 ,.COM域名注册$6.99

Dynadot 是一家非常靠谱的域名注册商家,老唐也从来不会掩饰对其的喜爱,目前我个人大部分域名都在 Dynadot,还有一小部分在 NameCheap 和腾讯云。本文分享一下 Dynadot 最新域名优惠码,包括 .COM,.NET 等主流后缀的优惠码,以及一些新顶级后缀的优惠。对于域名优惠,NameCheap 的新后缀促销比较多,而 Dynadot 则是对于主流后缀的促销比较多,所以可以各取所...

ThomasHost(月付5美元)美国/法国/英国/加拿大KVM,支持Windows

ThomasHost域名注册自2012年,部落最早分享始于2016年,还算成立了有几年了,商家提供基于KVM架构的VPS,数据中心包括美国、法国、英国、加拿大和爱尔兰等6个地区机房,VPS主机套餐最低2GB内存起步,支持Windows或者Linux操作系统,1Gbps端口不限制流量。最近商家提供了一个5折优惠码,优惠后最低套餐月付5美元起。下面列出部分套餐配置信息。CPU:1core内存:2GB硬...

static的作用为你推荐
google竞价排名谷歌是靠什么关键词排名的?谷歌竞价有什么特点?有什么优势?天府热线天府热线怎么老是进不去?绵阳电信绵阳电信宽带资费bbsxpbbsxp 2008 无法创建数据库无线路由器限速设置无线路由器限速怎么设置!硬盘人克隆一个人需要多少人多长时间啊商标注册查询官网全国商标注册查询在哪里查呀?iphone6上市时间苹果6什么时候出来cr2格式如何打开CR2格式的照片呢srv记录SRV记录的定义
海外域名 com域名注册1元 西安服务器租用 淘宝抢红包攻略 site5 pccw 域名优惠码 suspended 2017年黑色星期五 阿里云代金券 网通服务器ip 网通ip ca4249 电信主机 www789 东莞主机托管 空间服务器 测试网速命令 hdchina 腾讯云平台 更多