黑马程序员技术交流社区

标题: 求大神们能帮我解答下static方法的应用 [打印本页]

作者: cai937346660    时间: 2015-5-16 17:51
标题: 求大神们能帮我解答下static方法的应用
真心求教
作者: kingowe    时间: 2015-5-16 17:57
        static 方法
       
        。用 static 声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它, 所以在 static 方法中不可以访问非 static 成员,
       
        。static 方法不再是针对于某个对象调用,所以不能访问非静态成员。而且对于 static声明的方法 并不需要对象来调用,可以直接使用  类名.static方法名(参数列表)  的方式来调用(该static方法中不可以有非static成员)。       

        。非 static 方法可以访问 static 成员(方法和变量),static方法 不可以访问 非static 成员,因为 非static 成员必须有对象被创建才能访问,而 static成员 属于类 可以直接用 classname. 的方式来访问

        。 非静态方法必须创建对象才能访问非静态成员。静态方法可以不创建对象,直接访问静态成员,也可以通过创建对象来访问。

        。static成员 随着类的产生而产生,而 非static成员 只有产生了对象才会产生,如果没有创建对象,则 非static 成员在内存中不存在,

        。static方法中不可以有 this、super 关键字,
       
        ?什么时候需要定义 static 变量
               
             。当对象中出现共享数据(而非属性)时,该数据被修饰为 static, 对象中的特有数据要定义成非静态

        ?什么时候需要定义 static 方法

             。当方法内部没有访问到非静态数据
             

作者: 油炸电视剧    时间: 2015-5-16 18:28
静态方法只能继承,不能重写。
作者: xingfeichen    时间: 2015-5-16 19:06
1,        static关键字用法(优化内存,不占用堆内存)
a)        是一个修饰符,用于修饰成员(成员变量)
b)        被修饰的成员就不再堆内存中了,而在方法区(专门用于存放类中的方法和静态成员)
c)        静态修饰的内容被所有对象所共享
d)        当成员被静态修饰后,就多了一个调用方式,除了被对象对用外,还可以直接用类名进行调用
e)        不同对象的特有数据,必须放在对象中,不能用static修饰
f)        静态是先存在的,对象是后存在的才
2,        实例变量p"(A p=new A())"和类变量的区别
a)        存放位置
i.        类变量随着类的加载而存在方法区中
实例变量(成员变量)随着对象的建立而存在于堆内存中
b)        生命周期
i.        类变量声明周期最长,随着类的消失而消失
ii.        实例变量声明周期随着对象的消失而消失
3,        静态的使用注意对象
a)        静态方法只能访问静态方法或静态成员变量
b)        非静态可以访问静态或者非静态
c)        静态方法中不能定义this,super关键字
因为静态优先于对象存在,所以静态方法中不能出现this
4,        静态的利弊
a)        利:对对象的共享数据进行单独空间的存储,节省内存空间,可以被类名直接调用。
b)        弊:声明周期过长,访问出现局限性(静态只能访问非静态)。




作者: gainn    时间: 2015-5-16 22:11
简单的说,你想要通过类名+方法名就可直接调用的方法就可以加static修饰,前提是这个方法不能调用了非静态的成员变量。

修饰变量的话就更简单了,被所有对象都共享的变量就加static。
作者: gzp123    时间: 2015-5-16 22:21
当对象中出现共享数据(而非属性)时,该数据被修饰为 static, 对象中的特有数据要定义成非静态
简单的说,你想要通过类名+方法名就可直接调用的方法就可以加static修饰,前提是这个方法不能调用了非静态的成员变量。

修饰变量的话就更简单了,被所有对象都共享的变量就加static。
作者: 灯火通明    时间: 2015-5-16 22:25
关键点是 静态的东西 是存储在 方法区中的 。。而不是在堆
理解了这点  就能明白为什么静态内容是随class文件加载而加载
静态内容 直接通过类名即可调用
作者: sss18310878521    时间: 2015-5-16 22:34
静态方法首先只能访问静态成员,由于它可以直接被类名访问,那么,我们在实际应用中如果没必要再因为要调用该方法而去创建一个新的对象,从而节省内存
作者: 陈明佳    时间: 2015-5-17 07:39
方便调用,优先于对象存在




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