​​​对于如下问题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阶段初期的一些问题的更多相关文章

  1. 基于JavaSE阶段下的集合类汇总

    一.数组与集合的区别 数组和集合都是用来存储对象的容器,但是,数组只能储存基本数据类型的对象,且长度不可变:而集合是储存引用数据类型的对象,且长度可变,所以,在不知对象数量的具体数值时一般用集合来存储 ...

  2. 基于JavaSE阶段的IO流详解

    1.IO流基本概述 在Java语言中定义了许多针对不同的传输方式,最基本的就是输入输出流(俗称IO流),IO流是属于java.io包下的内容,在JavaSE阶段主要学下图所示的: 其中从图中可知,所有 ...

  3. javaSE阶段中 关于Sring类方法的应用

    String类中有很多常用的方法,今天就一些方法涉及到的一些常见题 做两个小Demo   其中一个要求如下: 获取指定字符串中,大写字母.小写字母.数字 的个数 题目分析 * 为了统计大写字母.小写字 ...

  4. (Beta)Let's-Beta阶段展示博客

    康家华:http://www.cnblogs.com/AmazingMax/ 马阿姨:http://www.cnblogs.com/oushihuahua/ 刘彦熙:http://www.cnblog ...

  5. 个人作业3-(Alpha阶段)

    一. 总结自己的alpha 过程 1.团队的整体情况 Alpha阶段初期我们团队因分工以及项目具体实施一度茫然,好在在团队队长的带领下确认分工及制定具体计划,使任务有序的进行下去,中间过程虽然遇到一些 ...

  6. BugPhobia回顾篇章:团队Beta 阶段工作分析

    0x00:序言 1 universe, 9 planets, 204 countries,809 islands, 7 seas, and i had the privilege to meet yo ...

  7. 团队作业7——alpha阶段之事后诸葛亮分析

    事后诸葛亮分析 1. 设想和目标 1.1 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决查询物流信息步骤繁琐的问题.定义还算清楚.典型用户主要针对一些不熟悉淘 ...

  8. JavaSE综合项目演练

    光阴似箭日月如梭,大家学习已经有了一段时间了,转眼间,从刚开始如何配置JDK已经到了现在快学完网络编程了.学了这么多,眼看就要进入下一个阶段了,数据库编程了,那么在进入下个阶段前,我们来完成一个综合性 ...

  9. [BUAA软工]Alpha阶段事后分析

    设想和目标 虽然我们是从零开始的一个自定义项目,但语音Coding助手从一开始的设计与目标就很明确:加入语音接口使其能在shell端实现命令语音实现以及编辑运行脚本,设计前端编辑器并将后端shell与 ...

随机推荐

  1. [SCOI2005]王室联邦

    分块基本没有限制 所以每次大于等于b就分一块 # include <bits/stdc++.h> # define RG register # define IL inline # def ...

  2. [BZOJ1112] [POI2008] 砖块Klo (treap)

    Description N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另一柱.仓库无限大. 现在希望用最小次 ...

  3. 搬瓦工搭建SS的教程

    前言 作者写在前面的话: 应同学的要求在此分享搬瓦工搭建SS的教程,此教程只作为学习之用,因某些原因本教程不适合长期使用,在大家学习之后请删除所做的操作,谢谢. 为方便以后查看,请及时收藏:GitHu ...

  4. mysql的下载安装

    不知道为什么,写这篇文章我总是想感慨一下.首先我的感谢和敬佩那些能把知识和技术分享出来的开发者,不管你的技术是否很牛,但是你的精神让我十分敬佩.学java的已经二天了,除了问问朋友,给我最大帮助的就是 ...

  5. 关于虚拟机打开ubuntu黑屏的问题

    取消勾选“加速3D图形“后重启即可.

  6. 【Unity3D与23种设计模式】工厂方法模式(Factory Method)

    GoF中定义: "定义一个可以产生对象的接口,但是让子类决定要产生哪一个类的对象.工厂方法模式让类的实例化程序延迟到子类中实施" 当类的对象产生时,若出现下列情况: 1.需要复杂的 ...

  7. jmockito模拟方法中参数如何指定

    在做单元测试的时候,经常会遇到mock类的方法的情景.在写单测过程中,遇到一些问题,比较困惑,便做了一些测试,并得出一个结论: 在mock类的方法时,当符合 (mock参数).equals(实际调用过 ...

  8. Ubuntu Mininet环境搭建

    我们通过源码方式搭建mininet仿真平台,使用git下载mininet源码 git clone git://github.com/mininet/mininet 下载完成之后,使用下面命令选择安装版 ...

  9. Online Judge(OJ)搭建——3、MVC架构

    Model Model 层主要包含数据的类,这些数据一般是现实中的实体,所以,Model 层中类的定义常常和数据库 DDL 中的 create 语句类似. 通常数据库的表和类是一对一的关系,但是有的时 ...

  10. MSIL实用指南-字段的加载和保存

    字段有静态字段和非静态字段之分,它们的加载保存指令也是不一样的,并且非静态字段要生成this. 静态字段的加载加载静态字段的指令是Ldsfld.ilGenerator.Emit(OpCodes.Lds ...