java中静态方法中调用非静态方法的详解

2023-10-27

静态static方法中不能调用非静态(non-static)方法,准确地说是不能直接调用non-static方法。但是可以通过将一个对象的引用传入static方法中,再去调用该对象的non-static方法。

其实这个事实的应用很经常,以至于我们不去重视:在主函数(static方法)中我们经常创建某个类的实例,再利用其引用变量调用它的非静态方法。

class Test2{  
    public void method2(){  
        System.out.println("HelloWorld2");  
    }  
}  
  
class test{  
    public void method0(){  
        System.out.println("HelloWorld0");  
    }  
    public static void method1(){  
        System.out.println("HelloWorld1");  
    }  
      
    public static void main(String args[]){           
        new test().method0();   
        method1();   
        new Test2().method2();   
    }     
}  

打印结果:

HelloWorld0
HelloWorld1
HelloWorld2

总结:

      首先static的成员是在类加载的时候初始化的,JVM的CLASSLOADER的加载,首次主动使用加载,而非static的成员是在创建对象的时候,即new 操作的时候才初始化的;

        先后顺序是先加载,才能初始化,那么加载的时候初始化static的成员,此时非static的成员还没有被加载必然不能使用,而非static的成员是在类加载之后,通过new操作符创建对象的时候初始化,此时static 已经分配内存空间,所以可以访问!

      简单点说:静态成员属于类,不需要生成对象就存在了.而非静态需要生成对象才产生.所以静态成员不能直接访问非静态.  

下面说说静态的特点:

1.随着类的加载而加载

也就是,说静态会随着类的消失而消失,说明静态的生命周期最长
2.优先于对象的存在
明确一点:静态是先存在的对象是后存在的
3.被所有对象共享
4.可以直接被类名多调用

实例变量和类变量的区别
1.存放位置
类变量随着类的加载存在于方法区中,实例变量随着对象的建立存在于堆内存里
2.生命周期
类变量生命周期最长,随着“类”的加载而加载,随着类的消失而消失,实例变量随着“对象”的消失而消失

静态的使用注意事项:
1.静态方法只能访问静态成员(包括成员变量和成员方法)
   非静态方法可以访问静态也可以访问非静态
2.静态方法中不可以定义this,super关键字
   因为静态优先于对象存在,所以静态方法中不可以出现this,super关键字
3.主函数是静态的。
    

静态的利弊
   利:对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份
     可以直接被类名所调用
   弊:生命周期过长,访问出现局限性(只能访问静态)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中静态方法中调用非静态方法的详解 的相关文章

随机推荐

  • Java中 Long(long) 和Integer(int)之间的强制转换

    一 将long型转化为int型 这里的long型是基础类型 long a 10 int b int a 二 将Long型转换为int 型的 这里的Long型是包装类型 Long a 10 int b a intValue 三 将int型转化
  • Spring Boot + Disruptor

    首先了解一下Disrupto的背景 Disruptor 是英国外汇交易公司LMAX开发的一个高性能队列 研发的初衷是解决内存队列的延迟问题 在性能测试中发现竟然与I O操作处于同样的数量级 基于 Disruptor 开发的系统单线程能支撑每
  • linux学习——awk ‘{print $2}‘ 这个命令是什么意思?

    2 表示第二个字段 print 2 打印第二个字段 awk print 2 fileName 一行一行的读取指定的文件 以空格作为分隔符 打印第二个字段 比如有这样一个文件 a1 b1 c1 d1 a2 b2 c2 d2 执行的结果是 输出
  • 工信部印发互联网+行动计划 聚焦智能制造

    工信部印发 工业和信息化部关于贯彻落实 lt 国务院关于积极推进 互联网 行动的指导意见 gt 的行动计划 2015 2018年 意见提出总体目标 到2018年 互联网与制造业融合进一步深化 制造业数字化 网络化 智能化水平显著提高 其中提
  • 使用正则去掉html标签

    在开发项目的时候 会有去掉html标签只提取文字内容的情况 在此做个记录 以免之后找不到 1 匹配 lt 开始 gt 结束的全局正则 var regex lt gt gt ig 2 body内部的p标签 body p 我是文本内容 p 3
  • PostgreSQL数据库

    0 安装 我使用的操作系统为Ubuntu 安装命令 sudo apt get update sudo apt get install postgresql postgresql client 进入postgres sudo i u post
  • 如何用C语言编写暴力破解压缩文件解压密码的程序

    由于有一个重要的Rar文件 极需解开 首先试用了ARPC 但是解压的速度极慢 每秒只有30个左右 所以断了穷举破解的念头 却仍不死心 因为我从不崇尚穷举破解的方法 除非每秒可以跑几千万次的 我或许可以一试 所以决定研究一下Winrar 3
  • 在教育领域中使用ChatGPT有哪些优点?

    人工智能在教育领域的应用正在迅速增加 OpenAI于2022年11月开发的聊天机器人ChatGPT在全球范围内广受欢迎 由于其受欢迎程度以及生成类似人类问题的回答的能力 ChatGPT正在成为许多学习者和教育工作者值得信赖的伴侣 然而 与任
  • 可变68键,GANSS新版ALT71即将上市

    优化生产供应链后的GANSS 迦斯 去年下半年至今陆续成功升级C D系产品 在更优质的生产端支持下 近日 GANSS 迦斯 发布全新设计的ALT71机械键盘 独树一帜的可变配列 71键 68键 搭载升级蓝牙5 0 低功耗高续航 首发热升华版
  • 贪心——装箱问题

    贪心 装箱问题 题目描述 有一个箱子容量为V 正整数 0 V 20000 同时有n个物品 0 n 30 每个物品有一个体积 正整数 要求n个物品中 任取若干个装入箱内 使箱子的剩余空间为最小 输入描述 1个整数 表示箱子容量 1个整数 表示
  • 三目运算符的嵌套使用

    文件名 ChooseTest java 描述 练习条件运算符 三目运算符 的嵌套 学习成绩 gt 90分的同学用A表示 60 89分 之间的用B表示 60分以下的用C表示 作者 kyx 时间 2019 01 03 备注 初稿 import
  • matlab做出自相关图,在matlab中实现图像的自相关和互相关

    图像的自相关 clear I1 imread lenna bmp bmp 输入图像1 参考图像 I1 I1 1 figure 1 显示输入图像1 colormap gray 255 image I1 axis off FI1 fft2 I1
  • AD导出3D模型的各种方法——AD转SW(贴图形式)

    所有方法的链接 1 AD转SW 贴图形式 2 AD转SW MCAD插件一键生成 也适用于Fusion360 Inventor等三维建模软件 3 AD转Keyshot 待写 4 AD转PPT 待写 目录 所有方法的链接 一 前情提要 二 使用
  • 【转】NAT技术基本原理与应用

    转自 https www cnblogs com mefj p 10578639 html 1 概述 1 1 简介 1 1 1 名词解释 公有IP地址 也叫全局地址 是指合法的IP地址 它是由NIC 网络信息中心 或者ISP 网络服务提供商
  • CISP题目练习

    CISP题目练习 知识点 风险计算原理可以用下面的范式形式化地加以说明 风险值 R A T V R L T V F Ia Va R表示安全风险计算函数 A表示资产 T表示威胁 V表示脆弱性 Ia表示安全事件所作用的资产价值 Va表示脆弱性严
  • 稳压二极管的使用

    稳压二极管又叫齐纳二极管 利用pn结反向击穿状态 其电流可在很大范围内变化而电压基本不变的现象 制成的起稳压作用的二极管 稳压管主要被作为稳压器或电压基准元件使用 上面都是抄的 实际使用稳压二极管的时候才发现有问题 稳压二极管并不是能够理想
  • 使用JDBC连接数据库(一)

    JDBC是由java编程语言编写的类及接口组成 同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API 并支持SQL语言 利用JDBC可以将JAVA代码连接到oracle DB2 SQLServer MYSQL等数据库 从而实
  • 线程池的实现原理、并发和并行

    线程池参数详解 https blog csdn net daiqinge article details 51179445 例题 比如现在设置coreSize 5 maxSize 10 blockQueueSize 10 依次提交6个比较耗
  • 矩阵的转置,逆矩阵,行列式的计算,伴随矩阵等

    行列式的操作 逆矩阵 就是两个矩阵相乘是单位矩阵 对角矩阵相乘 就是对角线元素相乘 当两个矩阵相乘不是单位矩阵 伴随矩阵 是有代数余子式拼成的 为什么伴随矩阵会出现 为什么伴随矩阵的形式是这样的 因为行列式的乘法 根据矩阵的乘法可以看到 行
  • java中静态方法中调用非静态方法的详解

    静态static方法中不能调用非静态 non static 方法 准确地说是不能直接调用non static方法 但是可以通过将一个对象的引用传入static方法中 再去调用该对象的non static方法 其实这个事实的应用很经常 以至于