目录
注释
关键字
常量
变量
变量的分类
整数类型(整型)
浮点类型(浮点型)
字符类型(字符型)
布尔类型(布尔型)
编码表
数据类型运算时一些特殊的情况
byte b=4;编译不报错,而float f=3.3编译报错,这是为什么呢?
long l=12345678,什么时候加L,什么时候不用加?
char ch=65; int i=’a’字符与整数值相互赋值的原因是什么?
为什么byte b=3+7编译不出错,byte b1=3; byte b2=7 byte b=b1+b2出错?
标识符
类型转换
用于解释说明程序的文字
注释其实不用怎么记,之后都用ctrl+/(单行注释)和ctrl+shift+/(多行注释)快捷键就可以
//:单行注释
/* */:多行注释
/** */:文档注释:可以通过javadoc.exe命令提取Java文件中的文档注释
注释的内容不会被编译到class文件当中,只是给程序员看源文件方便
概念:被java赋予了特殊含义的单词 例如class static void public等等,
特点:关键字都是小写的
概述:在程序执行的过程中,固定不变的量
– 字符串常量 用双引号括起来的内容(“HelloWorld”)
– 整数常量 所有整数(12,-23)
– 小数常量 所有小数(12.34)
– 字符常量 用单引号括起来的单个字符,单引号之间没有字符不行,多个字符也不行,有且仅有一个字符(‘a’,’A’,’0’)
– 布尔常量 较为特有,只有true和false
– 空常量 null 代表没有任何数据(数组,对象部分讲解)
变量概述:程序运行期间,内容可以发生改变的量,变化的数据,本质是内存中的一块存储区域。普通理解变量就是数学中的未知数,该区域有自己的类型(数据类型)和名称(变量名),并且该区域的数据在统一类型范围内不断变化
定义变量格式:数据类型 变量名=初始化值(当数据不确定时定义变量)
变量的分类按数据类型分,分为基本数据类型和引用数据类型
基本类型包括整数,小数,字符,布尔; 引用类型包括:类, 接口, 数组, 枚举, 注解
声明数据类型等于在内存中开辟了一块空间,这些数据类型都可以看做是一个碗,只是碗的大小不一样,东西要碗装得下才行,如果强行装,最低的八位,或者十六位等可以装进去,高位的就没了,数据会失真
Byte,short,int,long分别是1,2,4,8字节,一个字节是8位,每一位上我们可以放0或者1(相当于一个开关),记住byte范围:-128到127,声明Long类型的时候数据要加个L以示声明,如果对byte、short、char类型赋值时,没有超出当前数据类型取值范围则是可以直接赋值的long b = 12345678909; //出现编译错误,原因:右侧的值默认为int类型,但是该值已经超出int类型取值范围,
解决办法:将右侧的值变为long类型,也就是在该值后面添加l或L,当右边的整数在int类型的范围内时,不用加L,当超出int范围到了long范围就要加L,以表示这是一个长整形的数,给他一种身份的象征,否则编译不通过,会提示这是一个过大的整数
其实往一个数据类型里面赋值都分两步进行,假如说右边是一个整数,那么默认是int类型,第一步就看整数是否超出了Int类型的数据范围,第二步看右边的整数是否超出了左边声明的数据类型的数据范围
例如byte b =1234; 我们分析得知第一步1234数字在Int数据范围内没错,再看1234是否在byte数据范围内,而byte的范围是-128到127,超出范围,所以编译时会报错
浮点类型表示带小数点的数值,分别是float和double,分别是单精度和双精度,单精度尾数精确到7位有效数字,占用4个字节,而双精度是14位,占用8个字节,也就是说你声明了一个float类型的数值,就算小数点后的数值超过七位,存储小数位和使用小数位也只会是7位,而double只会是14位,数据范围跟字节数不一定相关,例如单精度的float虽然只是4个字节,但是能表示数值的范围比long还要大,浮点数默认类型是double
Char类型占据两个字节,通常使用一对单引号,取值范围是0—65535,内部只能写一个字符,例如char c=‘ab’,这样就是错的
表示方式(主要使用前两种):
声明一个字符,如char c=’a’转义字符,如char c1=’\n’ 换行符\n直接使用unicode值来表示字符型常量 例如char c2=’\u0043’注意:一旦char类型进行数学运算,那么字符会按照一定的规则翻译成为一个数字
整数类型与字符类型可以进行相互转换
只能取两个值:true或者false,占一个字节
常常用于条件判断,循环结构中使用
编码表指的是字符与数字的对照关系表,电脑的底层是只能存储二进制的,所以但我们想在电脑底层存储我们的数据时,必须将相对应的字符转化为数字,那么这时候用到的对照表就是编码表,下面先介绍两种编码表:
ASCII码表:美国信息交换标准代码,美国人当初设计的时候也就是照顾到自己的情况,将自己所用到的字符做了电脑数字对应,创造出了ASCII码表,里面总共128个字符,我们只需要记住以下三个,如果需要其他的,再查表对照:0—》48 A—》65 a—》97
Unicode码表:万国码,也是字符和数字的对照关系表,开头0-127部分跟ASCII完全一样,单从128开始包含更多字符,其实也就是囊括了所有国家的文字做的一张对应关系表,让所有国家都能统一使用,使用范围更大
先解释前一个,byte b=4;首先系统默认4是一个int类型整数,之后编译器再去判断4是否在byte类型范围内,如果在,则编译器自动将4强转成byte类型,如果不在范围内,则编译器直接报错,short和char类型跟byte的原理是一致的,只要赋值的数字没有超过左边的数据类型取值范围,那么javac编译器将会自动隐含地为我们做强制转换,分别是(byte)(short)(char),而float f=3.3,底层不做隐式转换,需要我们手动强转,所以要后面加f或者前面加float
当后面的整数在int类型的范围内时,不用加L,当超出int范围到了long范围就要加L,以表示这是一个长整形的数,给他一种身份的象征,否则编译不通过,会提示这是一个过大的整数
整数值可以给字符类型直接赋值,这时字符中存放的是ASCII对应的字符,但是对字符类型的取值范围是有限制的:范围是:0—65535,而字符也可以直接给int类型进行赋值,这时Int类型的变量存放的就是对应字符的ASCII,且字符在内存中占两个字节,
而我们国内的码表(国标码)是gb2312表(六千多中文),后面转变为gbk表(两万多中文),里面表示的就是现实中的汉字与电脑内的二进制一一对应
另外的就是国际标准码表:unicode码表,这张码表能识别全世界的文字(中英文内容全有)
前者byte b=3+7等号右边全都是常量,没有任何变量参与运算,那么编译之后,得到的.Class字节码文件当中相当于直接就是byte b=10,此时编译器会去判断10是否在byte范围内,如果在,则自动隐式强转,赋值给b,这称为编译器的常量优化。后者因为b1和b2是两个变量,无法去判定两个数字的和是否还在byte范围内,可能在,可能不在,所以会报可能损失精度错误,所以需要强转或者用Int类型来接收两数之和,而int就不会出现这样的问题,假如int i1=Integer.MAX_VALUE int i2=9999;两者相加会得到一个负数,而不会报错,因为如果超出了int范围,则最高位舍弃,保留Int能保留的最多位数
通俗易懂的理解:在程序中自定义的一些名称,其实就给类,属性,方法,接口起名字
组成:由26个英文字母,数字0-9,下划线_ ,美元符号$组成
规则(必须遵守):
1.不能是数字开头
2.不可以使用关键字
规范(大家约定俗成的规矩):
包(其实就是文件夹,用于对类进行管理):全部小写
类,接口:每个单词的首字母大写
属性,方法:第一个单词首字母小写,后面的单词首字母大写
关于隐式转换,java定义若干适用于表达式的类型提升规则:
第一,所有的byte型、short型和char型的值在运算的时候都将被提升到int型,然后再运算;
第二,如果一个操作数是long型,计算结果就是long型;
第三,如果一个操作数是float型,计算结果就是float型;
第四,如果一个操作数是double型,计算结果就是double型。
所以byte short char -->int-->long-->float-->double,从低到高转换
为什么long类型八个字节可以向float四个字节转换,因为float采用的是科学计数法,float的数据容量远远大于long类型的数据容量范围
简单来说:如果运算类型中有double,则结果就是double,没double有float,结果就是float,以此类推
隐式转换和显示转换的概念:
隐式转换:
当取值范围小的类型赋给取值范围大的类型,构成自动类型转换也叫做隐式类型转换
显示转换:
当取值范围大的类型不能直接给取值范围小的类型赋值,则必须进行强制类型转换也叫做显式类型转换,但是可能会存在精度丢失
格式:范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据
Boolean类型不能发生任何数据类型转换