java填空题在⾮静态成员⽅法中_Java关键字(1)——static static常见的知识图解
static关键字的⽤途
⽅便在没有创建对象的情况下来进⾏调⽤(⽅法/变量)。
  很显然,被static关键字修饰的⽅法或者变量不需要依赖于对象来进⾏访问,只要类被加载了,就可以通过类名去进⾏访问。
  static可以⽤来修饰类的成员⽅法、类的成员变量,另外可以编写static代码块来优化程序性能。
1)static⽅法
tatic⽅法⼀般称作静态⽅法,由于静态⽅法不依赖于任何对象就可以进⾏访问,因此对于静态⽅法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态⽅法中不能访问类的⾮静态成员变量和⾮静态成员⽅法,因为⾮静态成员⽅法/变量都是必须依赖具体的对象才能够被调⽤。
2)static变量
  static变量也称作静态变量,静态变量和⾮静态变量的区别是:静态变量被所有的对象所共享,在内存中只有⼀个副本,它当且仅当在类初次加载时会被初始化。⽽⾮静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
  static成员变量的初始化顺序按照定义的顺序进⾏初始化。
3)static代码块
  static关键字还有⼀个⽐较关键的作⽤就是 ⽤来形成静态代码块以优化程序性能。static块可以置于类
中的任何地⽅,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执⾏每个static块,并且只会执⾏⼀次。
static关键字的误区
1.static关键字会改变类中成员的访问权限吗?
Java中的static关键字不会影响到变量或者⽅法的作⽤域。在Java中能够影响到访问权限的只有private、public、protected(包括包访问权限)这⼏个关键字。
2.能通过this访问静态成员变量吗?
在这⾥永远要记住⼀点:静态成员变量虽然独⽴于对象,但是不代表不可以通过对象去访问,所有的静态⽅法和静态变量都可以通过对象访问(只要访问权限⾜够。
3.static能作⽤于局部变量么?
static是不允许⽤来修饰局部变量
static关键字常见问题
static修饰的变量
1.下⾯这段代码的输出结果是什么?
public class Test extends Base{  static{ System.out.println("test static"); }  public Test(){ System.out.println("test constructor"); }  public static void main(Stri
jvm加载类的过程:加载⼦类之前会先加载⽗类的,⽗类中存在static块,会先执⾏static块。加载完⽗类后会加载⼦类,⼦类中存在static 块,会先执⾏static块。
2.这段代码的输出结果是什么?
public class Test { Person person = new Person("Test"); static{ System.out.println("test static"); }  public Test() { System.out.println("test constructor"); }  pu
jvm加载类的过程:⾸先加载Test类,因此会执⾏Test类中的static块。加载⼦类之前会先加载⽗类的,⽗类中存在static块,会先执⾏static块。加载完⽗类后会加载⼦类,⼦类中存在static块,会先执⾏static块。
3. static块可以出现类中的任何地⽅(只要不是⽅法内部,记住,任何⽅法内部都不⾏),并且执⾏是按照static块的顺序执⾏的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。