变量

一、定义

  • 变量就是在程序运行过程中其值会发生改变的量。变量就是一个可以存储数据的容器。

  • 在 Java 语言中,所有的变量在使用前必须声明。

  • 变量存储在内存中开辟的存储空间中,根据数据类型的不同,存储空间的大小也会有所不同。

  • 变量的使用
    (1)声明变量的类型,让运行环境为其分配指定大小的空间
    (2)给变量起别名
    (3)为变量进行赋值(也称为初始化,通过=来赋值),也可以将已有变 量的值赋值给新的变量
    (4)通过变量名访问变量
    访问:取值、也可以是对值进行修改

  • ?变量定义时的注意点
    (1)需要使用一个变量时,一定要对该变量进行声明(类型加变量名),未经声明的变量不能使用
    (2)在一条语句中同时声明多个变量,多个变量定义之间用逗号隔开,变量的类型必须都是同一个类型的

    (3)未经初始化的变量不能使用
    (4)变量的初始化

    (5)对于变量中值的存取一定要与结果对应的类型相匹配
    (6)在同一个作用域范围内变量的名称不能重复

标识符

一、标识符命名规则——硬性要求:
  • 由数字、字母、下划线(_)和美元符($)组成
  • 不能以数字开头
  • 不能是关键字
  • 区分大小写
二、 驼峰命名法
  • 什么是驼峰命名法?
    大小驼峰的根本区别就在于首单词的首字母是否大写,若大写,则是大驼峰命名法,

    若是小写,则是小驼峰命名法,

    1. 大驼峰命名法
      大驼峰在前,首单词的首字母为大写字母,也就是说构成标识符的所有单词的首字母都大写,其余部分(单词的非首字母部分)都小写。
    2. 小驼峰命名法
      小驼峰在前,首单词的首字母为小写字母,也就是说构成标识符的首单词的首字母小写,其他单词的首字母都大写,且除了单词的首字母外的其他部分都小写。
    • 为啥要用驼峰命名法?

      a加强代码的可读性

    • 3.如何使用驼峰命名法

      a.小驼峰命名法的使用范围:

      变量名的命名、函数名(方法名)的命名等

      b.大驼峰命名法的使用范围:
      类名的命名、接口名、命名空间等

二、种类
  • null :表示无值。 将 null 赋给非原始变量相当于释放该变量先前所引用的对象。 不能将 null 赋给原始类型(byte、short、int、long、char、float、double、boolean)变量。

  • true :表示 boolean 变量的两个合法值中的一个。

  • false :代表 boolean 变量的两个合法值之一。

​ ## 关键字和保留字

  • 保留字:是语言已经定义过的字,一些保留字可能没有相对应的语法,考虑到扩展性,为了向后兼容不能再将其作为变量名。const和goto是java的保留字。 所有的关键字都是小写

  • 关键字:在语言中有特殊的含义成为语法的一部分。

    ![c75aa859bc95008955384714856f2509](C:\Users\86180\Documents\Tencent Files\3309135736\nt_qq\nt_data\Pic\2024-07\Ori\c75aa859bc95008955384714856f2509.png)

二、关键字的分类
  • 关键字分为:访问控制、类方法和变量修饰符、程序控制语句、错误处理、包相关、基本类型、变量引用。

  • 访问控制 修饰符的关键字(共3个):

    ![5e63fbe0c5c8106e56846406268ab7c5](C:\Users\86180\Documents\Tencent Files\3309135736\nt_qq\nt_data\Pic\2024-07\Ori\5e63fbe0c5c8106e56846406268ab7c5.png)

  • 类、方法和变量修饰符:

    定义类、接口、抽象类和实现接口、继承类的关键字、实例化对象(共6个)

    ![7e1cb64403ed3bf96d91bac256983ce3](C:\Users\86180\Documents\Tencent Files\3309135736\nt_qq\nt_data\Pic\2024-07\Ori\7e1cb64403ed3bf96d91bac256983ce3.png)

  • 修饰方法、类、属性和变量(共9个)

    ![a97321acbc623904911d18cb83a9b2be](C:\Users\86180\Documents\Tencent Files\3309135736\nt_qq\nt_data\Pic\2024-07\Ori\a97321acbc623904911d18cb83a9b2be.png)

  • 条件循环(流程控制)(共12个)

    (1) if

    (2) else

    (3) while

    (4) for

    (5) switch

    (6)case

    (7) default

    (8) do

    (9) break

    (10)continue

    (11)return

    (12)instanceof

  • 错误处理(共5个)

    (1) catch :用来在 try-catch 或 try-catch-finally 语句中定义异常处理块。

    (2) try :用于包含可能引发异常的语句块。

    (3)finally:用在异常处理的最后一个语句块,无论是否产生异常都要被执行。

    (4) throw :用于引发异常。

    (5) throws :可以应用于方法,以便指出方法引发了特定类型的异常。

  • 包的关键字(共2个)

    (1)import:使一个包中的一个或所有类在当前 Java 源文件中可见。

    (2)package:指定在 Java 源文件中声明的类所驻留的 Java 包。

    三、保留字分类
  • goto :但无任何作用。结构化程序设计完全不需要 goto 语句即可完成各种流程,而 goto 语句的使用往往会使程序的可读性降低,所以 Java 不允许 goto 跳转。

  • const:是一个类型修饰符,使用const声明的对象不能更新。与final某些类似。

数据类型?

![0354dbb59161bcf064c59497d61e8303](C:\Users\86180\Documents\Tencent Files\3309135736\nt_qq\nt_data\Pic\2024-07\Ori\0354dbb59161bcf064c59497d61e8303.png)

  1. 整数类型:byte、short、int、long
  • byte:1个字节,8位,256种状态,取值范围为【-128,127】
  • short:2个字节,16位,65536种状态,取值范围为【-32768,32767】
  • int:4个字节,32位,整数类型默认是int类型,取值范围约21亿
  • long:8个字节,64位,long类型表示long类型常量,要加L或者l,建议加L

​ 2.小数类型:float、double

  • float:4个字节,32位,单精度,能精确到6~7位,声明一个小数类型,要加F或者f,建议加F
  • double:8个字节,64位,双精度,能精确到15~16位,小数类型默认是double类型

​ 3.字符类型:char

  • char:2个字节,16位,字符表示Unicode(万国码)编码表中的每一个符号,每个符号使用单引号引起来,其中前128个符号和ASCII表相同

​ 4.布尔类型:boolean

  • boolean:占1位,有true和false2个值,一个表示真,一个表示假,一般用于表示逻辑运算
二、引用类型

![66f47dfe043d9cb8203995070b1f7812](C:\Users\86180\Documents\Tencent Files\3309135736\nt_qq\nt_data\Pic\2024-07\Ori\66f47dfe043d9cb8203995070b1f7812.png)

  • 引用类型指向一个对象,不是原始值,指向对象的变量是引用变量

  • 在java里面除去基本数据类型的其他类型都是引用类型,自己定义的class类都是引用类型,可以像基本类型一样使用。

  • 引用类型常见的有:String、StringBuffer、ArrayList、HashSet、HashMap等

    数据类型转换?

一、隐式类型转换
隐式类型转换,由系统自动完成的类型转换。从存储范围小的类型到存储范围大的类型。由于实际开发中这样的类型转换很多,所以Java语言在设计时,没有为该操作设计语法,而是由JVM自动完成。
	转换规则: 从存储范围小的类型到存储范围大的类型。
	具体规则为: byte→short(char)→int→long→float→double
也就是说byte类型的变量可以自动转换为short类型
注意问题
  • 在整数之间进行类型转换时,数值不发生改变,而将整数类型,特别是比较大的整数类型转换成小数类型时,由于存储方式不同,有可能存在数据精度的损失。

    二、显式类型转换
    (显式类型转换),从存储范围大的类型到存储范围小的类型。该类类型转换很可能存在精度的损失。
    
    • 转换规则: 从存储范围大的类型到存储范围小的类型。

    • 具体规则为: double→float→long→int→short(char)→byte

      注意问题
      	强制类型转换通常都会存储精度的损失,所以使用时需要谨慎。
      

运算符?

![e487a94e866e1e70eb204a8dbf795972](C:\Users\86180\Documents\Tencent Files\3309135736\nt_qq\nt_data\Pic\2024-07\Ori\e487a94e866e1e70eb204a8dbf795972.png)

一、i++与++
  • 首先两者的区别是:前者是先赋值,然后再自增;后者是先自增,后赋值

  • ++i和i++都是分两步完成的。因为++i 是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i = a =b,即 ++i 是一个左值;i++ 的后面一步是自增,不是左值。

  • ++i 和i++ 的使用,一般来说在循环域里面,这两者并没有什么很大的区别,因为编译器一般都会给你做优化。但是要注意其生存周期,以及很难察觉的写脏,就好像指针delete以后一定要赋予0一样,我们要注意i值在程序流中的变化。

    二、&与&&

    &(按位与)和&&(逻辑与)的区别:

    • &&具有短路功能,而&不具有短路功能。

    • 当&运算符两侧的表达式的结果均为真时,整个运算结果才为真。

    • 当&&操作符第一个表达式为 false时,结果为 false,并且不再计算第二个表达式。

    三、|与||

    1.“|”运算符:不论运算符左侧为true还是false,右侧语句都会进行判断,下面代码

    int a =1,b=1;        
    if(a++ == 1 | ++b == 2)
        System.out.println("true");
    System.out.println("a= "+ a + "  ,b=  " + b);
    

    左侧为true,右侧为true,输入出结果为:

    true
    a= 2  ,b=  2
    

    2.“||”运算符:若运算符左边为true,则不再对运算符右侧进行运算,如下代码:

    1 int a =1,b=1;        
    2 if(a++ == 1 || ++b == 2)
    3     System.out.println("true");
    4 System.out.println("a= "+ a + "  ,b=  " + b);
    

    左侧为true,所以没有判断运算符右侧语句,输出结果为:

    1 true
    
    2  a= 2  ,b=  1
    
四、>与>>?

1.检查左操作数的值是否大于右操作数的值,如果是那么条件为真。

按位右移运算符。左操作数按位右移右操作数指定的位数。