黑马程序员技术交流社区

标题: static [打印本页]

作者: 罗忠文    时间: 2012-11-25 13:08
标题: static
static 方法有什么作用啊
作者: 崔利鹏    时间: 2012-11-25 13:10
是静态修饰符,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。
在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static声明的
作者: yingying    时间: 2012-11-25 13:16
[类中定义的变量是成员变量,也称为实例(对象)变量。如果该变量被static修饰,称静态变量,也称为类变量。]


1,它是一个修饰符,用于修饰成员(成员变量和成员函数)

2,被静态修饰后的成员变量,可以被对象共享。

3,静态优先于对象存在。

4,对于静态成员,除了对象可以访问之外,还可以被类名直接访问。

类名.静态成员

5, 静态随着类的加载而加载,随着类的消失而消失。

6, 对象特有的数据存储到对象的堆内存中。

7, 对象的共享数据存储在方法区的静态区中。


特点:(栈内存只是方法的运行区,而方法真正是存在于方法区中或叫数据共享区中的,随着类的一加载方法就已经进了方法区。方法区中有个静态区,用来存放静态属性和静态方法既能被对象调用也可被类名调用,如果没有创建对象就只能被类名调用。所以静态属性和方法是优先于对象存在的)(非静态方法只能被对象调用)

静态什么时候用?

1,静态变量。

当对象中的数据都相同时。就将该数据定义成静态的。

被所有对象共享即可。没有必要每一个对象都存储一份,那样只是浪费空间。

2,静态函数。

如果函数中没有访问到对象中的特有数据。

那么该函数需要被静态修饰。不需要创建对象,就可以通过类名    访问该函数了。

静态代码块:(随着了类的加载而执行,且只执行一次,用于给类进行初始化,可以通过静态代码块来验证类是否被加载)

静态代码块      static

{

System.out.println("B");

}

【构造代码块用于给所有对象进行初始化】

成员变量和静态变量的区别:

1,在内存空间存储的位置。

成员变量存储于对象所在堆内存中。

静态变量存储方法区的静态区中。

2,生命周期。

成员变量随着所属对象的建立而出现,随着所属对象变成垃圾被         回收而消失。静态变量随着所属的类加载而出现,随着类的消失而消失 。

3,调用方式。

成员变量只能被对象调用。

静态变量既可以被对象调用,也可以被类名调用。

4,数据体现。

成员变量的值称为对象中的特有数据。

静态变量的值称为对象中的共享数据。

静态使用的注意事项:

1,静态方法只能访问静态成员(所以静态虽然多了一种用类名调用  的方式,但是也出现了访问的局限性)。

非静态方法既可以访问静态又可以访问非静态。

因为非静态们,都所属于对象。

2,静态方法中不可以出现this,super关键字。

因为this代表对象,static方法存在时还没有对象呢.

3,主函数是静态的。

作者: 罗忠文    时间: 2012-11-25 13:21
崔利鹏 发表于 2012-11-25 13:10
是静态修饰符,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译 ...

什么东西啊。没有看懂
作者: 罗忠文    时间: 2012-11-25 13:23
yingying 发表于 2012-11-25 13:16
[类中定义的变量是成员变量,也称为实例(对象)变量。如果该变量被static修饰,称静态变量,也称为类变量。] ...

说说在内存种对象是怎访问静态方法和成员的
作者: 雷剑腾    时间: 2012-11-25 13:23
总结性地说:static是一个修饰符。用于修饰成员变量和成员函数。成员被其修饰后,就多了一种调用方式,即类名.静太成员。
被static修饰后,被修饰的会随着类的加载而加载。而且被所有对象所共享,达到了节省内存。其优先于对象而存在。
作者: yingying    时间: 2012-11-25 13:39
罗忠文 发表于 2012-11-25 13:23
说说在内存种对象是怎访问静态方法和成员的

静态的东西,多了一种访问方式,就是用类名和对象都可以直接访问,
作者: 罗忠文    时间: 2012-11-25 13:47
谢谢还是没有明白
作者: 聽聽我dē❤    时间: 2012-11-25 13:53
是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。这样做有什么意义呢?
在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static声明的(在这里所讲排除了类的访问控制),例如:
未声明为static
class ClassA{
int b;
public void ex1(){

}
}
class ClassB{
void ex2{
int i;
ClassA a = new ClassA();
i = a.b; //这里通过对象引用访问成员变量b
a.ex1; //这里通过对象引用访问成员函数ex1
}
}

声明为static
class ClassA{
static int b;
static void ex1(){

}
}
class ClassB{
void ex2{
int i;
i = ClassA.b; //这里通过类名访问成员变量b
ClassA.ex1; //这里通过类名访问成员函数ex1
}
}
通过以上两种比较,就可以知道static用来修饰类成员的主要作用了,在java类库当中有很多类成员都声明为static,可以让用户不需要实例化对象就可以引用成员,最基本的有Integer.parseInt(),Float.parseFloat()等等用来把对象转换为所需要的基本数据类型。这样的变量和方法我们又叫做类变量和类方法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2