A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘国涛 中级黑马   /  2013-3-12 19:15  /  2215 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘国涛 于 2013-3-13 08:58 编辑

除了可以被类名直接调用和单例设计模式,还可以用在什么地方?具体怎么判断要不要把函数定义成静态?能不能举些例子?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

12 个回复

倒序浏览
工具类都要定义成静态的,这样使用起来方便,例子很简单,我用扳手,用完一次就不用了,没必要一直拿在手里,那样耽误我干别的活。
基本就是这样了,凡是所有对象都要使用的,有共同点的,这样一类的方法,就需要定义成静态了。
回复 使用道具 举报
静态方法是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象再使用该方法
静态方法最大的特点就是,不用生成类的实例对象,直接可以用。

它的语法格式:<类名|实例名>.<类变量名>  

Java中的静态方法中,在方法声明时前面要加static 修饰符。

例:
public class Test
{

public static void main(String[] args)
{
   SObject object1 = new Circle();
   SObject object2 = new Cylinder();

   displayobject(object1);
   displayobject(object2);

   }
static void displayobject(SObject object){
    if (object instanceof Cylinder){
     System.out.println(object.findArea());
    }
    else if(object instanceof Circle){
     System.out.println(object.findArea());
    }
   }
}

把displayobject()方法声明为static,在main里面就可以直接调用。

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
具体在什么时候用,就是你所要建立的许多对象都用到同一个功能,比如每个人都说一句话:你好,那么你就可以把说你好这个功能定义成一个静态的,因为静态就是在内存中只能有一份,所以不论你在new多少个人的对象,他们都有说你好的功能,但是这些对象的该功能在内存中只有一份,从而节省了内存,否则,你new几个对象,在内存中就有几个该功能,比较浪费内存空间
回复 使用道具 举报
要从两方面考虑:因为静态修饰的内容有成员变量函数(方法)
如果想让一个类的所有实例共享数据,就要使用静态变量(类变量)。(对象中的特有数据要定义成非静态存在堆内存中。)
当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。
举例:
  1. public class PersonDemo_2 {
  2.         public static void main(String[] args) {
  3. //                Person_2 p = new Person_2();
  4. //                p.show();//如果只是调用show()方法,楼上的创建对象将变的无意义。
  5.                 Person_2.show();//直接通过类名调用。
  6.         }
  7. }
  8. class Person_2{
  9.         String name;
  10.         public static void show(){//因为方法不访问name变量,所以需要修饰为static。
  11.                 System.out.println("Welcome to Java!");
  12.         }
  13. }
复制代码
我也是新人,如有错误请指出。

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
静态类 有叫工具类  咱们平常用的很多的console.write()之类的就是静态类
用的时候你要是需要实例化就用非静态的
静态类调用不用实例化  所以很方便
回复 使用道具 举报
虽然还没了解透彻,但也有一些收获,多谢上面几位的回答!!!
回复 使用道具 举报
张雪萍 发表于 2013-3-12 19:30
具体在什么时候用,就是你所要建立的许多对象都用到同一个功能,比如每个人都说一句话:你好,那么你就可以 ...

快去把技术方向加上,不然发帖等不给分的
回复 使用道具 举报
徐鸿燕 发表于 2013-3-12 19:39
要从两方面考虑:因为静态修饰的内容有成员变量和函数(方法)。
如果想让一个类的所有实例共享数据,就要 ...

请把技术方向加上,不然发帖不得分
回复 使用道具 举报
洪建超 发表于 2013-3-12 21:06
请把技术方向加上,不然发帖不得分

现在技术方向在哪里添加?- -!改版后不显示了。
回复 使用道具 举报
函数调用的结果不会访问或者修改任何对象(非static)数据成员,这样的成员声明为静态成员函数比较好。且如果static int func(....)不是出现在类中,则它不是一个静态成员函数,只是一个普通的全局函数,只不过由于 static 的限制,它只能在文件所在的编译单位内使用,不能在其它编译单位内使用。
静态成员函数的声明除了在类体的函数声明前加上关键字static,以及不能声明为const或者volatile之外,与非静态成员函数相同。出现在类体之外的函数定义不能制定关键字static。
静态成员函数没有this。
回复 使用道具 举报
徐鸿燕 发表于 2013-3-12 21:13
现在技术方向在哪里添加?- -!改版后不显示了。

恩,那就不用弄了
回复 使用道具 举报
关键是静态是类的属性,或者方法。所以我们要看这个属性和方法属于对象还是类,然后就可以判断是否可以静态了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马