从零开始学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);
	}

}

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



 

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

 

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fox_mt

真的帮助了你,而你又签好有钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值