/*
变量的第一个测试程序:Var是变量
1 关于程序当中的数据?
开发软件是为了解决现实世界中的问题。
而现实世界当中,有很多问题都是使用数据进行描述的。
所以软件执行过程中最主要的就对数据的处理。
软件在处理数据之前需要能够表示数据,在java代码中怎么去表示数据呢?在java中有这样的一个概念:字面量。
注意:在java语言中“数据”被称为“字面量”。
10
1.23
true
false
'a'
"abc"
以上这些都是数据,在程序中被叫做“字面量”。
字面量可以分为很多种类:
整数型字面量 1 2 3 100 -100 -20 ....
浮点型字面量 1.3 1.2 3.14.....
布尔型字面量 true false 没有其他值了,表示真和假,true表示真,false表示假
字符型字面量 'a' 'b' '中'
字符串型字面量 "abc" "a" "b" "中国"
其实字符型和字符串型都是描述了现实世界中的文字:
需要注意的是:
所有的字符型只能使用单引号括起来。
所有的字符串型只能使用双引号括起来。
字符型一定是单个字符才能成为"字符型"。
在语法级别上怎么区分字符型和字符串型?
主要看是双引号还是单引号
单引号的一定是字符型
双引号的一定是字符串型。
2 什么是变量?
*/
public class VarTest{
public static void main(String[] args){
System.out.println(100);
System.out.println(3.14);
System.out.println(true);
System.out.println(false);
System.out.println('a');
System.out.println('中');
System.out.println("abc");
System.out.println("国");//这不属于字符型,因为使用双引号括起来了,所以他是字符串。
System.out.println('好');//属于字符型
System.out.println("好");//属于字符串型
System.out.println("1");//属于整数型吗?不是,是字符串。
//分析一下:如果只有字面量,没有变量机制的话,会有什么问题?
//10 是一个整型数据,在内存中占有一定的空间(CPU 内存 硬盘)
//10 + 20 = 30
//在内存中找一块空间存储10,在找一块空间存储20, CPU负责“+”运算,算完之后的结果是30,那么这个30也会在内存当中找一块临时的空间存储起来。
//思考:以下的三个100在内存中是一块空间,还是三块不同的空间呢?
//以下虽然都是100,但是这3个100占用三块不同的内存空间。
System.out.println(100);
System.out.println(100);
System.out.println(100);
System.out.println(100);
System.out.println(100);
System.out.println(100);//只有“字面量”机制的话,是远远不够的,因为只有字面量内存是无法重复利用的。
//定义/声明一个变量,起名i
int i = 10;
//以下这5次访问都是访问的同一块内存空间。(这样使用变量之后,内存空间就得到了复用)
System.out.println(i);
System.out.println(i);
System.out.println(i);
System.out.println(i);
System.out.println(i);
//以下程序标识访问的是字符i以及字符串i,以下的这两个i和以上的i变量没有任何关系。
System.out.println('i');
System.out.println("i");
}
}
/**
* 变量测试类2
* @author 吴欣麟
* @version 1.1
* @since 1.0
*/
/*
什么是变量?
变量其实就是内存当中存储数据的最基本的单元。
变量就是一个存储数据的小盒子。
在java语言当中任何数据都是有数据类型的,其中整数型是:int
没有为什么,Java中规定的,整数型就是:int
当然,在java中除了数据类型int之外,还有其他的类型,例如带小数的:double等。。。
数据类型有什么用?
记住:不同的数据类型,在内存中分配的空间大小不同。
也就是说,java虚拟机到底给这个数据分配多大的空间,主要还是看这个变量的数据类型是什么,根据不同的类型,分配不同大小的空间。
对于int这种整数类型,JVM会自动给int分配4个字节大小的空间。
1个字节 = 8个比特位
1个比特位就是一个1或0。注意:比特位是二进制位。
int是占用多少个二进制位?32个二进制位(4*8 bit位)
int i = 1;实际上在内存中是这样表示的:
00000000 00000000 00000000 00000001
int i = 2
00000000 00000000 00000000 00000010
二进制位就是:满2进1位(0 1 10 11 100 101......)
十进制为就是 满10进1位(1 2 3 4 5 6 7 8 9 10)
对于一个变量来说,包括三要素:
变量的数据类型
变量的名字
变量中保存的值
有类型+名字+值
类型决定空间的大小
起个名字是为了以后方便访问。(以后在程序中访问这个数据是通过名称来访问的)
值是变量保存的数据
变量名属于标识符吗?
变量名命名规范中是怎么说的?
首字母小写,后面每个单子首字母大写,遵循驼峰命名方式,见名知意。
变量怎么声明/定义,语法格式是什么?
数据类型 变量名;
例如:
int age = 20;
在java语言中有一个规定,变量必须先声明,再赋值才能访问。(没有值相当于这个空间没有开辟一样)
在java语言中怎么给一个变量赋值呢,语法格式是什么?
记住:使用一个运算符,叫做“=”,这个运算符被称为赋值运算符。
赋值运算符“=”的运算特点是:等号右边先执行,执行完之后赋值给左边的变量。
变量可以声明的时候赋值吗?可以的。
*/
public class VarTest02{
/**
* 这是一个程序的入口
* @param args是main方法的参数
*/
public static void main(String[] args){
//定义一个int类型的变量,起名age,该变量用来存储人的年龄。
int age;
//变量声明之后,没有手动赋值,可以直接访问吗?
//编译报错:错误: 可能尚未初始化变量age
//System.out.println(age);
//给变量赋值
age = 45;
System.out.println(age); //这是访问变量
System.out.println("age");//这是访问字符串
//变量:可以变化的量。
age = 80;
System.out.println(age);
// 再次重新赋值
age = 90;
System.out.println(age);
//体重80kg
int weight = 80;
System.out.println(weight);
}
}
public class VarTest03{
public static void main(String[] args){
// 在这里可以访问k变量吗?
// 注意:方法体当中的代码遵循自上而下的顺序依次逐行执行。
// 所以以下程序编译报错。
System.out.println(k);//错误: 找不到符号
// 只有执行了这一行代码,k变量在内存中才会开辟空间。
int k = 10;
}
}
// 重要的结论:在同一个域当中(这个域怎么理解,后面讲),变量名不能重名,不能重复声明。
public class VarTest04{
public static void main(String[] args){
// 声明一个整数型的变量起名nianLing,存储值20
int nianLing = 20;
System.out.println(nianLing);
// 给变量重新赋值
ninaLing = 30;
System.out.println(nianLing);
//这个可以吗?不行
int nianLing = 100; //错误: 已在方法 main(String[])中定义了变量 nianLing
System.out.println(nianLing);
}
}
变量的作用域
出了大括号就不认识了。别的先别管。
{
int i = 100;
{
在这里可以访问i
}
}
{
在这里是无法访问i变量。
}