黑马程序员技术交流社区
标题:
关于static
[打印本页]
作者:
1315317959
时间:
2015-5-31 10:33
标题:
关于static
什么时候该用static呢?
如果某个内容是所有对象共享的,就用静态修饰。
讲的时候挺明白的:(睡了一觉就挂了。
说说对这句话的理解,举个例子
作者:
东邪
时间:
2015-5-31 10:40
在你创建一个类的时候,你就要明确你这个类所包含的对象的属性,而对这些属性进行分析的时候,你要知道哪些属性只是共有,而哪些属性是共享的。就好比咱们在教室喝水,水杯是大家共有的,但饮水机是大家所共享的。当你换水杯的时候并不会影响到其他人的水杯,但是你弄坏了饮水机,别人就会对你有意见的~嘿嘿
作者:
曲终烟尽
时间:
2015-5-31 11:08
本帖最后由 曲终烟尽 于 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 11:33
本帖最后由 曲终烟尽 于 2015-5-31 12:00 编辑
class YinShuiJi{//定一个类叫做 饮水机
public static final String name="美帝牌饮水机";
public static final double totalMl;
public static final String color="蓝白色";
static
{
if(name=="格里牌饮水机")
{
totalMl=2000;
}
else
{
totalMl=3000;
}
}
private static double waterml ; //定义一个私有静态double型变量waterml 表示 饮水机里的水的剩余容量
private YinShuiJi(){};//私有化构造函数,不允许创建多个实例,一个教师只有一个饮水机,不能每个人都有一个
private static YinShuiJi ysj; //私有静态 饮水机类型变量 ysj用于保存本类的实例并提供给别人使用
public static YinShuiJi getInstance()//公开 静态 返回 饮水机类型 getInstance,该方法返回一个 饮水机类型的实例 ysj
{
if(ysj==null)
{
ysj=new YinShuiJi();
}
return ysj;
}
public void addWater(double waterml)
{
YinShuiJi.waterml+=waterml;
System.out.println("加了"+waterml+"ml水,现在有"+YinShuiJi.waterml+"ml水");
}
public void getWater(double waterml)
{
if(YinShuiJi.waterml>=waterml)
{
YinShuiJi.waterml-=waterml;
System.out.println("取走了"+waterml+"ml水,还剩"+YinShuiJi.waterml+"ml水");
}
else
{
System.out.println("水不够了,请加水.已经把最后"+YinShuiJi.waterml+"ml水给你了.现在没水了.");
YinShuiJi.waterml=0;
}
}
public String getName()
{
return YinShuiJi.name;
}
}
class Test
{
static
{
System.out.println("A");
}
public static void main(String[]args)
{
YinShuiJi ysj=YinShuiJi.getInstance(); //新建一个YinShuiJi类型的引用 ysj,指向 YinShuiJi.ysj 所指向的YinShuiJi类型实例
YinShuiJi ysj2=YinShuiJi.getInstance(); //新建一个YinShuiJi类型的引用 ysj2,指向 YinShuiJi.ysj 所指向的YinShuiJi类型实例, ysj和ysj2指向同一个 实例.
System.out.println(YinShuiJi.name);
System.out.println(ysj.totalMl);
ysj.addWater(1000);
ysj.addWater(1000);
ysj.getWater(500);
ysj2.getWater(500);
ysj2.getWater(1500);//这时水只剩1000ml,又取1500是取不出来的.最多取1000
<blockquote>}
复制代码
作者:
曲终烟尽
时间:
2015-5-31 11:35
本帖最后由 曲终烟尽 于 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获取实例就可以拿来用,我觉的可以叫 全局常量。
我这个例子也算是把 静态 函数,静态变量 都列举了一下。你看看研究研究。但这个例子不适合多线程使用,会有几率发生多次创建对象的危险。应该对创建对象进行 锁定。防止其他线程同时进入代码块。
作者:
Alina
时间:
2015-5-31 14:20
我也记不住{:2_30:}
作者:
18530919536
时间:
2015-5-31 15:14
就是,某个内容是所有对象共享的,就用static,不是就不用,记得太复杂了容易弄混
作者:
fecuznmn
时间:
2015-5-31 20:34
就是无论是对象1还是对象2或者是对象n都具备的属性,哪怕你不创建对象,只要本类的概念在那里,static的成员就在那里。所以说static修饰的成员是先于对象而存在的,是本类事物的共性。
作者:
zhangjnia
时间:
2015-5-31 21:30
不错,学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2