变量
一、定义
-
变量就是在程序运行过程中其值会发生改变的量。变量就是一个可以存储数据的容器。
-
在 Java 语言中,所有的变量在使用前必须声明。
-
变量存储在内存中开辟的存储空间中,根据数据类型的不同,存储空间的大小也会有所不同。
-
变量的使用
(1)声明变量的类型,让运行环境为其分配指定大小的空间
(2)给变量起别名
(3)为变量进行赋值(也称为初始化,通过=来赋值),也可以将已有变 量的值赋值给新的变量
(4)通过变量名访问变量
访问:取值、也可以是对值进行修改 -
?变量定义时的注意点
(1)需要使用一个变量时,一定要对该变量进行声明(类型加变量名),未经声明的变量不能使用
(2)在一条语句中同时声明多个变量,多个变量定义之间用逗号隔开,变量的类型必须都是同一个类型的(3)未经初始化的变量不能使用
(4)变量的初始化(5)对于变量中值的存取一定要与结果对应的类型相匹配
(6)在同一个作用域范围内变量的名称不能重复
标识符
一、标识符命名规则——硬性要求:
- 由数字、字母、下划线(_)和美元符($)组成
- 不能以数字开头
- 不能是关键字
- 区分大小写
二、 驼峰命名法
-
什么是驼峰命名法?
大小驼峰的根本区别就在于首单词的首字母是否大写,若大写,则是大驼峰命名法,若是小写,则是小驼峰命名法,
- 大驼峰命名法
大驼峰在前,首单词的首字母为大写字母,也就是说构成标识符的所有单词的首字母都大写,其余部分(单词的非首字母部分)都小写。 - 小驼峰命名法
小驼峰在前,首单词的首字母为小写字母,也就是说构成标识符的首单词的首字母小写,其他单词的首字母都大写,且除了单词的首字母外的其他部分都小写。
-
为啥要用驼峰命名法?
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)
- 整数类型: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.检查左操作数的值是否大于右操作数的值,如果是那么条件为真。
按位右移运算符。左操作数按位右移右操作数指定的位数。