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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1315317959 中级黑马   /  2015-5-31 10:33  /  544 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么时候该用static呢?
                如果某个内容是所有对象共享的,就用静态修饰。
讲的时候挺明白的:(睡了一觉就挂了。
说说对这句话的理解,举个例子

9 个回复

倒序浏览
在你创建一个类的时候,你就要明确你这个类所包含的对象的属性,而对这些属性进行分析的时候,你要知道哪些属性只是共有,而哪些属性是共享的。就好比咱们在教室喝水,水杯是大家共有的,但饮水机是大家所共享的。当你换水杯的时候并不会影响到其他人的水杯,但是你弄坏了饮水机,别人就会对你有意见的~嘿嘿

点评

谢谢 - - 不过你最后笑的有点荡漾  发表于 2015-5-31 11:29
回复 使用道具 举报
本帖最后由 曲终烟尽 于 2015-5-31 11:34 编辑

输出:
A
B
加了1000.0ml水,现在有1000.0ml水
加了1000.0ml水,现在有2000.0ml水
取走了500.0ml水,还剩1500.0ml水
取走了500.0ml水,还剩1000.0ml水
水不够了,请加水.已经把最后1000.0ml水给你了.现在没水了.
回复 使用道具 举报
本帖最后由 曲终烟尽 于 2015-5-31 12:00 编辑
  1. class YinShuiJi{//定一个类叫做  饮水机
  2.         public static final String name="美帝牌饮水机";
  3.         public static final double totalMl;
  4.         public static final String color="蓝白色";
  5.         static
  6.         {
  7.        
  8.                 if(name=="格里牌饮水机")
  9.                 {
  10.                         totalMl=2000;
  11.                 }
  12.                 else
  13.                 {
  14.                         totalMl=3000;
  15.                 }
  16.         }
  17.        
  18.        
  19.        
  20.         private static double waterml ; //定义一个私有静态double型变量waterml 表示 饮水机里的水的剩余容量
  21.         private YinShuiJi(){};//私有化构造函数,不允许创建多个实例,一个教师只有一个饮水机,不能每个人都有一个
  22.         private static YinShuiJi ysj; //私有静态 饮水机类型变量 ysj用于保存本类的实例并提供给别人使用
  23.         public static YinShuiJi getInstance()//公开 静态 返回 饮水机类型 getInstance,该方法返回一个 饮水机类型的实例  ysj
  24.         {
  25.                 if(ysj==null)
  26.                 {
  27.                         ysj=new YinShuiJi();
  28.                 }
  29.                 return ysj;
  30.         }
  31.         public void addWater(double waterml)
  32.         {
  33.                         YinShuiJi.waterml+=waterml;
  34.                         System.out.println("加了"+waterml+"ml水,现在有"+YinShuiJi.waterml+"ml水");
  35.         }
  36.         public void getWater(double waterml)
  37.         {
  38.                 if(YinShuiJi.waterml>=waterml)
  39.                 {
  40.                         YinShuiJi.waterml-=waterml;
  41.                         System.out.println("取走了"+waterml+"ml水,还剩"+YinShuiJi.waterml+"ml水");
  42.                 }
  43.                 else
  44.                 {
  45.                         System.out.println("水不够了,请加水.已经把最后"+YinShuiJi.waterml+"ml水给你了.现在没水了.");
  46.                         YinShuiJi.waterml=0;
  47.                 }
  48.        
  49.         }
  50.        
  51.         public String getName()
  52.         {
  53.                 return YinShuiJi.name;
  54.         }
  55. }
  56. class Test
  57. {
  58.         static
  59.         {
  60.                 System.out.println("A");
  61.         }
  62.           public static void main(String[]args)
  63.         {
  64.                   YinShuiJi ysj=YinShuiJi.getInstance(); //新建一个YinShuiJi类型的引用 ysj,指向 YinShuiJi.ysj 所指向的YinShuiJi类型实例
  65.                   YinShuiJi ysj2=YinShuiJi.getInstance(); //新建一个YinShuiJi类型的引用 ysj2,指向 YinShuiJi.ysj 所指向的YinShuiJi类型实例, ysj和ysj2指向同一个  实例.
  66.                   System.out.println(YinShuiJi.name);
  67.                   System.out.println(ysj.totalMl);
  68.                   ysj.addWater(1000);
  69.                   ysj.addWater(1000);
  70.                   ysj.getWater(500);
  71.                   ysj2.getWater(500);
  72.                   ysj2.getWater(1500);//这时水只剩1000ml,又取1500是取不出来的.最多取1000
  73. <blockquote>}
复制代码

回复 使用道具 举报
本帖最后由 曲终烟尽 于 2015-5-31 11:38 编辑

浏览器问题还是贴吧问题,我改了3次,2L的帖子每次改完发表回复代码就不见了。!!!改4L,不敢改3L
  • public static final String name="美帝牌饮水机";
  •         public static final double totalMl=3000;
  •         public static final String color="蓝白色";
这3句都定义了 public 常量 静态类型。


在其他类中可以直接使用不需要创建实例,不需要用getInstance获取实例就可以拿来用,我觉的可以叫 全局常量。


我这个例子也算是把 静态 函数,静态变量 都列举了一下。你看看研究研究。但这个例子不适合多线程使用,会有几率发生多次创建对象的危险。应该对创建对象进行 锁定。防止其他线程同时进入代码块。
回复 使用道具 举报
我也记不住{:2_30:}
回复 使用道具 举报
就是,某个内容是所有对象共享的,就用static,不是就不用,记得太复杂了容易弄混
回复 使用道具 举报
就是无论是对象1还是对象2或者是对象n都具备的属性,哪怕你不创建对象,只要本类的概念在那里,static的成员就在那里。所以说static修饰的成员是先于对象而存在的,是本类事物的共性。
回复 使用道具 举报
不错,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马