关于java:详细介绍java关键字static的使用

37次阅读

共计 1710 个字符,预计需要花费 5 分钟才能阅读完成。

具体介绍 java 关键字 static 的应用

大家好,这里是可傥。继 final 关键字之后,明天介绍 static 关键字。
static 关键字,意思为动态的。在 java 中,润饰变量(不可为局部变量,局部变量生命周期随着办法的完结而完结,而 static 润饰的是全局),办法,结构动态代码块,润饰类(为外部类),jdk1.5 之后的动态导包(可读性较差)如何应用呢?咱们别离来介绍。

一、润饰变量

static 润饰变量的时候,也能够叫做类变量或者动态变量。与非 static 润饰的实例变量不同的是,类变量属于类,为所有对象共有。而实例变量属于对象,为该对象公有。那如何了解呢?在 jdk8 之前,动态变量是寄存于永恒层的,jdk1.8 之后,动态变量寄存于堆。在类加载阶段,动态变量就曾经生成且惟一。举例,现有一个 Animal 类,有动态变量为 name,以及非动态变量 weight。new a1 和 a2 为两个 Animal 对象。其变量归属如下图:

也就是说,对象中的动态变量指向堆中独特的动态储存区。所以动态变量与对象无关,能够应用类名. 动态变量的形式来间接调用动态变量,无论该类有多少对象,动态变量都专用一个。

二、润饰办法

static 润饰办法的时候与润饰变量相似。其中,静态方法和实例办法都只有一份,无论类有多少个对象,都专用一个办法。这两者区别如下:
1. 静态方法不须要创建对象,能够间接通过类名. 办法的形式调用。也能够通过对象. 办法的形式调用,而实例办法则必须先创建对象之后,再通过对象. 办法的形式调用。
2.静态方法中不能应用 this 关键字 (this 关键字与实例无关)。this 关键字后续会讲到。
3. 静态方法不能引用非动态变量 。因为非动态变量是在创建对象的时候产生的,动态资源在类初始化时就曾经有了,所以不能辨认。 而静态方法和实例办法都能够援用动态变量

三、动态代码块

用 static 润饰的代码块为动态代码块,在类首次加载时(在链接阶段的筹备阶段初始化)。动态代码块能够多个,和动态变量依照申明程序进行加载,且仅加载一次,优先于其余非动态资源。能够利用动态代码块仅加载一次的个性来优化程序性能。该类须要比拟大的配置文件在创建对象时执行时,能够把配置文件放在动态代码块中。** 还有须要留神的是,
1. 因为动态资源是依照申明程序加载的,所以如果动态变量放在代码块前面,而后代码块须要援用这个动态变量的,则会报错 **。
2. 动态代码块不能放在任何办法中,否则会报错。因为不论是类办法还是实例办法,都须要咱们手动调用,而动态资源则都是在类加载时就加载好了。

四、润饰类

static 润饰类的时候,这个类为动态外部类。动态外部类次要作用是外部类在调用外部类的时候,不须要再创立一个外部类,间接通过外部类名. 外部类名的形式拜访外部类。例如线程池中 ThreadPoolExecutor 中的四种回绝策略 CallerRunsPolicy、AbortPolicy、DiscardPolicy、DiscardOldestPolicy 就是动态外部类。

五、动态导包

jdk1.5 之后,用 import static 包名来代替 import 包名的形式。这两个关键字连用能够指定导入某个类中的指定动态资源,并且不须要应用类名. 资源名,能够间接应用资源名。
比方:

//import static java.util.Arrays;
// 留神 这边的 *,意思是导入 Arrays 类中所有的静态方法,也能够把 * 变成具体的办法名。import static java.util.Arrays.*;

public class A
{public static void main(String[] args)
    {int[] arrays = {1,2,3,4,6,7,9,10};
        //Arrays.sort(arrays);
        sort(arrays);// 能够不加类名间接调用
    }
}

不过这个只是缩小了代码量,对于性能没有晋升,且可读性较差,个别不倡议应用,测试时能够简化代码量应用一下。

好了,static 关键字就聊到这,这里是可傥,将会分享本人的所学以及所得,欢送大家一起交换。csdn 地址为:https://blog.csdn.net/kaneand…

正文完
 0