`
lushuaiyin
  • 浏览: 676283 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中的static详解

 
阅读更多

果一个类成员被声明为static,它就能够在类的任何对象创建之前被访问,而不必引用任何对象。

static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static

声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量,

例如:声明一个static的变量count作为new一个类实例的计数。

声明为static的方法有以下几条限制:

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

2、它们只能访问static数据。

3、它们不能以任何方式引用this 或super。

如果你需要通过计算来初始化你的static变量,你可以声明一个static块

Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块:

public class UserStatic {

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 如何实现全局功能和全局变量的一个控制版本。

总结:
1、static成员是不能被其所在class创建的实例访问的。

2、如果不加static修饰的成员是对象成员,也就是归每个对象所有的。

3、加static修饰的成员是类成员,就是可以由一个类直接调用,为所有对象共有的。

Java Static:作为修饰符, 可以用来修饰变量、方法、代码块(但绝对不能修饰类)。


1、修饰变量:

类的所有对象共同拥有的一个属性,也称为类变量。这类似于C语言中的全局变量。类变量在类加载的时候初始化,而且只被初始化一次。在程序中任何对象对静态变量做修改,其他对象看到的是修改后的值。因此类变量可以用作计数器。另外,Java Static变量可以用类名直接访问,而不必需要对象。

2、修饰方法:

类的所有对象共同拥有的一个功能,称为静态方法。静态方法也可以用类名直接访问,而不必需要对象。所以在静态方法里不能直接访问非静态变量和非静态方法,在Static方法里不能出现this或者super等关键字。

3、修饰Java代码块:

用static去修饰类里面的一个独立的代码块,称为静态代码块。静态代码块在类第一次被加载的时候执行,而且只执行一次。静态代码块没有名字,因此不能显式调用,而只有在类加载的时候由虚拟机来调用。它主要用来完成一些初始化操作。

4、说说类加载:

JVM在第一次使用一个类时,会到classpath所指定的路径里去找这个类所对应的字节码文件, 并读进JVM保存起来,这个过程称之为类加载。

可见,无论是变量,方法,还是代码块,只要用static修饰,就是在类被加载时就已经"准备好了",也就是可以被使用或者已经被执行。都可以脱离对象而执行。反之,如果没有static,则必须通过对象来访问。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sniperwang/archive/2009/10/29/4744753.aspx

public class StraticMethod {
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);
}
//程序执行时,首先执行静态部分.对a,b(b=0,不设默认为零)赋初值.并且执行静态代码块部分.
//但是静态方法不被执行,但是其可以在不初始化对象的情况下被其它类调用.
}

以下我的代码,(非转载)

package com.statictest;

public class StaticTestClass {

	
	public static String ff="qq";
	public String ff2="qq2";
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StaticTestClass cc=new StaticTestClass();
		StaticTestClass.mainee("jjjkkk");
		
		System.out.println(cc.ff);
		System.out.println(StaticTestClass.ff);
	}
	
	public static void mainee(String ss) {
		//在static静态块中只能调用静态的变量和方法
		
		//在static静态块中调用静态的变量
		StaticTestClass.ff+=ss;
		//在static静态块中调用静态的方法
		StaticTestClass.sys2();
		
		//在static静态块中不能使用this!
//		this.
	}
	
	public void sys(){
		System.out.println("ll");
	}
	public static void sys2() {
		System.out.println("ll--static");
	}
	
	static{
		System.out.println("我最先被执行");
	}

}


输出:

我最先被执行
ll--static
qqjjjkkk
qqjjjkkk



分享到:
评论

相关推荐

    java技术:java中static作用详解

    java技术:java中static作用详解

    Duanxx的Java学习:关键字Static详解

    关键字Static就是为了满足上面提到的两种...当某一个变量或方法被声明为Static的时候,这个变量或方法就不再和任何一个类的实例对象绑定,即便没有创建任何一个实例对象,也可以方位Static的变量或者调用Static的方法

    java中static作用详解

    该文档介绍了java中static的作用,并详细的描述了static的不同用法,和含义 。

    java static详解.doc

    关于Java Static的详细讲解,讲的很彻底

    java static关键字详解(csdn)————程序.pdf

    java static关键字详解(csdn)————程序

    JAVA中static方法的用法实例详解

    主要介绍了JAVA中static方法的用法,结合实例形式较为详细的分析了Java中static方法的功能、使用技巧与相关注意事项,需要的朋友可以参考下

    static关键字详解

    static关键字详解: 内容摘要: 一、static关键字定义属性 二、static属性与非static属性还有一个最大的区别,所有的非static属性必须产生实例化对象之后才可以访问,但是static属性不受实例化对象的控制,也就是 说...

    java中staticclass静态类详解

    主要介绍了java中staticclass静态类详解,具有一定借鉴价值,需要的朋友可以了解下。

    Java 关键字static详解及实例代码

    主要介绍了Java 关键字static详解及实例代码的相关资料,需要的朋友可以参考下

    Java中static作用详解

    主要介绍了Java中static作用,static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,需要的朋友可以参考下

    java中static关键字用法详解

    主要为大家详细介绍了java中static关键字的用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Java开发详解.zip

    020510_【第5章:面向对象基础】_static关键字笔记.pdf 020511_【第5章:面向对象基础】_理解main方法笔记.pdf 020512_【第5章:面向对象基础】_代码块笔记.pdf 020513_【第5章:面向对象基础】_构造方法私有化笔记....

    JAVA断言技术详解

    JAVA断言技术详解,1、What will happen when you attempt to compile and run the following code? (Assume that the code is compiled and run with assertions enabled) 1. public class AssertTest 2. { 3. ...

    Java中的Static class详解及实例代码

    主要介绍了 Java中的Static class详解及实例代码的相关资料,在Java中我们可以有静态实例变量、静态方法、静态块。类也可以是静态的,需要的朋友可以参考下

    有关JAVA关键字详解

    JAVA关键字详解JAVA关键字详解JAVA关键字详解JAVA关键字详解JAVA关键字详解

    Java静态static关键字原理详解

    主要介绍了Java静态static关键字原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    final和static用法详解JAVA

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

    Java中static变量作用和用法详解

    Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问.下面我们来详细了解一下吧

    JAVA面试题 static关键字详解

    主要介绍了JAVA面试题 浅析Java中的static关键字,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java下static关键字用法详解

    Static关键字可以修饰什么?  从以下测试可以看出, static 可以修饰:  1. 语句块  2. 成员变量(但是不能修饰局部变量)  3. 方法  4. 接口(内部接口)  5. 类(只能修饰在类中的类, 即静态内部类)  6. ...

Global site tag (gtag.js) - Google Analytics