JAVASE基础(static关键字)

本文详细介绍了Java中static关键字的作用,包括静态变量、静态方法、静态语句块和它们与实例语句块的区别。重点阐述了static修饰属性和方法的特性,如静态变量由所有对象共享,静态方法可以直接通过类名调用。同时,解析了静态代码块的执行时机及其与构造方法的关系。
摘要由CSDN通过智能技术生成

一:static的作用

(1)static修饰属性:修饰的变量叫做“静态变量”

(2)static修饰方法:修饰的方法叫做”静态方法“

(3)static定义静态语句块

(4)static与实例语句块

二:细化

(一)static修饰属性(变量)

(1)变量的分类:

1.局部变量

2.成员变量(实例变量,非静态变量)

3.静态变量(储存在方法区)

(2)代码示例:

public class Statictest04 {
    public static void main(String[] args) {
        Animal a1 = new Animal("AAA",10);
        Animal a2 = new Animal("BBB",11);

        //如何访问(类名.)
        System.out.println(Animal.type);
        //也可以使用引用.
        System.out.println(a1.type);
    }
}
//抽象现实世界中的”陆生“动物
class Animal{
    //Field
    String name;
    int age;
    //静态变量,被存储在方法区
    //所有的java对象共享这一份
    //所以静态变量是类级别的,使用”类名.“方式访问
    static String type = "陆生";
    //Constructor构造函数
    Animal(String name,int age){
        this.name = name;
        this.age = age;
    }
}
/*
输出结果
陆生
陆生
 */

(3)注意:

1.所有的java对象共享这一份属性

2.且不属于对象,访问方式为:类名 . 属性。

(二)static修饰方法

(1)定义:如果在任何方法上应用 static 关键字,此方法称为静态方法。

(2)代码示例:

public class Statictest03 {
    //Field

    //成员方法
    //成员方法必须使用“引用.”调用
    public void m1(){

    }
    //静态方法
    //可以使用“类名.”调用,也可以使用“引用.”调用,即使使用“引用.”调用,底层还是“类名.”调用。
    public static void m2(){
        System.out.println("m2....");
    }
    //程序入口
    public static void main(String[] args) {
        Statictest03 st = new Statictest03();
        st.m1();//引用.

        m2();//输出m2....
        st.m2();//引用.  输出m2....

        /*
        Statictest03 s = null;
        s.m1();//空指针异常
         */
        Statictest03 s = null;
        //m2是静态方法,不是成员方法,所以即使引用是空的,也不会空指针异常
        s.m2();//输出m2....
    }
}
/*
输出结果
m2....
m2....
m2....
 */

(3)注意:

1.一般情况下工具类中的方法大部分都是静态方法

2.静态方法不用创建对象也能直接访问该方法

3.静态方法可以访问静态数据成员,并可以更改静态数据成员的值

4.静态方法属于类,而不属于类的对象

(三)static定义静态语句块:

(1)定义:使用static定义的代码块。一般用于初始化静态成员属性。

(2)代码示例:

//static定义的静态语句块在类加载阶段执行,并且只执行一次,是自上而下的顺序执行。
public class Statictest01 {
    //静态语句块
    static {
        System.out.println("1");
    }
    static {
        System.out.println("2");
    }
    static {
        System.out.println("3");
    }
    static {
        System.out.println("4");
    }
    //程序的入口
    public static void main(String[] args) {
        System.out.println("main execute! 1");
        System.out.println("main execute! 2");
    }
}
/*
执行结果:
1
2
3
4
main execute! 1
main execute! 2
 */

(3)注意:

1.静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。

2.静态代码块执行完毕后, 实例代码块(构造块)执行,再然后是构造函数执行。

(四)static与实例语句块

(1)代码示例

public class Statictest02 {
    //静态语句块
    static {
        System.out.println("A");//类加载的时候就执行,只执行一次
    }
    //实例语句块
    {
        System.out.println("1");
    }
    {
        System.out.println("2");
    }
    {
        System.out.println("3");
    }
    //构造方法
    Statictest02(){
        System.out.println("Statictest02无参构造执行");
    }

    //程序入口
    public static void main(String[] args) {
        Statictest02 s = new Statictest02();//不创建对象不会执行
        Statictest02 s1 = new Statictest02();
    }
}
/*
执行结果
A
1
2
3
Statictest02无参构造执行
1
2
3
Statictest02无参构造执行
 */

(2)注意

1.每一次调用构造方法之前会执行一次(不创建对象不会执行)

2.实例语句块执行顺序也是自上而下

三:总结类的构成

类{
     //可以通过”类名.“,”引用.“
     1.静态变量
     2.静态方法

     //必须对象存在才可以访问,采用”引用.“
     3.成员变量
     4.成员方法

     //创建对象,给成员变量赋值
     5.构造方法

     //类加载时只执行一次
     6.静态语句

     //构造方法没调用之前执行一次
     7.实例语句块

     //用在成员方法和构造方法中
     8.this
    }
    空指针异常:空引用访问成员
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值