黑马程序员技术交流社区

标题: 什么时候才使用静态呢? [打印本页]

作者: tf996268809    时间: 2014-2-21 23:28
标题: 什么时候才使用静态呢?
老师说静态随着类的加载而加载,那什么时候使用,既然可以  类型.调用  为什么方法不都设成静态
作者: 絮缘小默    时间: 2014-2-22 00:34
静态成员表示的是类本身的,非静态是属于实例的,不同的实例拥有相同的静态属性,但是不一定拥有相同的非晶态属性
作者: 松涛小玮    时间: 2014-2-22 00:41
首先面向对象 各个对象本来就有共性和非共性的特点 共性可以用静态来  但各自特性就不可能静态了  这是现实的需要  符合现实事物的特征 不可能高度共性 再有 如果所有方法都要是静态的话  怎么来调用自身特有的非静态方法    这样对象事物岂不千篇一律  那还有百花齐放 白家争鸣的特点   在一个就是静态  内存占用大  影响效率了吧  自己理解的
作者: sgs_gzy    时间: 2014-2-22 00:43
静态方法不需要new对象,可以直接通过类名调用,但是如果都设成静态的话,就不能够调用非静态的方法和变量,但是非静态方法却可以调用静态方法和变量,还有就是静态方法中不能使用this和super关键字。我刚学不久,纯属个人看法,希望共同学习!
作者: 徐芾清    时间: 2014-2-22 10:24
我觉得有三个原因:
1、静态字段、方法本身的限制:每个对象都有不同的属性值,静态无法实现
2、静态会占用过多的内存空间
3、静态方法只能引用静态方法,字段,使得静态的使用受到了限制
作者: xiaochen33520    时间: 2014-2-22 10:49
当一个类中的成员变量需要被其他类所共享时,你就把类中的这个成员变量变成static的。
而一个类中的成员方法在调用静态成员变量时就需要把这个成员方法设成static;当这个类中的成员方法不需要访问成员变量时也可以把这个方法设成static.

作者: 苏小惠    时间: 2014-2-22 10:59
静态有两种:静态方法和静态属性。静态方法和属性优点:随着类的加载而加载,不需要创建对象。使用情况:静态属性:需要属性共享时,可用;静态方法:不需要涉及到对象中的特有数据时可用。静态方法注意:1.静态方法只能调用相关静态资源。2.非静态的可以使用静态资源
作者: skyname    时间: 2014-2-22 13:24
在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。
例如:public static int maximum(int n1,int n2)
使用类的静态方法时,注意:
1、在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。
这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。
2、静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生
3、静态变量是属于整个类的变量而不是属于某个对象的,注意不能把任何方法体内的变量声明为静态,例如:fun(){
    static int  num=0; //非法的


作者: osully    时间: 2014-2-22 13:45
刚学到静态,顺便帮自己复习一下.
优点:
1.有共性的数据静态后可以节省空间.
2.可以直接被类名调用.
缺点:
1.生命周期过长
2.访问局限性.(只能访问静态)
作者: 浅一蓝    时间: 2014-2-22 14:26
      什么时候使用静态方法:
  静态方法与一般方法在使用上是有所区别的
  静态方法可以不需要建立类的实例就可以直接调用
  但是一般方法需要建立实例
  
作者: swqsljy    时间: 2014-2-22 19:45
java 里的静态可以说就是全局变量,它是属于类的,类存在它就已经存在了,方法也是一样,静态方法里面使用到的外部变量只能是静态变量,静态方法可以不需要建立类的实例就可以直接调用
但是静态方法内部只能使用静态变量,而静态变量是属于类的, 如果都是静态方法那么这个类就没有实力化的必要.所以一般的工具类才使用较多的静态方法
作者: 徐青松    时间: 2014-2-22 23:28
能调用类的方法的就两种方式:一种类名调用,即类名.方法,但是这个要求方法必须是静态的。第二种就是常见的,建立类的对象进行调用。静态代码在加载时是进入static代码去,不和对象属性一样是在另一个堆区。静态代码属于类是所有类对象的共性,占内;,对象属性(非静态)属于具体对象,是具体对象的特性。使用的时候看你自己的需求了,特性用非静态,共性用静态。
作者: 张继鲁    时间: 2014-2-23 10:55
本帖最后由 张继鲁 于 2014-2-24 11:04 编辑

    当静态修饰的内容有成员变量和函数。
    当对象中出现共享数据时,该数据被静态所修饰。
    对象中的特有数据要定义成飞静态存在于堆内存中。

作者: chenfc8578    时间: 2014-2-23 23:26
因为绝大部分类不可能只有一个对象,如果把类的成员都定义成静态的话,多个对象就要共用一个成员了。
作者: 明天你好    时间: 2014-2-25 16:20
因为有动态的啊




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