static 关键字的用法

1.static 关键字:

1)static修饰的变量(类变量)会被该对象所有的实例共享(包括子类)。在某个对象的所有实例的整个生命周期都只实例化一次,换句话说,静态变量是属于类,而不是属于对象(类的实例)。如果该关键字修饰的变量可见性为Public,则他的子类也共享该变量并可以对该变量进行更改,所以一般我都吧static变量设为private,如果要让其成为真正的全局变量可以用public 修饰。上节中如果改成public final double PI=3.14,则所有实例都可以共享该常量,且不能进行修改。即应用程序常量。

代码:

class Ball {
   privatestatic int count = 0;
   publicstatic int getCount (){
       returncount ;
   }
   publicBall(){
       count++;
   }
}
 
class Test  {
   public static voidmain(String[] args) {
       for (int i = 0;i < 10000;i++ ) {
           int number=(int)(Math.random()*10);
           if (number==7) {
               new Ball();
           }
           System.out.println("created:->"+Ball.getCount());
       }
   }
}


2)static修饰的方法,执行某个静态方法不需要实例化该类,可以直接使用类名.静态方法名访问该方法。

A.静态方法的限制:由于静态方法在被调用时不需要类的实例,所以调用静态方法时不存在类的实例变量和方法,所以使用静态方法不能引用类的实例变量和方法,静态方法可以访问静态成员和方法,在静态方法中也不能使用super和this关键字。由于静态方法在类进行实例化时就已经写到固定类存中,所以也不能被子类重写。

3)静态块(静态初始化器):在类加载时自动执行,目的在于初始化和分配整个生命周期类的资源(单例模式,属于类不属于任何一个实例,在类的实例化之前就已经初始化了静态成员(不包括非静态成员),这也是与构造函数不一样的地方)

A. 静态块没有名字:因为没有必要在类的定义外引用。

B. 静态块没有参数:因为静态块是在类加载时自动执行的,不需要参数。

C. 静态块没有返回类型:像构造函数一样,不需要返回值,所以最后写出的静态块样子类似如此 static{…………}

D. 如果不想让类加载时就执行该静态块但又不想让其他实例引用可以变换成一个私有静态方法,如: private static int initBall(){…………}.

E. 注意:JVM默认将静态块的大学限制为64K,因此不要再静态块中放入太多代码;不能从静态块中抛出被检查的异常,即不能使用try-catch块,这也是一个相对来说的缺点,(解决方法三种种,一是选择记录异常,并抛出RuntimeException的异常来终止当前线程;另一种是选择电泳System.exit()方法,然后这在托管环境中却行不通,这种选择通常在java程序中,另一种是设置标志来标识失败,在类的构造函数中裤检查标志的状态);测试静态块中的代码通常比较难。【static 块的应用环境常见的是在java程序中加载数据库驱动】。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值