Java基础--static关键字

Posted huigelaile

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础--static关键字相关的知识,希望对你有一定的参考价值。

static关键字通常应用在字段、方法、静态块,还有冷门一点的内容:静态内部类、静态导入

static字段:

  static字段也就是静态变量,是属于类的,被所有的对象所共享,只有当类初次加载的时候保存到内存中,在内存中只保存一份

  实例变量是属于对象的,在创建对象的时候进行初始化,每个对象的实例变量是互斥的,不会相互影响

PS:static是不允许用来修饰局部变量,无论是方法、静态块、代码块

static方法:

public class A

    private static int i = 1;
    private String s;

    private void del() 
        System.out.println("del()");
        add();
    

    public static void add() 
        System.out.println(s);
        this.del();
        System.out.println("add()"+ i);
    

  因为静态方法是属于类的,不需要依赖对象去调用,内部是没有this的,所以静态方法中无法使用this,也无法调用非静态方法和变量,反

过来却可以的。但是如果在静态方法中new一个对象,然后调用非静态方法,是可以正常运行的

public static void add() 
	A a = new A();
	a.del();
	System.out.println(a.s);
	System.out.println("add()"+ i);

静态块:

  静态块和静态变量一样在首次类加载的时候进行初始化,这是我们使用它的一个重要的原因

public class A

    private static int i = 1;
    private String s = "aaa";
    static 
        System.out.println("A static block1");
    

    private void del() 
        System.out.println("del()");
        add();
    

	
        System.out.println("A block");
    
	
    static 
        i1 = 2;
//        System.out.println(i1);
        System.out.println("A static block2");
    
    public static void add() 
        System.out.println("add()");
    
    private static int i1;
public class B extends A

    static 
        System.out.println("B static block1");
    

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

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

    static 
        System.out.println("B static block2");
    

public class Test 

    private static B b = new B();

    public static void main(String[] args) 
        new B();
        A.add();
    
 

结果:

A static block1
A static block2
B static block1
B static block2
A block
B block
B Constructor
A block
B block
B Constructor
add()

静态块的特点:

  1、静态块内部可以对定义在其后面的静态变量进行赋值,但是不能使用

  2、静态块只会加载一次,按照代码定义顺序进行加载

  3、类加载的顺序:父类静态块-->子类静态块-->父类代码块-->父类构造器-->子类代码块-->子类构造器

非静态块可以加载多次

静态内部类:

  这部分内容可以参考我之前的内容:https://www.cnblogs.com/huigelaile/p/11009436.html,或者自行百度

静态导入:

  之前static相关内容没想到过这个内容,但是在公众号有看到一篇关于面试的文章,面试官问关于static的内容,如果能够回答到静态导入,

印象应该会很好

格式:

  import static 包名.类名.方法名  

import static java.lang.System.*;
import static java.lang.Math.*;

public class Test 

    public static void main(String[] args) 
        out.println("abc");
        System.out.println(round(1.2));
    

PS:jdk1.5出现的特性

  1、静态导入的方法必须是静态的

  2、静态导入可以不调用包名,直接使用包里的静态方法  

以上是关于Java基础--static关键字的主要内容,如果未能解决你的问题,请参考以下文章

零基础学Java并不难!详解Java中的static关键字(上)

Java基础之static关键字

Java基础之static关键字的用法

Java基础-static关键字分析

Java基础--static关键字

Java 核心基础之static静态代码块和静态方法