`
fox_mt
  • 浏览: 23099 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

从零开始学java-(四)for ZCL:java变量

阅读更多

   上一次留的作业做的如何了,下面我们来一起讨论一下

1,我们今天写了这么多实例。他们的共同点是什么?

 我们的这些事例,共同点我们来总结一下,首先就是 public class [类名]

这个public是什么呢?是java 的访问控制,打个比方。跟权限似得,我是一个类,我把自己标记为public,那么,谁都可以来访问我,因为public就是公共的,所以随便来,如果是其他的那就不行了;java一共定义了11中修饰符,分别是什么,作用是什么,大家自己去寻找答案,下次我们再来讨论;

这次要说的就是目前我们写的类都是用public来修饰,对于现在的我们来说,public class [类名] 就是固定的

第二个共同点,就是方法; public static void main(String[] args){***}

public不用解释,公共的,谁都可以访问,static,是11种修饰符中的一种,俗称静态,void代表没有返回值,因为有的时候我们的方法可能需要返回一些东西,而测试的时候都打印在控制台了。所以我们没有返回值,main,就是方法名,为什么用这个呢,因为他是java应用程序的入口,换句话说,java 的应用程序必须要有main方法,java虚拟机就是通过这个方法来运行我们的程序。那么总结一下,我们定义方法的时候就是 public [是否静态] [返回值] [方法名] 是否静态这里,如果方法不是静态的,那么就没有修饰符。暂且我们先记下,后面会发现,public的位置,可以换成其他的控制修饰符

第三个共同点,每行都有分号,这个分号简单而重要,没有他,编译是不可能过去的,java是用分号来分隔每个句柄,句柄可以理解为每行,每个变量。

2,知道什么是变量么?我们今天得知识里面有么?哪些是呢?

上一篇的实例中有很多的变量,例如 int realInt = 22;类似的都是变量,变量的解释就是程序运行中会发生变化的量。这个概念对于我们来说很重要,程序是死的,但变量是活的,这样程序才能做不同的操作,完成不同的功能,查出不同的结果。回想下之前学过的内容,java是强类型语言,那么声明一个变量的时候必须的是什么东西呢?类型,每次声明,都必须制定变量的类型,否则会编译出错,因为java不知道他是谁了。从上一篇的例子中我们可以发现,声明的变量的时候就是

[类型] 变量名 = 变量值;

我们声明了类型之后,虚拟机就会申请一块内存空间,空间的名字就是变量名,如果我们没有对变量初始化,那么空间就是空的,没有值,如果初始化了,那么内存中保存的就是我们的变量值。

如果是同一类型的变量,我们也必须要写两行么?答案是否定的, 可以写在一行,如int a1,a2;用逗号分隔,不过建议还是分开写,清晰很多.

 

下面我就来详细的了解下变量

变量按照作用范围来划分,分为全局变量,局部变量

从字面看,第一个范围肯定大,这个全局就是指在整个类的范围之内都是有效的,局部就是在某个局部的范围内有效,这个局部范围,是变量所在的局部位置

这个概念并不复杂,在上代码之前,先来个小问题,main方法是static,也就是静态的,而声明的变量不是静态,下面代码就能看到,那么在main方法中能直接使用这个变量么?不能使用,怎么办呢?

好了,看代码

public class Variable{
	int var1 = 10;
	int var2 = 22;
	public static void main(String[] args){
		Variable var = new Variable();
		System.out.println("全局变量var1: " + var.var1);
		var.print();
	}

	public void print(){
		int var3 = 12;
		System.out.println("这个是局部变量var3: " + var3);
	}
}

  

再来看看结果



 

 

仔细观察我们的实例代码,在main方法中我们没有直接使用变量var1,为什么呢?自己去试试,直接使用var1,或者var2看看会发生什么?

来试试:看看编译的结果



         看到了,错误很明显,静态的上下文(main方法),引用了非静态的变量var1,所以,以后要记得了。

例子中,我们是使用Variable var = new Variable(); 来得到了var这个对象,然后使用了这个对象的属性var1

这里就出现两个概念了,对象,和属性;理解这两个概念,离不开类。类就是一类,经典的解释就是,人,是一个类,学生也是一个类,你,就是一个人,就是一个对象,你的眼睛,就是你的属性,这个属性,是在人这个类中定义出来,没眼睛那就是怪物了;那么new是干嘛的,这个就关键了,没有new就没有对象了,说的玄乎一点儿,母亲生孩子的时候,可以理解为new的过程,你的母亲的大人把你给new出来了。。然后你就有很多人类的属性。眼睛,鼻子,耳朵,等等,,,‘

下面我来看个错误的例子,那就是在不该引用的位置引用局部变量,这个不该引用的位置,就是不在局部变量的作用范围之内

看代码

public class Variable{
	static int var1 = 10;
	static int var2 = 22;
	public static void main(String[] args){
		System.out.println("全局变量var1: " + var1);
		System.out.println("局部变量var3: " + var3);
	}

	public void print(){
		int var3 = 12;
		System.out.println("这个是局部变量var3: " + var3);
	}
}

 

来,编译看看



 

看到了错误信息是:找不到符号?很明显就是他了,var是局部变量,定义在了print方法中,也就是说,除了print方法,谁都不能访问;

 好了,说完了根据作用范围划分,下面换个维度,根据变量类型划分,之前我们有提到过,八种基本数据类型,他们算作是一类,叫做基本类型,还有另外一类,叫做对象类型,对象类型,暂且先记下这个对象类型,之前讲了一点儿,后面会继续研究。基本类型的定义我们之前已经体会过了,这里就不再赘述

现在说了按两种维度来划分,下面来说第三种维度,这个维度和第一个维度,作用范围有点儿近似。第一个维度是作用范围,而第三个,是说按照所属范围来划分

变量按照所属范围来划分,也是两种; 类变量和成员变量,。他们很好区分,就是看变量声明的时候有没有static这个修饰符,例如,变量1:static int start = 1; 变量2: int end = 1; 很显然的看出,变量1是类变量,2是成员变量,这是看上去的区别,那么程序运行的时候他们有什么区别呢?是这样的,类变量是在类中直接定义的,不会随着类产生的对象变化而变化,上面我们说过,对象由类产生,一个类可以产生很多很多个对象,每个对象都是单独的个体,而类变量就是不管有多少个对象,也不管这些对象怎么变化,这个值都不会变,而成员变量则不然,他会随着对象的变化而变化,会有不同的值。

这个就不给代码了。大家感受一下就好了;

说完了变量的概念,那么变量怎么初始化呢?不知道初始化是什么?初始化就是赋个初值给变量了~\(≧▽≦)/~

直接来两段代码。大家猜猜结果,然后再说;接代码

第一段如下:

public class VariableVal{
	
	byte varByte;
	short varShort;
	int varInt;
	long varLong;
	float varFloat;
	double varDouble;
	char varChar;
	boolean varBoolean;

	public static void main(String[] args){
		VariableVal val = new VariableVal();
		System.out.println("数据varByte =" + val.varByte);
		System.out.println("数据varShort =" + val.varShort);
		System.out.println("数据varInt =" + val.varInt);
		System.out.println("数据varLong =" + val.varLong);
		System.out.println("数据varFloat =" + val.varFloat);
		System.out.println("数据varDouble =" + val.varDouble);
		System.out.println("数据varChar =" + val.varChar);
		System.out.println("数据varBoolean =" + val.varBoolean);
	}

}

 

 这个程序会输出什么?仔细思考下,思考不到,那么猜一猜,蒙一蒙。

在看过下面这段程序之后我们再说结果,go on

代码段二:

public class VariableVal{
	

	public static void main(String[] args){
		byte varByte;
		short varShort;
		int varInt;
		long varLong;
		float varFloat;
		double varDouble;
		char varChar;
		boolean varBoolean;
		System.out.println("数据varByte =" + varByte);
		System.out.println("数据varShort =" + varShort);
		System.out.println("数据varInt =" + varInt);
		System.out.println("数据varLong =" + varLong);
		System.out.println("数据varFloat =" + varFloat);
		System.out.println("数据varDouble =" + varDouble);
		System.out.println("数据varChar =" + varChar);
		System.out.println("数据varBoolean =" + varBoolean);
	}

 

 对比下这两端代码,第一个结果是这些变量,第一段程序的变量都是全局变量,第二段程序的变量都是局部变量

代码看完了,自己动手写一写,来看结果

结果1;

 

看到了,除了char没有值,其他的都被按照自己的类型输出了默认值

再看第二段结果

 

 额,第二段编译报错了,看看错误信息,说什么?变量没被初始化,也就是说全局变量不需要初始化,而局部变量必须初始化;其实全局变量不是不需要初始化,作为全局变量,java是由特殊照顾的,会偷偷的进行初始化。所以才能通过编译,正常运行。

 

好了,现在我们知道了很多概念,全局变量,局部变量;基本变量, 对象变量;类变量,成员变量;这些统称变量。是说java程序运行过程中需要的变量,事物都是两面的,有变的,那么就一定有不变的,程序运行中可能有的值一辈子都不会变,这种值我们就叫做常量;常量很特殊,从程序开始,到程序结束,恒久不变,手动改代码的不算啊!常量如果声明呢?

用关键字final来修饰的量就是常量,下面我们来声明个常量试试;看代码

public class VariableFinal{
	
	static final int finalVar = 10;
	public static void main(String[] args){
		
		System.out.println("数据finalVar =" + finalVar);
	}

}

     我们声明了一个类常量,看看结果



 

既然是类常量,永久不变,所以我们有一个便利,那就是可以直接引用,不需要先构建出来一个对象;怎么用,自己先考虑考虑,后面我们就会遇到了;

 

好了,这篇到此为止,下一篇,我们会来了解下运算符!

留个小问题,你所知道的运算符有哪些,他们可以按类型就行划分么?

  • 大小: 12.6 KB
  • 大小: 16 KB
  • 大小: 16.2 KB
  • 大小: 18.8 KB
  • 大小: 86.2 KB
  • 大小: 7.4 KB
分享到:
评论

相关推荐

    Z-Stack ZCL API.PDF

    TI公司的ZCL API函数技术文档。 ZCL = zigbee cluster library.

    bekko:ZigBee 应用层(APS、ZCL、ZDP)Java 实现

    纯 Java ZigBee 应用程序框架 Bekko提供用于开发 ZigBee 应用程序的 Java API,并允许用户应用程序与标准 ZigBee 设备进行通信。 与其他“XBee API Java-Wrapper”不同,Bekko 具有 ZDO/ZDP 实现和标准化的 APS 数据...

    ISE IP核使用说明

    很好的ISE IP核说明,写的很好,很详细,很适合初学者的学习

    The document was created with Spire.PDF for Java

    解决生成pdf文件第一页表头产生红色字体: Evaluation Warning : The document was created with Spire.PDF for Java

    Z-Stack ZCL API

    这个应该是zigbee里的开发文档,不知对大家是否有用。

    ist的matlab代码-ATC-Best-Practice-Guide:ABAP测试驾驶舱最佳实践指南

    所有测试类的类别为ZCL_CI_CATEGORY_DSAG 。 ZCL_CI_TEST_DSAG_PRETTY_PRINT 用于检查Pretty Print是否已应用于源代码的类。 ZCL_CI_TEST_COMP_PROCS 用于执行各种基于代码的测试的类(有关详细信息,请参见docu)。...

    abap-openapi-client:ABAP中的ABAP OpenAPI客户端生成器

    注意:生成的代码当前使用ZCL_OAPI_JSON,建议将实现复制到生成的全局类中的本地类 生成旨在在v702上运行 生成的客户端代码旨在在v702上运行 建筑/开发 prerequsites = 12+ 安装npm install npm test =运行单元...

    蓝桥杯单片机——09 定时器设计秒表.rar

    蓝桥杯单片机——09 定时器设计秒表,这个是我学习蓝桥杯单片机时,通过B站上的各种视频资源整理出来的代码。...相关链接《蓝桥杯单片机竞赛各模块总结》:https://blog.csdn.net/ZCL__/article/details/109250325

    蓝桥杯单片机——20 定时器.rar

    蓝桥杯单片机——20 定时器,这个是我学习...模式三:数码管前三位显示-3- 设定的数字开始倒计时,数字为0时蜂鸣器响。 相关链接《蓝桥杯单片机竞赛各模块总结》:https://blog.csdn.net/ZCL__/article/details/1

    zigbee-cluster-library-specification 2012版和最新版

    两份文档: zigbee-cluster-library-specification Document: 07-5123-06 zigbee-cluster-library-specification Document:ZigBee Document 075123r04ZB 2012

    zigbee ZCL开发大礼包

    一个是ZigBee Cluster Library 最新版的ZCL文档英文版,一个是Zigbee协议栈的API接口函数手册,二合一,自己找了好久,分享出来给大家,学习zigbee的人很有帮助,zigbee智能家居必看手册

    易语言ZCL_核库函数模块

    易语言ZCL_核库函数模块易语言ZCL_核库函数模块易语言ZCL_核库函数模块

    zcl/se/zcl.message.h

    这是STM32WB系列,基于IEEE 802.15.4的zigbee信息收发头文件zcl/se/zcl.message.h

    易语言模块ZCL_控件类库1.01.rar

    易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar 易语言模块ZCL_控件类库1.01.rar

    Zigbee_ZCL_07-5123-07-ZigbeeClusterLibrary_Revision_7

    2018年2月的新版的ZCL规范,新增和完善各个cluster的描述

    易语言模块ZCL_多线程类1.01.rar

    易语言模块ZCL_多线程类1.01.rar 易语言模块ZCL_多线程类1.01.rar 易语言模块ZCL_多线程类1.01.rar 易语言模块ZCL_多线程类1.01.rar 易语言模块ZCL_多线程类1.01.rar 易语言模块ZCL_多线程类1.01.rar

    学习计划模板合集7篇.docx

    学习计划模板合集7篇.docx学习计划模板合集7篇.docx学习计划模板合集7篇.docx学习计划模板合集7篇.docx学习计划模板合集7篇.docx学习计划模板合集7篇.docx学习计划模板合集7篇.docx学习计划模板合集7篇.docx

    易语言模块ZCL_核库函数1.01.rar

    易语言模块ZCL_核库函数1.01.rar 易语言模块ZCL_核库函数1.01.rar 易语言模块ZCL_核库函数1.01.rar 易语言模块ZCL_核库函数1.01.rar 易语言模块ZCL_核库函数1.01.rar 易语言模块ZCL_核库函数1.01.rar

    ZCL

    ZCL

    ZCL_SPEC_R7.pdf

    Zigbee联盟发布的最新版本的ZCL SPEC,可用于查阅zigbee各cluster及下属各中命令和属性,zigbee开发必备工具书.

Global site tag (gtag.js) - Google Analytics