Java基础篇 | 变量

简介: Java基础篇 | 变量

知识框架

595db472c880411d9c21e2b75c51c8d9.png

🏀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"、"中国"


❤️其中字符型和字符串型都是描述了现实世界中的文字:

    ⭐️需要注意的是:

               所有的字符型只能使用单引号括起来;

               所有的字符串型只能使用双引号括起来;                  

               字符型一定是单个字符才能成为“字符型”;

               字符串型既可以单个字符也可以是多个字符;

    ⭐️在语法级别上怎么区分字符型和字符串型?

               主要看是双引号还是单引号。

               单引号的一定是字符型。

               双引号的一定是字符串型。


❤️分析:如果只有字面量,没有变量机制的话,有什么问题?

    ⭐️例如:10 是一个整数型数据,在内存中占有一定的空间(CPU 内存 硬盘)要计算10 + 20 = 30,需要在内存中找一块空间存储10,再找一块空间存储20,CPU负责“+”运算,算完之后的结果是30,那么这个30也会在内存当中找一块临时的空间存储起来。

    ⭐️思考:以下的三个10在内存当中是一块空间,还是三块不同的空间呢?


以下虽然都是10,但是这3个10占用三块不同的内存空间。

   

1. System.out.println(10);
2. System.out.println(10);
3. System.out.println(10);

 ⭐️总结:只有“字面量”机制的话,是远远不够的,因为只有字面量内存是无法重复利用的


🏀2.变量


// 定义、声明一个变量,起名i
    int i = 1000;
    System.out.println(i);
    System.out.println(i);
    System.out.println(i);


⭐️以上这3次访问都是访问的同一块内存空间。这样使用变量之后,内存空间就得到了复用。这就是定义变量的好处!


🥅变量的概述


❤️什么是变量?

     ⭐️变量其实就是内存当中存储数据的最基本的单元。

     ⭐️变量就是一个存储数据的盒子。


❤️在java语言当中任何数据都是有数据类型的,其中整数型是:int;浮点型:double等


❤️数据类型有什么用呢?

     ⭐️注:不同的数据类型,在内存中分配的空间大小不同。

     ⭐️也就是说,Java虚拟机到底给这个数据分配多大的空间,主要还是看这个变量的数据类型。根据不同的类型,分配不同大小的空间。


❤️对于int这种整数类型,JVM会自动给int分配4个字节大小的空间。

   ⭐️1个字节=8个比特位;1个比特位就是一个1或0。

   ⭐️注意:比特位是二进制位。所以1个int占有32个二进制位(bit位)

   ⭐️int i = 1; 实际上在内存中是这样表示的:00000000 00000000 00000000 00000001


❤️对于一个变量来说,包括三要素:类型+名字+值;例如:int  i = 10

    ⭐️变量的数据类型;类型决定空间的大小。

    ⭐️变量的名字; 名字是为了以后方便访问。

    ⭐️变量中保存的值;值是变量保存的数据。


❤️变量名属于标识符

    ⭐️首字母小写,后面每个单词首字母大写,遵循驼峰命名方式,见名知意。


    ⭐️例如:int i = 10;int nianLing = 20

❤️变量怎么声明/定义,语法格式是什么?

    ⭐️数据类型 变量名; 例如:int nianLing;

    ⭐️在java语言中有一个规定,变量必须先声明,再赋值才能访问。

      (没有值相当于这个空间没有开辟。)

    ⭐️例如:

public class Var{
  public static void main(String[] args){
    //1.先声明,在赋值
    int nianLing;
    nianLing = 20;
    System.out.println(nianLing);//20
        //还可以继续重新赋值
        nianLing = 80;
    System.out.println(nianLing);//80
    //2.边声明,边赋值
    int weight = 70;
    System.out.println(weight);//70
  }
}

🥅变量的使用、分类和作用域


❤️先理解域的含义


1.        {A域
2.          {B域
3.            {C域
4.            }
5.          }
6.        }


⭐️一个大括号代表一个域。

⭐️在“同一个域”当中,变量名不能重名!并且在当前域定义的变量,出了这个域就销毁了。

❤️例1:

public class VarTest03{
  public static void main(String[] args){
    // 在这里可以访问k变量吗?
    // 注意:方法体当中的代码遵循自上而下的顺序依次逐行执行。
    // 所以以下程序编译报错。
    System.out.println(k); //错误: 找不到符号
    // 只有执行了这一行代码,k变量在内存中才会开辟空间。
    int k = 10;
  }
}

⭐️对于一个变量我们一定要先声明再赋值,才能够访问;所以一定要注意代码运行的顺序!

⭐️这里主要掌握报错的信息!错误: 找不到符号;这样以后编写代码出现相同的错误就会知道问题所在!

补充:编译所有的.java文件,javac *.java

❤️例2:

// 重要的结论:在同一个域当中,变量名不能重名,不能重复声明。
// 变量可以重新赋值,但在同一个域当中,不能重复声明。
public class VarTest04{
  public static void main(String[] args){
    // 声明一个整数型的变量起名nianLing,存储值20
    int nianLing = 20;
    System.out.println(nianLing);
    // 给变量重新赋值
    nianLing = 30;
    System.out.println(nianLing);
    // 错误信息:错误: 已在方法 main(String[])中定义了变量 nianLing
    int nianLing = 100;
    System.out.println(nianLing); //err,是在同一个方法体重定义相同的变量
  }
}

⭐️在同一个域中,可以对同一个变量进行重新赋值;但是不能重新定义相同的变量名!

❤️例3:

// 编译报错:类型不同,i变量也不能重复。(和类型没有关系。不能同名。)
public class VarTest05{
  public static void main(String[] args){
    // 整数型
    int i = 100;  
    System.out.println(i);
    // 浮点型(带小数的)
    // 错误: 已在方法 main(String[])中定义了变量 i
    double i = 1.2;
    System.out.println(i);//err
  }
}

⭐️计算时不同的类型,也不能定义相同的变量名!总之要杜绝定义相同的变量名!

❤️例4:

// 一行上可以同时声明多个变量
public class VarTest06{
  public static void main(String[] args){
    // 声明三个变量,都是int类型,起名a,b,c
    // 通过测试得出结论是:a,b没有赋值,c赋值100
    int a, b, c = 100;
    //1.错误: 可能尚未初始化变量a
    System.out.println(a);//未初始化,编译器会报错
    //2.错误: 可能尚未初始化变量b
    System.out.println(b);//未初始化,编译器会报错
        //3.正确
    System.out.println(c);
    // 给a、b赋值,然后才可以调用
    a = 200;
    b = 300;
    System.out.println(a);//初始化后就可以正常访问了
    System.out.println(b);//初始化后就可以正常访问了
  }
}

⭐️可以一行声明多个变量,变量与变量之间用逗号隔开,最后以分号结尾


⭐️例如:int a,b,c=10; 表示定义三个整型变量,但是只有c初始化赋值了可以直接调用;a和b要想使用必须先初始化一个值,才能被调用!


❤️例5:


(1)变量根据出现的位置进行划分:

       在方法体当中声明的变量:局部变量。

       类体内声明,在方法体之外的变量:成员变量。

(2)注意:局部变量只在方法体当中有效,方法体执行结束该变量的内存就释放了。

public class VarTest07{
  //1.在类体重声明:成员变量
  int i = 100;
  // 主方法
  public static void main(String[] args){
    //2.在方法体重声明:局部变量
    int k = 100; // 在方法体中声明,main方法结束k内存空间释放。
  }
}


⭐️变量主要分分为两种:成员变量和局部变量

   在类体内,方法体之外声明的是:成员变量;成员变量又分为:实例变量和静态变量

   在方法体内声明的是:局部变量,并且局部变量只在当前的方法体中有效;

public class Test {
 //1类体中声明---成员变量-----默认会赋初始值
      //1.1没有static修饰---实例变量
      int x;
      //1.2有static修饰---静态变量
      static int y;
    public static void main(String[] args) {
 //2.方法体中声明---局部变量-----默认不会赋初始值
     //局部变量---直接就能访问
        int i = 10;
        System.out.println(i);
      //实列变量---需要new对象才能能访问
        Test t = new Test();
        System.out.println(t.x);
      //静态变量---可以直接用“类名.”进行访问
        System.out.println(Test.y);//因为是本类当中,所以Test还可以省略
    }
}

❤️例6:就近原则(成员变量和局部变量)

(1)变量的有效范围:出了大括号(当前作用域)就销毁了

(2)java中有一个很重要的原则:就近原则

public class VarTest08{
  //1.定义在类体中:成员变量
  static int i = 10000;
  public static void main(String[] args){
        //2.定义在方法体中:局部变量
        //i的有效范围是main方法
    int i = 100; 
    System.out.println(i); //100,就近原则
  }
  //这个方法怎么定义,后面会学习。
  public static void x(){
        //3.定义在方法体中:局部变量
        //i的有效范围x方法
    //所以这个i和main方法中的i不在同一个域当中。不冲突!
    int i = 200; 
  }
    //4.在for循环里定义变量,n作用域只在for域
    for(int n = 0; n < 10; n++){ 
    }
    // for循环执行结束之后,在这里访问n变量可以吗?
    System.out.println(n); //错误: 找不到符号,不能继续访问n
        //这里声明的n变量只属于for域。for结束后n释放没了。
    //5.在for循环外定义变量,作用域实际上在main域
    int k = 0;
    for(k = 0; k < 10; k++){ 
    }
        System.out.println(k);//可以继续访问k
        //这里就能正常访问
}


⭐️定义子在类中体的变量(成员变量)和定义在方法体中的变量(局部变量),就算变量名相同,也不会冲突;可以正常编译。


⭐️定义在不同方法体中的相同变量,也不会冲突;可以正常编译。


⭐️对于成员变量和局部变量,根据就近原则,优先访问局部变量。


🥅小试牛刀


❤️输出学生信息包括:学号、姓名、性别、身高

public class Stu{
  public static void main(String[] args){
    //学号,定义整型用int
    int number = 1234;
    System.out.println("学号:"+number);//+号,类似于两个字符串进行拼接
    //姓名,定义为字符串型String
    String name = "张三";
    System.out.println("姓名:"+name);
    //性别,定义为字符型char
    char sex = '男';
    System.out.println("性别:"+sex);
    //身高,定义为浮点型height
    double height = 1.85;
    System.out.println("身高:"+height);
  }
}

5950a6294cc24994ad8ea69eae6b3508.png

相关文章
|
11天前
|
Java 程序员 容器
Java中的变量和常量:数据的‘小盒子’和‘铁盒子’有啥不一样?
在Java中,变量是一个可以随时改变的数据容器,类似于一个可以反复打开的小盒子。定义变量时需指定数据类型和名称。例如:`int age = 25;` 表示定义一个整数类型的变量 `age`,初始值为25。 常量则是不可改变的数据容器,类似于一个锁死的铁盒子,定义时使用 `final` 关键字。例如:`final int MAX_SPEED = 120;` 表示定义一个名为 `MAX_SPEED` 的常量,值为120,且不能修改。 变量和常量的主要区别在于变量的数据可以随时修改,而常量的数据一旦确定就不能改变。常量主要用于防止意外修改、提高代码可读性和便于维护。
|
1月前
|
Java 编译器
java“变量 x 可能未被初始化”解决
在Java中,如果编译器检测到变量可能在使用前未被初始化,会报“变量 x 可能未被初始化”的错误。解决方法包括:1. 在声明变量时直接初始化;2. 确保所有可能的执行路径都能对变量进行初始化。
|
2月前
|
存储 Java
java基础(7)变量以及变量的分类
Java变量是内存中存储数据的基本单元,包含数据类型、名称和字面值。变量的数据类型决定了分配的内存空间大小。变量声明格式为“数据类型 变量名;”,变量名应符合标识符命名规范。变量可以重新赋值,但数据类型需一致。变量可以一行声明多个,作用域决定了变量的可用范围。变量分为局部变量和成员变量,局部变量定义在方法体内,成员变量定义在方法体外、类体内。
42 2
|
19天前
|
Java 编译器
Java重复定义变量详解
这段对话讨论了Java中变量作用域和重复定义的问题。学生提问为何不能重复定义变量导致编译错误,老师通过多个示例解释了编译器如何区分不同作用域内的变量,包括局部变量、成员变量和静态变量,并说明了使用`this`关键字和类名来区分变量的方法。最终,学生理解了编译器在逻辑层面检查变量定义的问题。
Java重复定义变量详解
|
27天前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
1月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
77 4
|
1月前
|
Java
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
本文探讨了在Java中,当父类的方法返回`this`对象或变量时,子类调用该方法的行为,以及`this`关键字在不同类中调用方法时的指向问题。
16 0
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
|
2月前
|
存储 Java 开发者
【Java新纪元启航】JDK 22:解锁未命名变量与模式,让代码更简洁,思维更自由!
【9月更文挑战第7天】JDK 22带来的未命名变量与模式匹配的结合,是Java编程语言发展历程中的一个重要里程碑。它不仅简化了代码,提高了开发效率,更重要的是,它激发了我们对Java编程的新思考,让我们有机会以更加自由、更加创造性的方式解决问题。随着Java生态系统的不断演进,我们有理由相信,未来的Java将更加灵活、更加强大,为开发者们提供更加广阔的舞台。让我们携手并进,共同迎接Java新纪元的到来!
65 11
|
3月前
|
Java
【Java基础面试七】、请介绍一下实例变量的默认值
这篇文章介绍了Java中实例变量的默认值:引用数据类型的默认值是null,而基本数据类型的默认值根据其类型分别是0、0L、0.0F、0.0、'\u0000'和false。
【Java基础面试七】、请介绍一下实例变量的默认值
|
2月前
|
存储 Java 程序员
优化Java多线程应用:是创建Thread对象直接调用start()方法?还是用个变量调用?
这篇文章探讨了Java中两种创建和启动线程的方法,并分析了它们的区别。作者建议直接调用 `Thread` 对象的 `start()` 方法,而非保持强引用,以避免内存泄漏、简化线程生命周期管理,并减少不必要的线程控制。文章详细解释了这种方法在使用 `ThreadLocal` 时的优势,并提供了代码示例。作者洛小豆,文章来源于稀土掘金。