变量

/*
    变量的第一个测试程序: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变量。
    }
原文地址:https://www.cnblogs.com/xlwu/p/13052795.html