JavaSE阶段初期的一些问题
对于如下问题1:编译阶段Demo1会报错,Demo2不会报错.
class Demo1{
int i;
i = 0;
}
class Demo2{
int i = 0;
}
事实上,在java中定义一个类,类中只能包含成员变量 成员方法 构造方法 代码块;
成员变量为类的属性,成员方法为类的行为,构造方法是用于创建类的实例;
代码块包括静态代码块和非静态代码块:
static修饰的代码块随着类的加载而加载,一般作为类的驱动;
没有static修饰的代码块为构造代码块,在构造方法之前执行;
因此,可以看出在类的成员位置,只能定义,定义一个类的属性特征,而如果在成员位
置调用某个方法或者执行某条语句,相当于让该类去实现某个动作,这是不合常理的,
必须通过创建类的实例,通过实例调用方法,在方法中去实现动作.
class Demo3{
int i;
{
i=0;
}
}
Demo3不会报错,i=0在构造代码块中,这个类和如下类相同:
class Demo4{
int i;
Demo4(){
i=0;
}
}
相当于在Demo4的构造方法中执行i=0这条语句,最终还是通过调用方法来执行.
问题2:为什么static不能修饰局部变量,只能修饰成员变量和方法,且可以用类名直接调用.
static修饰的成员变量或者成员方法随着类的加载而加载.
在java中,当一个类被虚拟机加载的时候会产生一个类型为Class的类对象存在于
jvm的方法区中,即所生成的class文件.当创建该类实例的时候,会以这个类对象为模版
,在堆内存中开辟一块空间并复制类对象的成员变量,同时会有一个引用指向类对象的
成员方法,当调用方法的时候,通过引用找到类对象中的方法调用进栈执行.
而用static修饰的成员变量或者方法实际上是属于类对象的,即这个模版的,并不
属于类的实例.那么调用static修饰的成员变量或方法则可以直接使用类名来指向该
变量和方法,当然也可以通过创建对象来调用.
static为什么不能修饰局部变量呢,首先局部变量存在于方法中,它的作用域在这
个方法的括号内,而方法的调用需要依靠对象的产生,因此局部变量存在于堆内存中,而
static修饰的变量随着类的加载会一直存在于方法区中,生命周期和位置都不同,因此
不能用static修饰局部变量.
JavaSE阶段初期的一些问题的更多相关文章
- 基于JavaSE阶段下的集合类汇总
一.数组与集合的区别 数组和集合都是用来存储对象的容器,但是,数组只能储存基本数据类型的对象,且长度不可变:而集合是储存引用数据类型的对象,且长度可变,所以,在不知对象数量的具体数值时一般用集合来存储 ...
- 基于JavaSE阶段的IO流详解
1.IO流基本概述 在Java语言中定义了许多针对不同的传输方式,最基本的就是输入输出流(俗称IO流),IO流是属于java.io包下的内容,在JavaSE阶段主要学下图所示的: 其中从图中可知,所有 ...
- javaSE阶段中 关于Sring类方法的应用
String类中有很多常用的方法,今天就一些方法涉及到的一些常见题 做两个小Demo 其中一个要求如下: 获取指定字符串中,大写字母.小写字母.数字 的个数 题目分析 * 为了统计大写字母.小写字 ...
- (Beta)Let's-Beta阶段展示博客
康家华:http://www.cnblogs.com/AmazingMax/ 马阿姨:http://www.cnblogs.com/oushihuahua/ 刘彦熙:http://www.cnblog ...
- 个人作业3-(Alpha阶段)
一. 总结自己的alpha 过程 1.团队的整体情况 Alpha阶段初期我们团队因分工以及项目具体实施一度茫然,好在在团队队长的带领下确认分工及制定具体计划,使任务有序的进行下去,中间过程虽然遇到一些 ...
- BugPhobia回顾篇章:团队Beta 阶段工作分析
0x00:序言 1 universe, 9 planets, 204 countries,809 islands, 7 seas, and i had the privilege to meet yo ...
- 团队作业7——alpha阶段之事后诸葛亮分析
事后诸葛亮分析 1. 设想和目标 1.1 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决查询物流信息步骤繁琐的问题.定义还算清楚.典型用户主要针对一些不熟悉淘 ...
- JavaSE综合项目演练
光阴似箭日月如梭,大家学习已经有了一段时间了,转眼间,从刚开始如何配置JDK已经到了现在快学完网络编程了.学了这么多,眼看就要进入下一个阶段了,数据库编程了,那么在进入下个阶段前,我们来完成一个综合性 ...
- [BUAA软工]Alpha阶段事后分析
设想和目标 虽然我们是从零开始的一个自定义项目,但语音Coding助手从一开始的设计与目标就很明确:加入语音接口使其能在shell端实现命令语音实现以及编辑运行脚本,设计前端编辑器并将后端shell与 ...
随机推荐
- canvas练手项目(一)——选取图片
今天无事可做,在春意盎然的下午突发奇想想做一个关于图片处理的在线网页应用.不要问我为什么做这个,因为我想做!关于这个项目,我想基于canvas来实现,canvas是个好东西,我一直很喜欢,就是我没有做 ...
- 一次日语翻译的Chrome插件开发经历
序言 去年7月刚过了日语N2,想着今年考个N1,为了加深日语文化的了解,还有学习日语,平时免不了经常上日语网站. 但是毕竟水平有限,所以不免遇到不认识的单词,日语单词的一个特点就是很多单词你知道是什么 ...
- Python标准库概览
Python标准库通常被称为"自带的电池",自然地提供了广泛的功能,涵盖了大概200个左右的包与模块.不断有高质量的包或模块被开发出来,极大的丰富了标准库.但有些模块放在标准库中很 ...
- Linux基础教程(一)——Linux系统简介
Linux的概述 Linux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境.Linux是由Linus Torvalds(林纳斯·托瓦兹)起初开发的,由于 ...
- Unity3D 动画状态简单控制核心代码
状态机是这样的 包含静止.跑.攻击.死亡四个动画 下面是核心代码(PS:代码高亮插件出问题了,将就看一下吧..) AnimatorStateInfo stateInfo = m_ani.GetCurr ...
- 智能合约语言 Solidity 教程系列7 - 以太单位及时间单位
这是Solidity教程系列文章第7篇介绍以太单位及时间单位,系列带你全面深入理解Solidity语言. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所 ...
- 在使用mybatis的selectFromExample时出现Invalid bound statement (not found)错误
主要原因:运行项目在构建的时候只会默认的去加载resource资源文件里面的资源,其他地方的配置资源不会加载 .故没有读取到mybatis的MapperXml映射 结构如下 ============= ...
- Java IO流简介
Java中的流是什么? java中的流是一个抽象的概念,在java的程序中需要把文件从一个设备传输到另一个设备上,这个设备可以是内存,程序,文件,网络.把在这些之间传输的叫做流.官方的解释:流是一组有 ...
- protobuf(quickStart)
1.简介 Protocol Buffers是Google开发一种数据描述语言,能够将数据进行序列化,可用于数据存储.通信协议等方面. 可以理解成更快.更简单.更小的JSON或者XML,区别在于Prot ...
- 利用spring AOP实现每个请求的日志输出
前提条件: 除了spring相关jar包外,还需要引入aspectj包. <dependency> <groupId>org.aspectj</groupId> & ...