java中的static关键字使用

static修饰类

普通类是不允许声明为静态的,只有内部类才可以。

静态内部类的使用

  • 要给内部类的定义静态成员,必须要使用静态内部类
  • 在没有外部类的对象的情况下,可以创建静态内部类的对象
  • 它不能直接使用外部类的非static成员变量或者方法
  • 不能在静态内部类中写抽象方法

静态内部类中可以写哪些内容

1)匿名代码块

2)静态代码块

3)静态变量和非静态变量

4)静态方法和非静态方法

外部类如何调用静态内部类中的属性和方法

1)外部类可以通过创建静态内部类实例的方法来调用静态内部类的非静态属性和方法

2)外部类可以直接通过“ 外部类.内部类.属性(方法)” 的方式直接调用静态内部类中的静态属性和方法

静态内部类如何调用外部类的属性和方法

1)静态内部类可以直接调用外部类的静态属性和方法

2)静态内部类可以通过创建外部类实例的方法调用外部类的非静态属性和方法

如何创建静态内部类实例

1)在非外部类中:外部类名.内部类名 name = new 外部类名.内部类名();

2)在外部类中:内部类名 name = new 内部类名();

static修饰方法

非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员

静态方法可以被继承但是不能被覆盖。

(解释:

首先明确一点,在子类中重写父类的static方法,是不会报错的,编译也可以通过,但是在通过一个声明为父类,实际类型为子类的引用变量调用该方法时,发现被调用的仍是父类中原本以为会被覆盖的方法,不具有“多态”特性。而如果使用声明为子类的的引用变量调用同名的静态方法时,被调用的是子类中的方法

生命周期(Lifecycle)

静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭。

非静态方法(Non-Static Method)又叫实例化方法,属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当实例对象被JVM 回收之后,也跟着消失。

在内存中存储位置

静态方法和静态变量创建后始终使用同一块内存,是连续的。

非静态方法会存在于内存的多个地方,是离散的。

效率

静态方法的使用效率比非静态方法的效率高。

线程安全

静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发(Concurrence)的问题。

非静态方法是针对确定的一个对象的,所以不会存在线程安全的问题。

使用范围

静态方法:

⒈ 有静态属性的类,一般会定义静态方法。

⒉ 没有属性的类,一般会定义静态方法。

⒊ 如果一个方法与他所在类的实例对象无关,那么它就应该是静态的。

static修饰变量

被static修饰的成员变量叫做静态变量,也叫做类变量,说明这个变量是属于这个类的,而不是属于是对象。

没有被static修饰的成员变量叫做实例变量,说明这个变量是属于某个具体的对象的。

java中静态变量只能定义在类的内部,不可以定义在静态块或方法中。

可以在类内部定义静态变量,在静态块中进行初始化操作,因为类的内部是不允许有操作语句存在的。

补充:关于final

非静态方法能够存取final变量, 但是final变量必须被初始化。 final变量初始化方式有两种:
第一种: 声明时初始化
第二种: 将其声明为静态final变量, 使用static{}静态初始化程序进行初始化(她会在其他程序可以使用该类之前就执行)

非静态/静态方法中可以传递静态 [static]final变量和final变量的参数

public class Foo5{
    static final int x = 12; //静态final变量, 相当于常数
    public void go(final int x){  //方法形式参数, final变量
        System.out.print(x);
}

public static void main(String[] args){
    Foo5 foo = new Foo5();
    foo.go(5); //传入5
}
}

这个类中, 非静态方法go的参数为final的int型变量, 它被输出语句输出。
注意这里输出的 x为 调用go方法的对象foo传入的实际参数5, 而不是实例变量中的12.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值