java static method_Java——static关键字

static方法:

1、定义:

《java编程思想》中提到:static方法就是没有this的方法,在static方法内部不能调用非静态方法,反过来是可以的,而且可以在没有创建任何对象的情况下,仅仅通过类本身来调用static方法,这实际上正是static方法的用途

2:概念:

static方法一般称作静态方法,由于静态方法不依赖于对象就可以访问,所以也就没有this,并且static修饰的方法不能调用非静态成员变量和非静态成员方法,但是非静态成员方法可以调用静态成员方法

static变量:

定义:

static变量也称为静态变量,静态变量和非静态变量的区别:静态变量是所有对象共享的,在内存中只存在一个副本,在类的初始化时加载,而非静态变量是对象特有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响

static代码块:

static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

类中的static:

1)子类是不继承父类的static变量和方法的。因为这是属于类本身的。

但是子类是可以访问的。

2)子类和父类中同名的static变量和static方法都是相互独立的,并不存在任何的重写的关系。

3)子类和父类中同名的实例变量都是相互独立的,并不存在任何的重写的关系。

代码:

class Parent {

public static int i = 1;

public int j = 10;

public static void staticMethod() {

System.out.println("Parent staticMethod run");

}

public void method() {

System.out.println("Parent method run");

}

}

class Son extends Parent {

public static int i = 2;

public int j = 20;

public static void staticMethod() {

System.out.println("Son staticMethod run");

}

public void method() {

System.out.println("Son method run,j=" + super.j);

}

}

public class StaticInheritDemo {

public static void main(String[] args) {

Parent child = new Son();

System.out.println(child.i);//

child.staticMethod();//

child.method();

System.out.println(child.j);

Son s = new Son();

System.out.println(s.i);

s.staticMethod();

child.method();

System.out.println(s.j);

}

}

运行结果:

1

Parent staticMethod run

Son method run,j=10

10

2

Son staticMethod run

Son method run,j=10

20

类的初始化顺序:

类的初始化顺序:静态成员的初始化只执行一次,实例成员每实例化一个对象都初始化一次,一个类中的初始化顺序,类内容(静态变量、静态初始化块) => 实例内容(变量、初始化块、构造方法)

两个具有继承关系类的初始化顺序 * 父类的(静态变量、静态初始化块) => 子类的(静态变量、静态初始化块)=>父类的(实例变量、实例初始化块、构造方法)=> 子类的(实例变量、实例初始化块、构造方法)

代码:

public class StaticInit {

public static void main(String[] args) {

new A();

System.out.println();

new B();

}

}

class A {

public A() {

System.out.println("Constructor A.");

}

{

System.out.println("Instance Block A.");

}

static {

System.out.println("Static Block A.");

}

}

/* 两个具有继承关系类的初始化顺序 * 父类的(静态变量、静态初始化块) => 子类的(静态变量、静态初始化块)=>

* 父类的(实例变量、实例初始化块、构造方法)=> 子类的(实例变量、实例初始化块、构造方法) */

class B extends A {

public B() {

System.out.println("Constructor B.");

}

{

System.out.println("Instance Block B.");

}

static {

System.out.println("Static Block B.");

}

}

运行结果:

Static Block A.

Instance Block A.

Constructor A.

Static Block B.

Instance Block A.

Constructor A.

Instance Block B.

Constructor B.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值