[java]static关键字的四种用法,java中static关键字有什么作用

  [java]static关键字的四种用法,java中static关键字有什么作用

  如何解决写爬虫IP受阻的问题?立即使用。

  (推荐教程:java入门)

  

一、static关键字的特点:

   P86 《Java编程思想》页上有这样一段话:

  虽然这段话只是说明了静态方法的特殊性,但是可以看出,static关键字的基本功能,一句话,描述为:

  不用创建对象就可以方便地进行调用(方法/变量)。

  显然,static关键字修饰的方法或变量不需要依赖对象进行访问,只要加载类,就可以通过类名进行访问。

  Static是一个修饰符,用来修改类的成员方法和变量。此外,可以编写静态代码块来优化程序性能。

  (视频教程推荐:java视频教程)

  1.静态修饰成员方法

  静态修改的方法一般称为静态方法。因为静态方法可以在没有任何对象的情况下被访问,所以静态方法不存在这个问题,因为它没有附加到任何对象。既然没有对象,就没有这个。而且由于这个特性,类的非静态成员变量和非静态成员方法都不能在静态方法中访问,因为这两个非静态成员方法/变量都必须依赖于特定的对象才能被调用。

  但是,需要注意的是,虽然不能在静态方法中访问非静态成员方法和变量,但是可以在非静态成员方法中访问静态成员方法/变量。例如:

  在上面的代码中,因为print2方法是独立于对象而存在的,所以可以通过类名直接调用。

  如果可以在静态方法中访问非静态方法/变量,那么如果main方法中有以下语句:

  my object . print 2();

  这个时候没有对象,str2根本不存在,所以会有矛盾。方法也是如此。因为不能预测print1方法中是否访问非静态成员变量,所以禁止在静态成员方法中访问非静态成员方法。

  对于非静态成员方法,访问静态成员方法/变量显然是无限制的。

  因此,如果要调用方法而不创建对象,可以将此方法设置为static。我们最常见的静态方法是main方法。至于为什么main方法一定是静态的,现在清楚了。因为程序在执行main方法时不创建任何对象,所以只能通过类名来访问。

  2.静态修改成员变量

  静态修改变量也称为静态变量。静态变量和非静态变量的区别在于,静态变量由所有对象共享,并且在内存中只有一个副本。当且仅当类第一次被加载时,它才会被初始化。非静态变量归对象所有,创建对象时初始化,有多个副本,每个对象拥有的副本互不影响。

  静态成员变量的初始化顺序根据定义的顺序进行初始化。

  3.静态修饰代码块

  static关键字在形成静态代码块以优化程序性能方面也起着重要的作用。静态块可以放在类中的任何地方,一个类中可以有多个静态块。当第一次加载类时,每个静态块将按照静态块的顺序依次执行,并且只执行一次。

  静态块可以优化程序性能,因为它的特点是:当类第一次被加载时,它只被执行一次。如下所示:

  类别人员{

  私人日期出生日期;

  公众人物(出生日期){

  this . birth date=birth date;

  }

  boolean isBornBoomer() {

  date start date=date . value of( 1946 );

  date end date=date . value of( 1964 );

  返回birth date . compare to(start date)=0 birth date . compare to(end date)0;

  }

  }isBornBoomer用于判断一个人是否出生于1946-1964年,每次调用isBornBoomer都会生成startDate和birthDate两个对象,造成空间浪费。如果改为以下形式,效率会更高:

  类别人员{

  私人日期出生日期;

  私有静态日期startDate,endDate。

  静态{

  start date=date . value of( 1946 );

  end date=date . value of( 1964 );

  }

  公众人物(出生日期){

  this . birth date=birth date;

  }

  boolean isBornBoomer() {

  返回birth date . compare to(start date)=0 birth date . compare to(end date)0;

  }

  }所以很多情况下,一些只需要执行一次的初始化操作会在静态代码块中执行。

  :

二、static关键字的误区

   1.与C/C中的static不同,Java中的static关键字不会影响变量或方法的作用域。在Java中,只有private、public和protected关键字可以影响访问权限。例子如下:

  错误,声明static关键字不会更改变量和方法的访问权限。

  2.虽然静态方法没有这个,但是我们可以在非静态方法中通过这个访问静态方法成员变量。如下所示:

  公共类测试{

  静态int值=11;

  公共静态void main(String[] args) {

  新测试()。print value();

  }

  私有void printValue() {

  int value=22

  system . out . println(this . value);

  }

  }输出结果是:11

  这里表示当前对象,所以如果new Test()调用printValue,当前对象就是new Test()生成的对象。而静态变量是被对象享用的,所以printValue中this.value的值无疑是11。printValue方法内部的值是一个局部变量,根本不能与之关联,所以输出11。记住:虽然静态成员变量独立于对象,但并不意味着不能通过对象访问它们。所有静态方法和变量都可以通过对象访问(只要权限足够)。

  3.在C/C中,static关键字可以作用于局部变量,但在Java中不允许使用static修改局部变量。这是Java语法的规则。

  更多编程知识请访问:编程教学!上面这个java静态关键字的作用是什么?更多详情请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: