Java基础笔记29——static关键字

Posted `青红造了个白`

tags:

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

static关键字:修饰成员,不可以修饰局部变量

 

1.修饰属性(静态变量、类变量):对象共享,类被加载时,即被保存在内存当中,当类存在时,类变量一直存在

两种方式访问:

1.直接访问(推荐使用):类名.属性;
2.实例化后访问:对象名.属性;


2.修饰方法(静态方法)

两种方式访问:
1.直接访问(推荐使用):类名.方法名();
2.实例化后访问:对象名.方法名();

注意:
(1)静态方法里只能直接访问静态成员,而不能直接访问类中的非静态成员
(2)静态方法中不能使用this和super关键字
(3)静态方法不能被非静态方法覆盖
(4)静态方法不能修饰构造器

3.修饰代码块(静态代码块):静态块经常用来进行类属性的初始化,在类加载时执行,且仅执行一次
类加载-> 静态代码块(只执行一次) -> new对象 -> 自由代码块 -> 构造函数

 

例子:

package com.lqh.chapter02;

public class _27static {
    //用static修饰属性
    static String author = "lqh";
    String identity = "Student";
    
    //静态代码块
    static {
        System.out.println("静态初始化,类的初始化操作------");
    }
    
    //自由代码块
    {
        System.out.println("对象初始化,对象的初始化操作------");
    }
    
    //构造函数
    public _27static() {
        System.out.println("构造函数");
    }
    
    //用static修饰方法
    public static String getAuthor() {
        System.out.println(_27static.author);//静态成员,类级别,类一被加载,即保存在内存中
        System.out.println(new _27static().identity);//非静态成员,对象级别,对象被new之后,才保存在内存中
        //System.out.println(identity);//报错,static修饰的方法不能直接访问类中的非静态成员
        
        /* 报错,因为static修饰的方法在类加载时就保存到内存,但this和super关键字需要new了对象之后才能保存到内存
            System.out.println(this.identity);
            System.out.println(super.toString());
        */
        
        return author;
    }
    public static void main(String[] args) {
        //1.直接访问static修饰的属性
        System.out.println(_27static.author);
        //2.实例化后访问static修饰的属性
        _27static test = new _27static();
        System.out.println(test.author);
        
        System.out.println("--------------");
        
        //1.直接访问static修饰的方法
        System.out.println(_27static.getAuthor());
        //2.实例化后访问static修饰的方法
        System.out.println(test.getAuthor());
    }
}
class Test extends _27static{
    //静态方法不能被非静态方法覆盖 
    /*
     * public String getAuthor() {
     * 
     * }
     */
}

输出结果为:

静态初始化,类的初始化操作------
lqh
对象初始化,对象的初始化操作------
构造函数
lqh
--------------
lqh
对象初始化,对象的初始化操作------
构造函数
Student
lqh
lqh
对象初始化,对象的初始化操作------
构造函数
Student
lqh

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

Java学习笔记3.4.3 static关键字 - 静态代码块

java学习--基础知识进阶第一天--笔记

Java基础 -- 关键字Static和Final

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

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

java笔记java中static/final/abstract关键字的辨析