黑马程序员技术交流社区
标题: static关键字 [打印本页]
作者: xuchulong1 时间: 2012-11-7 20:04
标题: static关键字
static关键字常常使用,但是突然想一下,java里面的static关键字有什么作用,为什么要有这个关键字,main()函数为什么要申明成static的???
作者: 古银平 时间: 2012-11-7 20:09
看下这个帖子:http://bbs.itheima.com/thread-8121-1-1.html
作者: 徐军涛 时间: 2012-11-7 20:23
为什么main函数要声明成static
因为main函数时程序的入口,可以不用创建所在类的对象(节省空间),直接通过类名就能调用
Static作用:
1, 创建对象时,如果每个对象都有共同的内容,这时,为了节省内存,这些共同的内容就需要被static修饰,被所有对象所共享。
2, 静态修饰的,先于对象存在,随着类的加载而加载,随着类的消失而消失,可以减小生命周期
作者: xuchulong1 时间: 2012-11-7 20:40
古银平 发表于 2012-11-7 20:09 
看下这个帖子:http://bbs.itheima.com/thread-8121-1-1.html
看了这个帖子还是收获挺多的,以前在main()方法里要用类中得某个变量或者方法的时候就去改那个变量,改成static,也没有考虑过用这个的弊端and好处,现在比较明白了,作下小总结,也帮自己巩固下:1 声明的变量(方法)生命周期过长(这导致一定的资源浪费) 2:访问出现局限性(静态只能访问静态)其实后面这一点我们大家都知道,只是有时候不会总结吧。
那什么情况下我们要去申明静态变量:
1:某个数据需要共享
2:方法中没有对象变量的时候 且这个方法想提高复用性并且很多对象使用就可以 使用静态去修饰这个方法。(拷贝的原话,理解下就是 这个方法如果使用别的变量的时候就需要把那些变量都设置成为 static,那就造成了资源的浪费了,static的方法可以供外部使用,所以如果这个方法复用很多的话考虑设为static 满足上述两个条件,那把它设为static无疑是最好的)
作者: 刘文飞 时间: 2012-11-7 21:13
使用static修饰的方法和变量都具有唯一性,属于类,而不是每个对象共有。
作者: 崔利鹏 时间: 2012-11-7 21:16
static关键字告知编译器main函数是一个静态函数,如果main()方法没有使用static修饰符,那么编译不会出错,但是如果你执行程序将会报错,提示你main()方法不存在。因为包含main()的类并没有实例化,所以其main()方法也不会存。而使用static修饰符则表示该方法是静态的,不需要实例化即可使用。
作者: 李刚 时间: 2012-11-9 17:12
1.static变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
2.static方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
3.static代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
作者: 初艳春 时间: 2012-11-18 20:34
本帖最后由 星星 于 2012-11-18 20:44 编辑
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。被static修饰的成员变量和成
员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java 虚拟机就能根据类名在运行时数据区的方法区内定找
到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对
象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。
main()函数是程序执行的入口。为了能够在程序的开始执行main方法,必须将其声明为静态,在main方法中调用的成员也必须是静态的,除非建立过相应的实例。
作者: 陈军 时间: 2012-11-20 10:56
其实最主要的原因还是java的类加载机制。
我的理解:
我们都知道static成员属于类,生命周期随着类。
所以Java类加载器加载类的时候,static成员就可以自动加载,所以程序入口静态main()方法就加载了。
如果main()函数是非static 。就无法加载(或者说难道你让类加载器加载的时候去建立对象?)。
我建议LZ别执拗这种问题。你学多了。自然就懂了。
或者说等以后学深了,应用深了。才去研究JVM的各种机制。
作者: 花伟昌 时间: 2012-12-31 00:20
static(静态) 关键字的作用:用于修饰成员(成员变量和成员函数);被修饰的数据属于共享数据,可以被类直接调用.
static 修饰的成员变量和成员函数称为:静态变量或类变量、静态函数。既可以由对象调用,也可以使用类来调用。如:类名.静态变量或静态函数。
static代码块也称为:静态代码块,可以用来初始化类,随着类的加载而执行,且只执行一次。
主函数是静态的,所以必须要用static关键字。
注意:1,在静态函数中,只能访问静态变量或静态函数;而在非静态函数中,既可以访问静态变量或函数,也可访问非静态变量或函数。
2,静态方法中不能使用this和super关键字。
3,主函数是程序的入口,static优先于对象存在,而JVM又是通过类来调用主函数的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |