在java中,数据是以常量和变量两种方法形式进行存储和表示的(实际上,所有程序的数据都是这两种形式)。

四类八种

第一类:逻辑型boolean 默认初始值是false 1Byte
第二类:文本型char 2Byte unicode编码,一个汉字两个字节
第三类:整数型(byte、short、int、long)
byte 1 Byte -128-127
short 2Byte
int 4Byte java默认是INT
long 8Byte L
不受操作系统的影响保证了java的移植性。
第四类:浮点型(float、double)
double 是默认的
float F
在数学中0到1有无数个浮点数;而计算机是离散的,所以表示的时候有误差,计算机用精度(小数点后几位来表示正确),比较浮点数时a==0.1是不合适的,应该a-0.1==0;如果a是0.1,则即使有误差 a-0.1==0因为a和0.1都被表示为一个有误差的计算机二进制。比较按照精度来算。

变量

type variableName [=value][, variableName[=value]...];

type可以是java的基本类型之一。
type可以是Java的引用类型(即类及接口类型)的名字,外部类或接口必须有访
问权限,使用非lang包下的类必须先导入。
变量名(variableName),java约定变量名以能描述该变量意义的单词表示(单词小写),以增加程序的可读性。驼峰法则。
“=”,表示赋值,不是数学意义上的“等于”,java环境下的“等于”通常用于逻辑表达式,用符号“==”(双等号)表示。赋值同样不等于就相等哟,比如:

Integer a =129,b =129;
System.out.println(a==b);
//结果:false

其中a、b为Integer型引用变量,赋的值都是129,但是两者并不相等。
声明格式
变量的访问权限修饰符,访问权限标识符比照类的访问权限
static,静态成员变量修饰符,与它相对应的是实例变量
final,最终变量修饰符,即常量
类变量与实例变量的相同点:
1)都可以用任意权限修饰符对访问权限加以限制;2)都可以被类自身的方法直接调用。
类变量与实例变量的区别是:
1)存储位置不同。静态变量存储于方法区 method area,而实例变量存储于堆区heap area。
2)生命周期不同。静态变量在加载类过程中优先加载,其生命周期取决于类的生命周期;实例变量在创建实例时才创建,它的生命周期取决于实例的生命周期。
3)引用对象不同。静态变量属于类,被类的所有实例共享,可以直接使用类名来引用也可以通过类的实例引用;而实例变量则属于某个对象,它必须在创建对象后才可以
通过这个对象来使用。
4)使用方法不同。一个类只能有一个同名静态变量,无论是通过类或者任何一个实例对静态变量重新赋值,结果都是一样;而一个类创建多少个实例就会有多少个同名实
例变量,各实例变量存储空间不同,对其中一个实例变量重新赋值不影响其它实例的同名变量

JVM

method area,又叫静态区,跟堆一样,被所有的线程共享,它包含所有的class和static变量;方法区中包含的都是在整个程序中永远唯一的元素。
Stack area 栈(stack)区(VM栈和本地栈),分为3部分:基本类型变量区、执行环境上下文、操作指令区。每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。每个线程包含一个栈区,栈中只保存基础数据类型的对象的引用和自定义对象的引用,对象都存放在堆区中。栈区另外存放方法参数和局部变量,用于计算;
堆(heap)区存放对象,即类的实例。每个对象都包含一个与之对应的类的信息。jvm只含一个堆,被所有线程共享。堆中不存放基本类型的对象引用,只存放对象本身。

Java变量的分类

package codetest;public class Variable {public Variable(){}public Variable(int constructorVar){//No Initialization but only declare,and final only is permitted.System.out.println("constructorVar: "+ constructorVar);}static{int staticBlockVar ;//only final is permittedstaticBlockVar=2;//Modify the value of the static variableclassVar=1;System.out.println("staticBlockVar's value: "+staticBlockVar);//The variable is define in a static block, and Can't use out the block}{System.out.println("non-quasi-static");}int instanceVar=1;//The default value of 0 is automatically assigned to classVarint samenameVar;//instance variablestatic int classVar;void changVar(int newValOfMemberVar){//No Initialization but only declare,and final only is permitted.int samenameVar=1;//local variable,only final is permittedtry{this.samenameVar=3;//The use of a instance variable of the same name with local variable.System.out.println("The samenameVar local variable: "+ samenameVar);System.out.println("The samenameVar instance variable: "+this.samenameVar);instanceVar=newValOfMemberVar;classVar=2;int[] a;//do not initializeint[] array=new int[2];//Initialized to the default valuesarray[1]=2;//To the second element to the assignmentSystem.out.println("array[0]:"+ array[0]+ " array[1]:"+ array[1]);//System.out.println(a[0]);//error}catch(Exception ex){ex.toString();}//System.out.println(staticBlockVar);}public static void main(String[] args) {//静态变量可以直接使用类名引用 System.out.println("classVar: "+Variable.classVar);//实例变量必须通过对象来使用//System.out.println(Variable.member);//error:instanceVar is not a fieldVariable varObject =new Variable();System.out.println("varObject's instanceVar: "+varObject.instanceVar);//同一类的不同实例,分别为实例变量分配存储空间Variable varOb =new Variable();varOb.changVar(2);System.out.println("varOb's instanceVar: "+varOb.instanceVar);System.out.println("varObject's instanceVar: "+varObject.instanceVar);//同一类的静态变量,只分配一个存储空间System.out.println("classVar: "+Variable.classVar);System.out.println("varOb classVar: "+varOb.classVar);System.out.println("varObject classVar:" + varObject.classVar);}
}

1.1 class variable(类变量):声明在class内,method之外,且使用static修饰的变量,如上例中的classVar
1.2 instance variable(实例变量):声明在class内,method之外,且未使用static修饰的变量。如上例中的instanceVar
类变量与实例变量的相同点:
1)两者都可以用任意权限修饰符对访问权限加以限制;2)两者都可以被类自身的方法直接调用。3)两者都可以不显式初始化直接使用。java虚拟机会自动以默认值对它
们进行初始化,因此它没有违反java所有的变量必须初始化以后才能使用的约定。
类变量与实例变量的区别是:
1)存储位置不同。静态变量存储于方法区,而实例变量存储于堆区。
2)生命周期不同。静态变量在加载类过程中优先加载,其生命周期取决于类的生命周期;实例变量在创建实例时才创建,它的生命周期取决于实例的生命周期。
3)引用对象不同。静态变量属于类,被类的所有实例共享,可以直接使用类名来引用也可以通过类的实例引用;而实例变量则属于某个对象,它必须在创建对象后才可以
通过这个对象来使用。
4)使用方法不同。一个类只能有一个同名静态变量,无论是通过类或者任何一个实例对静态变量重新赋值,结果都是一样;而一个类创建多少个实例就会有多少个同名实
例变量,各实例变量存储空间不同,对其中一个实例变量重新赋值不影响其它实例的同名变量。
1.3 formal parameter variable(形参变量),包括一般方法参数变量(method parameter,声明在method小括号内的变量,如上例中的newValOfMemberVar)和构造器参数
变量(constructor parameter,声明在constructor小括号内的变量,如上例中的constructorVar)。java要求形参变量,只能使用默认访问权限和final声明,并且声明
时不能同时初始化。
1.4 local variable(狭义的局部变量):声明在method内的变量,只能以final修饰。
当方法内的局部变量与成员变量(指类变量或实例变量)同名时,以”this”关键字加以区别。如上例中实例变量sameanmeVar与方法changVar()中定义的局部变量
sameanmeVar同名,实例变量在使用时加前缀“this.”与局部变量加以区别。
1.5 exception-handler parameter(异常标识变量):声明在catch小括号内的变量,如上例中ex。
异常标识变更即catch方法的形参必须声明为Exception对象及其子对象类型,它只用于紧跟着的执行语句块内。
1.6 array element(数组):数组的元素值没有识别名称,必须透过数组和索引值(index)来识别,索引值从0开始。如上例中array数组第2个元素的使用。
新建一个数组,如果没有直接赋值,jVM会自动为它所有的元素初始为默认值。注意:是新建一个数组,不是声明一个数组。如上例中数组a[]只声明没有初始,使用会提
示错误。
1.7-1.8 static block variable(静态块变量主)和非静态块(non-quasi-static):声明在静态块内(static{…})或非静态块内({})的变量。如上例中的变量
staticBlockvar。它只能由final修饰,并且仅用于在声明的静态块内。
在使用这两种变量时要注意它们所在块的不同。一是执行时间不同。非静态变量是执行构造方法之前;静态块在类文件加载后的初始化阶段执行 。二是执行次数不同。静
态块只在类加载初始过程中执行一次;每一次初始化对象,都会导致一次非静态块的执行。这部分详细信息请参阅欣’s博客-《Java中自由块的执行顺序》。
2、根据变量内存来分类,Java变量有两种:
2.1 heap variable:占用的内存在heap中,这类变量包括了class variable,instance variable,array component,这类变量会自动被JVM初始化默认值。
2.2 stack variable:通常广义的局部变量(pan-local variable),其占的内存在stack中,这类变量包括了狭义的局部变量,method parameter,exception-handler
parameter,constructor parameter。狭义的局部变量不会被JVM初始化成默认值,使用者必须自行初始化该变量,但是parameter类(包括method parameter,exception-
handler parameter,constructor parameter)会被JVM初始化成传入值(即实参)。
3、根据使用方式来为变量分类,主要有三种:
3.1 class variable,与根据声明分类对应。
3.2 instance variable,与根据声明分类对应。
3.3 广义的局部变量,除了上面两种以及数组元素以外,都可视为广义的局部变量,数组通常被视为对象,array component视为对象的instance variable.
1、在Java中,所有的变量必须先声明再使用。
2、在static 方法中引用任何实例变量都是非法的。
一般来说,静态方法常常为应用程序中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。

java-基础-变量相关推荐

  1. java基础-变量定义

    java基础-变量定义 3.1.关键字总结表 3.2.常量 ​ 常量的意思是在程序执行的过程中不能改变的量 java常量的分类 常量分类 说明 举例 字符串常量 用字符串括起来的多个字符 " ...

  2. **JAVA入门基础2**(系列更新)———JAVA 基础变量

    **JAVA入门基础2**(系列更新)---JAVA 基础变量 Java基础 1.注释 2.标识符和关键字 2.1 标识符 2.2 关键字(keyword) 3.数据类型 3.1 基本数据类型 3.2 ...

  3. Java基础 —— 变量,选择,循环,数组,输入与输出等

    目录 嵌入式学JAVA Java安卓开发环境搭建并运行HelloWorld 概念引入 JavaSE,EE,ME的区别 JRE JDK 编程实操:从C面向过程转变 变量定义与输出 数组的定义与遍历(循环 ...

  4. 5、Java基础——变量和常量、数据类型、基本数据类型的默认值、内存单位的换算

    目录 课前先导 一.变量 1.变量的概念 2.变量的命名规则 3.变量的声明及应用 二.数据类型 三.基本数据类型的默认值 四.常量 1.常量的概念 2.常量的命名规范 五.知识点查缺补漏 课前先导 ...

  5. Java基础---变量(三)

    简单的说,我们可以把变量看作是个盒子,可以将钥匙.手机.饮料等物品存放在这个盒子中,也可以在需要的时候换成我们想存放的新物品. 在 Java 中,我们通过三个元素描述变量:变量类型.变量名以及变量值. ...

  6. java基础变量_Java基础语法之变量和常量

    上行没有"{"时,下行代码与上行首字母对齐 标识符 概述 在Java中对变量.常量.函数和语句块都是有名字的,他们的名字统称为Java标识符.是为类.对象.方法.变量.接口和自定义 ...

  7. java基础----变量与常量+作用域

    变量的作用域: 变量 类成员变量 static类成员变量 静态成员变量的有效范围可以跨类,甚至可以达到整个应用程序.除了可以在定义它的类内存取该变量,还可以以类名.静态变量名的方式在其他类中使用 实例 ...

  8. Java基础 - 变量的定义和使用

    变量定义 1 public class Main { 2 3 public static void main(String[] args) { 4 5 // 定义byte类型的变量 6 byte b ...

  9. JAVA——Java后端技术体系韩顺平框架图_韩顺平Java基础学习路线图

    第一阶段:Java基础 变量.控制结构.OOP(封装,继承,多态).数组.Java API.异常和处理.集合.泛型.IO.反射.网络通信 第二阶段:Java高级 Java多线程/高并发 1.1 并发基 ...

  10. Java基础教程,第三讲,运算符 变量定义 数据类型转换

    2019独角兽企业重金招聘Python工程师标准>>> 学完此次课程,我能做什么? 学完此次课程我们可以学会Java的运算符,以及数据类型的自动转换和强制转换. 学习此次课程,需要多 ...

最新文章

  1. 《数学之美》第14章 余弦定理和新闻的分类
  2. ux设计_UX设计101:
  3. 公办低分二本_这六所公办二本高校的计算机类相关专业值得低分段考生选择
  4. stub 和 skeleton 的讲解,自己实现一个stub和skeleton程序
  5. python自动保存ping结果_利用python获取Ping结果示例代码
  6. 手势UITapGestureRecognizer的tag
  7. 支持专业设计师的高端样机素材网
  8. ADO.Net中DataSete的应用
  9. 爬取网易某只股票2017-01到2018-01的数据
  10. DAX/PowerBI系列 - 玩转阿里云 Alicloud Pricing
  11. 开发环境 测试环境 定义_如何快速搭建ES开发测试环境?
  12. 一、宿主机Linux系统的基本环境设置
  13. 我的世界服务器修改世界难度,我的世界服务器空岛生存调难度指令 | 手游网游页游攻略大全...
  14. 国内域名国内服务器,不备案解决80端口不开放方法
  15. CWE 4.7中的新视图:工业控制系统的安全漏洞类别
  16. 【AI视野·今日CV 计算机视觉论文速览 第174期】Tue, 7 Jan 2020
  17. 如何只用与非门、或非门构成或门、与门、非门?
  18. ip-纯真库:批量获取ip归属地
  19. 深入理解 Android 9.0 Crash 机制(二)
  20. R语言 Fisher线性判别

热门文章

  1. SSH连接服务器报错(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED)的解决方案
  2. java 矩形重叠问题_两个矩形重叠的问题
  3. c语言16x32点阵显示汉字,点阵16*32滚屏显示汉字
  4. B2B 企业如何高效获客增长?
  5. 幸运大抽奖 | 神策 2020 数据驱动用户大会等你来
  6. 深度案例 | 微车:数据驱动价值,建立 1.3 亿车主的汽车生活平台
  7. CEO 赠书 |《跨越鸿沟》如何将梦想变为现实?
  8. 中国银河证券签约神策数据 数据赋能业务跨越性增长
  9. “触达率图”新功能上线,量化网页浏览深度
  10. websocket学习和群聊实现