上一次留的作业做的如何了,下面我们来一起讨论一下
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); }
对比下这两端代码,第一个结果是这些变量,第一段程序的变量都是全局变量,第二段程序的变量都是局部变量
代码看完了,自己动手写一写,来看结果
看到了,除了char没有值,其他的都被按照自己的类型输出了默认值
额,第二段编译报错了,看看错误信息,说什么?变量没被初始化,也就是说全局变量不需要初始化,而局部变量必须初始化;其实全局变量不是不需要初始化,作为全局变量,java是由特殊照顾的,会偷偷的进行初始化。所以才能通过编译,正常运行。
好了,现在我们知道了很多概念,全局变量,局部变量;基本变量, 对象变量;类变量,成员变量;这些统称变量。是说java程序运行过程中需要的变量,事物都是两面的,有变的,那么就一定有不变的,程序运行中可能有的值一辈子都不会变,这种值我们就叫做常量;常量很特殊,从程序开始,到程序结束,恒久不变,手动改代码的不算啊!常量如果声明呢?
用关键字final来修饰的量就是常量,下面我们来声明个常量试试;看代码
public class VariableFinal{ static final int finalVar = 10; public static void main(String[] args){ System.out.println("数据finalVar =" + finalVar); } }
我们声明了一个类常量,看看结果
既然是类常量,永久不变,所以我们有一个便利,那就是可以直接引用,不需要先构建出来一个对象;怎么用,自己先考虑考虑,后面我们就会遇到了;
好了,这篇到此为止,下一篇,我们会来了解下运算符!
留个小问题,你所知道的运算符有哪些,他们可以按类型就行划分么?