JAVA static关键字

普通方法

1.方法是有访问权限的

2.方法必须写上返回数据的类型,如果不需要返回数据就写void

3.在同一个类中,方法名可以相同,但是方法的签名不能相同(方法的签名=方法名+参数列表的类型)

4.方法上可以使用其他的关键字进行修饰,比如static和final,他们有着不同的意义。

一、static关键字是是什么?

static修饰的代码属于类,定义的变量存储在方法区的静态常量池当中。

二、java为什么设计static关键字?

因为要方便类去使用自己的方法和变量。

三、static关键字:

1.static关键字实例

package com.qcby;

public class A {
    public  String name = "张三";
    public static void run(){
        System.out.println("跑的快");
    }
    public static void fly(){
        System.out.println("飞的高");
    }
    //这些代码以信息的形式存储在内存方法区中,只有创建对象时,这些非静态的方法和变量才会有独立的存储空间,被对象调用
}
package com.qcby;

public class Test {
    public static void  main(String[] args){
        //假设方法和变量上面没有static关键字
        A a=new A();
        a.run();
        a.fly();
        a.name="aaa";//只能由对象调用
        //如果方法和变量属于非静态方法,他们只有在对象当中,才会被分配内存空间,那么也就是只能由对象才能调用
        //如果没有static关键字,那么类是不可以调用自己的属性和方法的,只能用对象去调用
        A.name="xxx";
        A.fly();
        A.run();
    }
}
A.name="xxx";

该行代码报错提示,我们可以注意到我的A类当中的name没有用static修饰

画图进行分析

2.static关键字修饰变量

public class Test {
    public static void main(String[] args) {
        A a1 = new A();
        A a2 = new A();

        a1.address = "上海";
        a1.name = "张三";
        a2.address = "天津";
        a2.name = "李四";

        System.out.println(a1);
        System.out.println(a2);
    }
}

class A {
    //static修饰的变量属于类变量,存储在方法区的静态常量池当中,被所有对象共享
    public static String name = "admin";
    public String address = "北京";

    @Override
    public String toString() {
        return "A{" +
                "address='" + address + '\'' +
                "name='" + name + '\'' +
                '}';
    }
}

static修饰的变量是存储在静态常量池中,所以我们可以见看到name都是李四。

2.static关键字修饰方法

该代码可以验证,非静态方法可以调用静态方法,静态方法不能调用非静态方法。

并且证明了main方法想要可以调用的方法。

3.static关键字修饰代码块

public class Test{
    public static void main(String[] args) {
        Demo demo = new Demo("---");
    }
}
class Demo{

    public Demo(String aa){
        System.out.println("==="+aa);
    }
    static {
        System.out.println("11");
    }
    public static Demo demo = new Demo("+++");
    static {
        System.out.println("22");
    }
}

扫描-------加载(编译)--------运行

1.首先寻找main方法,发现main方法在Test类中,发现没有父类也没有static修饰的代码,所以编译Test类,将main方法入栈。

2.执行Demo("---");执行前扫描Demo类,发现没有父类,所以编译Demo类,static修饰的代码块按顺序优先执行

3.首先是“11”

4.执行public static Demo demo = new Demo("+++");调用了Demo构造方法,输出“===+++”

5.输出“22”

6.编译完毕,回到main,执行Demo("---"),输出“===---”

得到的结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值