@value 静态变量_面试官:为什么静态方法不能调用非静态方法和变量?

这个可能很多人之前学习jvm的时候都会遇到,属于一个小问题,写这篇文章的原因是我在看java相关的面试题目中遇到的,因此顺手总结一下:

一、例子

我们先看效果:

5d47c9ed5675d83fc0a18a9473b29a32.png

我们在静态方法main中调用非静态变量或者是方法都会报错。我们反过来看看:

5b192208fe2ab42a6be7c84acce43330.png

反过来没有一点问题,接下来我们解释一下原因:

二、原因解释

我们需要首先知道的是静态方法和静态变量是属于某一个类,而不属于类的对象。我们不直接讲原因,先从jvm说起:

8a6eda16aa30e1a69d15f88ec52c52e1.png

这是一张类加载的生命周期图。

1、加载

”加载“是”类加机制”的第一个过程,在加载阶段,虚拟机主要完成三件事:

(1)通过一个类的全限定名来获取其定义的二进制字节流

(2)将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构

(3)在堆中生成一个代表这个类的Class对象,作为方法区中这些数据的访问入口。

注意此时会扫描到我们的代码中是否有静态变量或者是静态方法等等这些静态数据结构,还未分配内存。

2、验证

验证的主要作用就是确保被加载的类的正确性。

3、准备

准备阶段主要为类变量分配内存并设置初始值。这些内存都在方法区分配。注意此时就会为我们的类变量也就是静态变量分配内存,但是普通成员变量还没。

4、解析

解析阶段主要是虚拟机将常量池中的符号引用转化为直接引用的过程。

5、初始化

这是类加载机制的最后一步,在这个阶段,java程序代码才开始真正执行。我们知道,在准备阶段已经为类变量赋过一次值。在初始化阶端,程序员可以根据自己的需求来赋值了。初始化时候才会为我们的普通成员变量赋值。

写到这答案已经出来了,静态方法是属于类的,动态方法属于实例对象,在类加载的时候就会分配内存,可以 通过类名直接去访问,非静态成员(变量和方法)属于类的对象,所以只有该对象初始化之后才存在,然后通过类的对象去访问。

也就是说如果我们在静态方法中调用非静态成员变量会超前,可能会调用了一个还未初始化的变量。因此编译器会报错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Memcached 工作原理

http://hzp.iteye.com/blog/1872664Memcached处理的原子是每一个(key,value)对(以下简称kv对),key会通过一个hash算法转化成hash-key,便于查找、对比以及做到尽可能的散列。同时,mem…

ad中电容用什么封装_用什么来降低噪声?只要几个电容器就可以,简单有效!...

使用电容器降低噪声噪声分很多种,性质也是多种多样的。所以,噪声对策(即降低噪声的方法)也多种多样。在这里主要谈开关电源相关的噪声,因此,请理解为DC电压中电压电平较低、频率较高的噪声。另外,除电容外,…

C#委托的介绍(delegate、Action、Func、predicate)

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。 1.委托的声明 (1). delegate delegate我们常用到的一种声明 Delegate至少0个参数,至多32个参数,可以无返回值&#xff0…

版本1.8.1Go安装以及语法高亮配置

注意点:普通用户和root用户高亮要设置两遍①下载go安装包 https://golang.org/doc/ 最新的版本:go1.8.1.linux-amd64.tar.gz ②进入主目录:$:su ~赋给普通用户root权限,以便执行tar命令:$:su root 把压缩包解压到/usr/…

flutter 自定义键盘_入门级机械键盘选购对比

个人觉得键盘这种东西,手感是最重要的,毕竟键盘是要拿用的,不是拿来供的。不管键盘再怎么好看、酷炫,只要你用起来不舒服、不习惯,那对你而言,就不会是一把好键盘。那么,影响手感的因素主要有哪…

四个好看的CSS样式表格

1. 单像素边框CSS表格 这是一个非经常常使用的表格样式。 源码&#xff1a; <!-- CSS goes in the document HEAD or added to your external stylesheet --> <style type"text/css"> table.gridtable { font-family: verdana,arial,sans-serif; font-si…

loading initial ramdisk 卡住_驿站晨读 | 一城市多家快递“卡住了”!有快递网点直接建议:换别家吧......

编辑&#xff1a;驿站老鬼 主播&#xff1a;若晨‍▎美团回应“外卖小哥致电取餐被打成颅脑损伤”10月15日晚&#xff0c;成都温江区某小区内发生一起顾客殴打外卖员事件&#xff0c;导致外卖员冯某东轻度颅脑损伤以及右膝外侧半月板撕裂。据了解&#xff0c;事件起因是顾客要…

JavaScript大神用代码带你揭秘吉普赛古老神秘读心术

javascript/HTML5课题&#xff1a;javascript开发读心术游戏PS:大爆料&#xff01;javascript解密读心术游戏背后故事知识点&#xff1a;读心术原理算法独家揭秘&#xff0c;HTML5最新选择器&#xff0c;原生javascript动态DOM生成&#xff0c;判断与循环讲解&#xff0c;函数封…

.NET Framework 4.5 五个很棒的特性

转自http://news.cnblogs.com/n/192958/ 英文原文&#xff1a;Five Great .NET Framework 4.5 Features 简介 自 .NET 4.5 发布已经过了差不多 1 年了。但是随着最近微软大多数的发布&#xff0c;与 .NET 开发者交流的问题显示&#xff0c;开发者仅知道一到两个特性&#xff0c…

group by很多字段是不是会很慢_女生回复我总很慢,怎么办?

原标题&#xff1a;女生回复我总很慢&#xff0c;怎么办&#xff1f;Hello&#xff0c;大家好&#xff0c;我是情圣老司机。有一种问题&#xff0c;可能属于年轻人才会遇到的问题年轻的兄弟总想控制一切&#xff0c;一切都掌控在自己手上包括今天这个主题&#xff1a;女生总是回…

BZOJ 1012: [JSOI2008]最大数maxnumber(线段树)

裸的线段树...因为数组开小了而一直RE..浪费了好多时间..--------------------------------------------------------------------------#include<cstdio>#include<algorithm>#include<cstring>#include<cctype>#include<iostream>#define rep(i…

如何利用循环代替递归以防止栈溢出(译)

摘要&#xff1a;我们经常会用到递归函数&#xff0c;但是如果递归深度太大时&#xff0c;往往导致栈溢出。而递归深度往往不太容易把握&#xff0c;所以比较安全一点的做法就是&#xff1a;用循环代替递归。文章最后的原文里面讲了如何用10步实现这个过程&#xff0c;相当精彩…

python环境搭建_Python开发环境搭建安装开发软件

0.学习路径示意图各位小伙伴大家好&#xff0c;这次楼主分享的是Ubuntu上安装开发软件。包含以下这几个软件&#xff1a;PycharmAnaconda3GitVim远程登录软件RangerPS&#xff1a;因为以下安装包都是以root身份安装的因此&#xff0c;要使用它们必须以root身份登录su # 以root…

2023首届溪口冬笋节开幕 掀起溪口竹笋产业新浪潮

今年冬至&#xff0c;龙游县溪口镇迎来阵势浩大的“新气象”。 2023年12月22日&#xff0c;由龙游县溪口镇人民政府主办&#xff0c;“美好冬至 竹梦未来”首届溪口冬笋节于溪口老街正式开幕&#xff0c;展开为期一周的竹笋产业文化、经济活动宣传&#xff0c;龙游县领导、及社…

android 蓝牙通讯编程 备忘

1.启动App后: 判断->蓝牙是否打开&#xff08;所有功能必须在打牙打开的情况下才能用) 已打开: 启动代码中的蓝牙通讯Service 未打开: 发布 打开蓝牙意图(系统)&#xff0c;根据Activity返回进场操作 打开成功,启动代码中的蓝牙通讯Service 用户点back或失败 退出App 2.蓝牙…

java 程序执行后 强制gc_GC 设计与停顿

(给ImportNew加星标&#xff0c;提高Java技能)编译&#xff1a;唐尤华链接&#xff1a;shipilev.net/jvm/anatomy-quarks/3-gc-design-and-pauses/1. 写在前面“[JVM 解剖公园][1]”是一个持续更新的系列迷你博客&#xff0c;阅读每篇文章一般需要5到10分钟。限于篇幅&#xff…

【ASP.NET Web API2】初识Web API

Web Api 是什么&#xff1f; MSDN&#xff1a;ASP.NET Web API 是一种框架&#xff0c;用于轻松构建可以访问多种客户端&#xff08;包括浏览器和移动设备&#xff09;的 HTTP 服务 百度百科&#xff1a;Web API是网络应用程序接口。 个人理解&#xff1a;Web API 是提供给多种…

三星s8怎么分屏操作_三星手机该怎么玩?了解完这几点用机技巧,可以轻车熟路了!...

其实对于三星这个手机品牌&#xff0c;我还是很佩服的。虽然近些年来&#xff0c;三星在国内的市场份额日渐变少&#xff0c;但是在国内的影响力依然尚存。毕竟三星手机在某些方面还是很有优势的&#xff0c;特别是旗舰系列机型深受消费者喜爱。接下来&#xff0c;笔者就跟大家…

二维数组的指针复习

最近一次的考试都是指针&#xff0c;真是给我深深上了一课&#xff0c;所以我特此复习一下指针方面的知识。二维数组的指针 int a[3][4] {{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 下面通过一个表来做详细的说明&#xff1a; 访问二维数组&#xff0c;有两种方法&#xff0c;一…

称重的问题

给你8颗小石头和一架托盘天平。有7颗石头的重量是一样的&#xff0c;另外一颗比其他石头略重&#xff1b;除此之外&#xff0c;这些石头完全没有分别。你不得假设那颗重头到底比其他的石头重了多少。请问&#xff1a;最少要称量几次&#xff0c;你才能把那颗较重的石头找出来&a…