如何理解static和this的用法

我们刚开始跟着书上的代码练习写函数模块时,你可能注意到函数模块都用static来修饰该函数,那么我们不用会怎样,答案是会出错导致无法编译。
如下图片代码
在这里插入图片描述
两种解决方案

  1. 在boolean前面加上static
  2. 在main函数中加上 test Max=new test();然后在if语句中的max函数改为Max.max(number1,number2),顺利运行。
    为什么会这样整哪
    因为类中被static修饰的方法从属于类, 而没有被static修饰的方法从属于对象,在对象未被加载进内存时,其所对应的方法无法进行调用,相反 未被static修饰的方法可以调用被static修饰的方法。

敲黑板

java 程序的运行是在jvm上面运行的,jvm虚拟机将内存分为三个区进行运行程序,分别是栈区,堆区,和方法区,至于存储什么内容可以看我上篇博客java类与对象的理解及底层实现原理
下面通过代码进行详细分析

public class testStatic {//类名
    int id;
    String name;
    String pwd;//以上三个普通变量从属于对象 意思是可以通过new一个对象后,通过对象开始调用

    static String company="北京尚学堂";//static修饰的变量从属于类

    public testStatic(int id,String name){
        this.id=id;//this表示从属于当前对象  表示当前对象的引用
        this.name=name;
    }

    public void login(){//从属于对象
        //能调用静态方法
        login();//从属于对象的方法可以访问类 因为对象就是通过类进行生成的。你的出生肯定有你父亲的存在,并且你了解你的父亲
        //但是在你未出生的时候你父亲想给你爱,却给不了,因为那时你还不存在,所以通过类无法访问到对象
        System.out.println("登录: "+name);
        //能调用静态变量
        System.out.println("公司: "+company);
    }

    public static void printCompany(){//静态方法
        //login()调用非静态变量 编译就会报错
        //login();//在静态方法中无法调用login函数
        System.out.println(company);
    }
    public static void main(String[] args) {
        testStatic user=new testStatic(110,"sofency");
        user.printCompany();//通过对象调用printCompany函数
        user.login();//对象可以调用
        testStatic.printCompany();//通过类调用printCompany 函数
        //testStatic.login();类不可以调用
        System.out.println();
        user.company="锋火";
        //login();无法使用非静态方法不在一个区,无法找到位置
        user.printCompany();
        testStatic.printCompany();
    }
}

底层实现原理图
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值