JAVA编程中static的用途与用法

作者&投稿:薄欣 (若有异议请与网页底部的电邮联系)
java开发中static关键字有什么作用~

作用:static可以修饰变量、方法、代码块和内部类
static属性属于这个类所有,即由该类创建的所有对象共享同一个static属性。可以对象创建后通过对象名.属性名和类名.属性名两种方式来访问。也可以在没有创建任何对象之前通过类名.属性名的方式来访问。
static变量和非static变量的区别(都是成员变量,不是局部变量)1.在内存中份数不同
不管有多少个对象,static变量只有1份。对于每个对象,实例变量都会有单独的一份
static变量是属于整个类的,也称为类变量。而非静态变量是属于对象的,也称为实例变量
2.在内存中存放的位置不同
3.访问的方式不同
实例变量: 对象名.变量名 stu1.name="小明明";
静态变量:对象名.变量名 stu1.schoolName="西二旗小学"; 不推荐如此使用
类名.变量名 Student.schoolName="东三旗小学"; 推荐使用
4.在内存中分配空间的时间不同
Student.schoolName="东三旗小学";或者Student stu1 = new Student("小明","男",20,98);
static方法也可以通过对象名.方法名和类名.方法名两种方式来访问
static代码块。当类被第一次使用时(可能是调用static属性和方法,或者创建其对象)执行静态代码块,且只被执行一次,主要作用是实现static属性的初始化。
static内部类:属于整个外部类,而不是属于外部类的每个对象。不能访问外部类的非静态成员(变量或者方法),.可以访问外部类的静态成员

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。
只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。
static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。static前面加上其它访问权限关键字的效果也以此类推。
static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:
类名.静态方法名(参数列表...)
类名.静态变量名
用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块(用处非常大,呵呵)。
1、static变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。
两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
所以一般在需要实现以下两个功能时使用静态变量:
 在对象之间共享值时
 方便访问变量时
2、静态方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,
因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。
因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!
因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
例如为了方便方法的调用,Java API中的Math类中所有的方法都是静态的,而一般类内部的static方法也是方便其它类对该方法的调用。
静态方法是类内部的一类特殊方法,只有在需要时才将对应的方法声明成静态的,一个类内部的方法一般都是非静态的
3、static代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。例如:
public class Test5 {
private static int a;
private int b;
static{
Test5.a=3;
System.out.println(a);
Test5 t=new Test5();
t.f();
t.b=1000;
System.out.println(t.b);
}
static{
Test5.a=4;
System.out.println(a);
}
public static void main(String[] args) {
// TODO 自动生成方法存根
}
static{
Test5.a=5;
System.out.println(a);
}
public void f(){
System.out.println("hhahhahah");
}
}
运行结果:
3
hhahhahah
1000
4
5
利用静态代码块可以对一些static变量进行赋值,最后再看一眼这些例子,都一个static的main方法,这样JVM在运行main方法的时候可以直接调用而不用创建实例。
4、static和final一块用表示什么
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。
有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。
声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制:

它们仅能调用其他的static 方法。

它们只能访问static数据。

它们不能以任何方式引用this 或super(关键字super 与继承有关,在下一章中描述)。
如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块:
// Demonstrate static variables,methods,and blocks.
class UseStatic {
static int a = 3;
static int b;
static void meth(int x) {
System.out.println("x = " + x);
System.out.println("a = " + a);
System.out.println("b = " + b);
}
static {
System.out.println("Static block initialized.");
b = a * 4;
}
public static void main(String args[]) {
meth(42);
}
}
一旦UseStatic 类被装载,所有的static语句被运行。首先,a被设置为3,接着static 块执行(打印一条消息),最后,b被初始化为a*4 或12。然后调用main(),main() 调用meth() ,把值42传递给x。3个println ( ) 语句引用两个static变量a和b,以及局部变量x 。
注意:在一个static 方法中引用任何实例变量都是非法的。
下面是该程序的输出:
Static block initialized.
x = 42
a = 3
b = 12
在定义它们的类的外面,static 方法和变量能独立于任何对象而被使用。这样,你只要在类的名字后面加点号运算符即可。例如,如果你希望从类外面调用一个static方法,你可以使用下面通用的格式:
classname.method( )
这里,classname 是类的名字,在该类中定义static方法。可以看到,这种格式与通过对象引用变量调用非static方法的格式类似。一个static变量可以以同样的格式来访问——类名加点号运算符。这就是Java 如何实现全局功能和全局变量的一个控制版本。
下面是一个例子。在main() 中,static方法callme() 和static 变量b在它们的类之外被访问。
class StaticDemo {
static int a = 42;
static int b = 99;
static void callme() {
System.out.println("a = " + a);
}
}
class StaticByName {
public static void main(String args[]) {
StaticDemo.callme();
System.out.println("b = " + StaticDemo.b);
}
}
下面是该程序的输出:
a = 42
b = 99
static成员是不能被其所在class创建的实例访问的。
如果不加static修饰的成员是对象成员,也就是归每个对象所有的。
加static修饰的成员是类成员,就是可以由一个类直接调用,为所有对象共有的

1修饰符static
1)静态类变量(修饰成员变量):
1.Static int data语句说明data为类变量,为一个类的共享变量,是所有对象共享的,它不
属于任何对象,是属于整个类的(静态方法也是一样)。
2.Static定义的是一块为整个类共有的一块存储区域。
3.其变量可以通过类名去访问:类名.变量名(与通过对象引用访问变量是等价的)。
2)静态方法(修饰方法):
1.Public static void printData(){}:表明此类方法为类方法(静态方法),访问是在编译期
完成,执行效率比较高。
2.静态方法不需要有对象,可以使用类名调用(不需要实例也可以调用静态方法)。3.静态方法中不能访问类的非静态成员,包括成员变量和方法;只能访问本类中的静态
变量和其它静态方法。因为此时是通过类调用的,没有对象的概念。方法中this.data和
super.data是不可用的。
原因:从根本上说,静态变量不管类是否实例化都会存在,而实例变量只有类实例化了
才存在。直接调用静态方法时并不确定实例变量是否存在。
4. 一般情况下,主方法是静态方法,所以JVM可以直接调用它,主方法为静态方法是因
为它是整个软件系统的入口,而进入入口时系统中没有任何对象,只能使用类调用。
5.静态方法不能被覆盖,如果子类中有和父类重名的静态方法,虽然编译通过,但它并
不能实现多态,所以不能称作覆盖。例如:class Super{
static public void show(){System.out.println("in Super");}
}class Sub extends Super{
static public void show(){System.out.println("in Sub");}
}
public class Test {
public static void main(String[] arg) {
Super s = new Sub();
s.show();
}
}
执行结果是: in Super3)静态代码块(修饰没有名字的代码块):
1.只被执行一次;
2.初始化块在类被加载后首先被运行,不管类是否实例化,而且只执行这一次
3.作用:一般用来初始化一些复杂类型的静态变量。
4)静态内部类(注意:只能修饰成员内部类):
class Out{
public static class Inner{}
}5)Static通常用于Singleton模式开发:
Singleton模式(单例模式):是一种设计模式,高于语法,可以保证一个类在整个系统
中仅有一个对象。
1.问题域:
系统中你需要获得某个类的唯一实例,所有客户端对它的访问都将通过一个公共的访问点获得。
2.解决方案:创建一个类并使其
a.定义一个私有的构造器;
b.定义一个私有、静态的实例变量指向自己(类型是自己的类型);
c.定义一个公有、静态的访问方法getInstance()用于返回该类的唯一实例(注:
懒汉式需同步)。 3.分类:
a.饿汉式:在类装载的时候就进行实例化;
b.懒汉式:在公有、静态的访问方法(同步:用synchronized修饰)中进行实例化,
用的多一些。 实现1:
public class ConnectionFactory{
private static Connection conn;
private Connection(){
if(conn==null)
conn = new Connction();
}
public Connection getInstance(){
return conn;
}
}实现2:
public class ConnectionFactory{
private static Connection conn;
static{
conn = new Connection();
}
public static Connection getInstance(){
return conn;
}
}

static 静态的意思. 也就是说它修饰的变量是静态的,它单独占一个内存空间. 而且他只存在一个.所有修改的static 修饰的变量都是改的一个变量 比如i=1的时候. 你在a函数给i+1 i就是2.你在b函数再写i+1; i的值就会变成3,因为i在内存中只存在一个. 修饰方法也是一样的道理. 当你希望这个变量在整个程序中只存在一个的时候 就用 static 修饰 回答完毕!

对,是那样的,它类似全局变量,在程序开始到结束一直存在,,好占内存,个人建议少用


Avsta与MacAfe哪个杀毒比较好
mcafee比较好,它综合能力世界排名前十,占资源相对较小,监控防毒能力很强,可以允许用户编辑防御规则应对未知病毒的威胁,最大的亮点就是免费使用与升级 参考资料:http:\/\/ttxzz.com\/download\/18.html

mysta的水豚叫什么
mysta的水豚叫ava,因为读起来很可爱。mysta喜欢称呼自己养的水豚叫ava,在直播时还给粉丝表演怎么叫ava。

格莫拉第一季第1集开头车中那歌叫什么
格莫拉第一季第1集开头车中那歌叫:《A Storia E Maria》歌名:A storia e maria 歌手:Alexandre Desplat 所属专辑:Reality (Un film di Matteo Garrone)发行时间: 2012年10月02日 语言:意大利语 歌词:Sient amic chell ca te ric nun e truov ‘int e libr e storij e chisti v...

周中欧洲各大联赛的比赛结果?
Argentina Racing Club 0 - 1 Newell's Old Boys 2 Colón (Sta.Fe) 1 - 2 Gimnasia (LP) 2 Poland Cracovia 0 - 0 Legia Warszawa 2 GKS Belchatow 6 - 0 Górnik Leczna 2 Romania Jiul Petrosani 0 - 1 FC Gloria Bistrita 2 Belgium KSV Roeselare 3 - 1 Zulte-Waregem 2 Germany Schalke ...

闪电狗旅途中的英文歌
您好:歌曲: Sta Passando Novembre 歌手: Eros Ramazzotti,但是好听的英文歌好多呢~~~本人学英语的推荐这些吧希望你能喜欢。1、Bubbly--Colbie Caillat(你听过一遍就会非常喜欢的歌);2、Burning--Maria Arredondo;3、Happy--丽安娜 刘易斯;4、Cry On My Shoulder--出自德国选秀节目(很早的一首,...

求Giorno Dopo Giorno歌词
然后他们就会解决了他(?) 我曾在那些男人中寻找我的那个因为要跟男的相爱而背叛我妈妈的爸爸 2° RITORNELLO(第二段):Luca era gay e adesso sta con lei Luca parla con il cuore in mano luca dice sono un altro uomo 卢卡曾经是同性恋 现在和她在一起 卢卡用心讲述 卢卡说,(现在...

求Giorno Dopo Giorno歌词
) 我曾在那些男人中寻找我的那个因为要跟男的相爱而背叛我妈妈的爸爸 2° RITORNELLO(第二段): Luca era gay e adesso sta con lei Luca parla con il cuore in mano luca dice sono un altro uomo 卢卡曾经是同性恋 现在和她在一起 卢卡用心讲述 卢卡说,(现在)我是另一个男人 Luca ...

意大利语中的a有多少中用法?详细点吗?还有cio是什么?
aeroporto.Quando cominciamo a studiare l’italiano?Continusiamo a parlare in italiano.Sta là ad acoltare già da dieci minuti.14)用于“某些形容词的后面”,如:Lui rimane sempre fedele alla sua patria.L’Università di Pechino è molto vicina al Palazzo d’Estate.采纳我哦~~~...

StathisGavakis人物介绍
StathisGavakisStathisGavakis,主要作品《后门》。外文名:StathisGavakis职业:演员代表作品:《后门》合作人物:罗可斯·丹普罗波拉斯

景洪市15192708947: JAVA编程中static的用途与用法 -
滕倩京瑞: 1修饰符static1)静态类变量(修饰成员变量):1.Static int data语句说明data为类变量,为一个类的共享变量,是所有对象共享的,它不 属于任何对象,是属于整个类的(静态方法也是一样).2.Static定义的是一块为整个类共有的一块存储区...

景洪市15192708947: java中static的作用 -
滕倩京瑞: static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念.被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享.static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要.实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了.static前面加上其它访问权限关键字的效果也以此类推.

景洪市15192708947: java中的static有什么作用 -
滕倩京瑞: (1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能...

景洪市15192708947: 谁能告诉我static在java中的解释和具体的用法? -
滕倩京瑞: static就是声明的静态变量,下面是VB中的静态变量解释,他和JAVA中的是一样的:1. 静态局部变量 在局部变量的说明前再加上static说明符就构成静态局部变量. 例如: static int a,b; static float array[5]={1,2,3,4,5}; 静态局部变量属于静...

景洪市15192708947: java中静态代码块 static的作用 -
滕倩京瑞: 类加载的时候就会去执行静态代码块的内容.比如说:写连接数据库的那些内容时,经常有classforName("XXX"),用于加载一些东西,这些东西就可以写在静态代码块中.还有一些,你想让类加载时就执行的程序也可以放在里面.

景洪市15192708947: JAVA Static 的作用 -
滕倩京瑞: 作用有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象.通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例.在成员的声明前面加上关键字static(静...

景洪市15192708947: 请问java语言中的static的用法 -
滕倩京瑞: 1)static方法static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了.并且由于这个特性,在静态方法中不能访问类的...

景洪市15192708947: JAVA! static什么作用? -
滕倩京瑞: 是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,...

景洪市15192708947: Java中static是什么意思,有什么作用 -
滕倩京瑞: 静态的意思,在一个类中,成员变量用static修饰,作为这个类的公有属性成员方法用static修饰,可以不创建当前类的对象,直接用类名.方法名调用 且static修饰后,在内存中是在方法区里,一般工具类是全部静态修饰,用的频率较高

景洪市15192708947: java中static的用法 -
滕倩京瑞: 1.静态方法通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法声明为static的方法有以下几条限制:·它们仅能调用其他的static 方法.·它们只能访问static数据.·...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网