Java基础语法知识点概要

您所在的位置:网站首页 ASCLL码分为 Java基础语法知识点概要

Java基础语法知识点概要

2023-05-12 05:26| 来源: 网络整理| 查看: 265

@TOC

关键字和保留字

关键字和保留字都可以统称为关键字,是Java语法中定义好的字符串,代表一定的含义。而保留字是对于目前开发中都用不到的关键字,所以保留着可能以后会用到,所以叫做保留字。

标识符

简述:

标识符是对变量,类,方法命名的字符序列。 对于不同同类型的命名,命名规范有所不同。 类名:XXYYZZ 方法,变量:xxYYZZ 包名:xxyyzz 常量名:XXX_YYY_ZZZ 对于命名的要求: ①标识符可以包含26个英文字母(区分大小)、0~9的数字、$(美元符)和_(下划线)。 double e = 3e3; 如果标识符允许第一个字符为数字字符的话,那么 3e3 既可表示标识符(变量名),亦可表示数值:3*10^3, 编译时会显示二义性。 ②数字不能开头。 ③不能包含空格和关键字和保留字。 ④区分大小写,长度无限制。 变量

简述:

变量为内存中的一个存储区域。 变量必须先声明后初始化。 变量分为局部变量和类变量。 局部变量是在方法中定义的变量,作用域只有在方法中可行,无默认初始化值。 类变量是在类中定义的变量,作用在整个类中,有默认初始值。 ①整型为0。 ②浮点型为0.0。 ③引用型为null。 ④布尔类型是false。 ⑤char型为空字符表示出来为'',但Java不允许这样声明,所以可以用0(数字表示)或'\U0000'(Unicode值表示)或'\0'(转义表示)。对于'0'则表示为0这个字符。

声明和初始化注意:

在 Java程序设计中,每个声明的变量都必须分配一个类型。声明一个变量时,应该先声明变量的类型,随后再声明变量的名字。下面演示了变量的声明方式。 double salary; int age; Boolean op; 复制代码

其中第一项称为变量类型,第二项称为变量名。分号是必须的,这是 Java 语句的结束符号。

同一类型的不同变量,可以声明在一行,也可以声明在不同行,如果要声明在同一行中,不同的变量之间用逗号分隔,例如下面的例子。

int studentNumber,people; 复制代码 声明变量的同时可以为变量赋值,也可以声明以后再赋值。如: int a=1; //声明时赋值 int a; a=1; //声明后赋值 复制代码 基本数据类型

简述:

基本数字类型有 byte,short,char,int,long,float,double,boolean其中byte,short,int,long为整型,char为字符型,float,double为浮点型,boolean为布尔型 Java中默认整型为int,浮点型为double。 字符类型可以有三种表达方式: ①字符常量是用单引号('')括起来的单个字符。例如:char c1 = 'a'; char c2 = '中'; char c3 = '9' ②Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = ‘\n’; // '\n'表示换行符 ③直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a 表示 \n。 ④直接使用十进制数来表示字符型常量:X。如:十进制数12 转为成十六进制数为'\U000C'。 //十六进制表示 --- a=10,b=11,c=12 char word = '\u000C'; //十进制表示 --- word=12 System.out.println((int) word); 复制代码 此外初始化long型时要在数字后面加上‘L’或‘l’,初始化float时要在数字后面加上‘f’或‘F’。 在java底层使用二进制数表示数据的,而之所以能在计算机上表示各种各样的数据,是因为通过字符集转换而成的。如windos命令行的字符集是中文是GBO,英文是ASCLL,而在互联网中较常使用的是UTF-8。如对于字符变量‘a’的ASCLL值时97

对于空字符与空格字符的区分:

空字符: 字符串结尾的标志(‘\0’转义),实际上他的数值是0。 可以理解为标志性字符型,其使命主要是为了表明字符串已经结束。 空格字符: 空格字符( ‘’单引号中间有一个空格)的ASCII码10进制32,16进制的0X20 两者区别: ①最直观的区别:值不同,两者的ASCII不同,空(NUL)字符码值是0,而空格字符的码值是32。再者,空字符人为规定了它的使命。 附:‘0’ 的ASCII是48,不要跟前面两个混为一团。3者是完全不同的概念,其本身的整型值不同,代表的字符也不同。 public class CharTest { public static void main(String[] args) { char m = ' '; System.out.println(m + ","); System.out.println("空格的ASCII值的十进制表示数为: " + Integer.valueOf(m)); char i = 0b000000;// 二进制 System.out.println(i+","); System.out.println("空字符(NULL)的ASCII值的十进制表示数为: " + Integer.valueOf(i)); } } 复制代码

在这里插入图片描述

底层字节数:

byte 一个字节 short 两个字节 char 两个字节 int 四个字节 float 四个字节 long 八个字节 double 八个字节

字符型(char type):

当需要表示单个字符时,使用字符型。字符型文字是用一个单引号括起来的字符。例如:‘H’,‘国’

和在C语言中一样,Java也支持转义字符。Java中使用“\”将转义字符与一般的字符区分开来。表4-4列出了Java中的转义字符及其含义。

转义序列含义\b退格(backspace):删除,①删除左1字符②光标移动到左1位置\t水平制表(table):跳到下一个TAB位置\n换行(newline):使光标下移一行\f换页:走纸换页\r回车(return):使光标到行首\”双引号\’单引号\\反斜杠\0空字符null

Java中的字符型占用两个字节,因为它支持Unicode字符集。在C语言中使用的是ASCII字符集,所以它的字符型只占用一个字节。

Unicode字符集是用来支持世界上的所有的语言的,ASCII字符集只是它的一个子集,确切的说,它是Unicode字符集的前255个字符。所以所有ASCII字符集中的字符都是Unicode字符集中的合法字符。

Unicode字符集的字符常常用十六进制表示,例如‘\u0000’、‘\u0028’、‘\uffff’等。它的范围从‘\u0000’到‘\uffff’,其中‘\u0000’到‘\u00ff’是ASCII字符集中的字符。

‘\u’也是一个转义字符,用来表示紧接着的四个十六进制数字是Unicode字符的代码。 ①一个字节=8个二进制位,一个十六进制=4个二进制,一个字节=2个十六进制。 ②因此四个十六进制=两个字节。

Java中char类型多种赋值方式形式,以及ASCII码,Unicode的讲解

注意:

对于换行这个动作,unix下一般只有一个0x0A表示换行("\n"),window下一般都是0x0D和0x0A两个字符("\r\n"),苹果机(MACOS系统)则采用回车符CR表示下一行(\r) Unix系统里每行结尾只有“”,即“\n”;Windows系统里面,每行结尾是“”,即“\r\n”;Mac系统里,每行结尾是“”,即“\r”。 键盘上的Enter就是回车,是\r\n,\r是回车的意思,\n是换行的意思,总结起来就是先回到行首,再往下换行,这样才换到下一行行首的位置。

3.4e-38 3.4e+38中e表示什么:

e是exponent的缩写,意为指数.

这里特指e右边的数是以10为底的指数.

例如3.4e-38表示3.4×10^(-38)(书面形式是次数上标).实际上就是一般意义上的科学记数法.C/C++等语言支持这种形式表示一个字面量.

java中比较特殊的三个浮点数Infinity、-Infinity、NaN:

Infinity表示正无穷大。在这里插入图片描述 -Infinity表示负无穷大。在这里插入图片描述 NaN表示不是一个数。在这里插入图片描述 不过这三个数是浮点数,不是整数。只有在浮点数中这这三个数才成立。 变量的初始化详解 类变量(实例变量):定义在类中,方法体之外。成员变量前面加 static修饰符(在本类调用要么1、实例化本类2、要么用static修饰变量) 而类变量定义(声明)后可以不初始化,因为它有默认值 局部变量:定义在方法体,构造方法,语句块中的变量。 局部变量定义后,必须初始化,即赋值,才能使用(它没有默认值) 注意:对于数组和String和其他引用数据类型说来如果初始化了也就是new了是可以用的,但如果只是单纯的声明没有new则不可以用。但为什么new了可以用呢?因为new了后引用数据类型那个类的变量是成员变量有默认初始值。 public class Demo{ public static void main(String[] args){ int i; //没有赋值 System.out.println("i is" + i); } } 编译结果:错误 复制代码 变量类型默认值int,byte,short,long0char空字符''float,double0.0引用值(比如String)null 基本数据类型变量间转换

转换分为两种转换,强制转换和自动类型转换:

强制类型转换意思是强制把容量大的类型转换为容量小的。强制类型转换会造成精度缺失。 自动类型转换意思是容量小的类型自动转换成容量大的。 转换规则: ①byte,short,char>int>long>float>double ②当short,char,byte任意两个之间进行运算时得到的类型都是int,这是因为java系统为了防止两个接近int类型的数相加而得到超出short类型的容量,从而报错。 ③顺着来为自动类型转换,逆着来为强制类型转换。 自动类型提升可以在算术运算符,赋值运算符,比较运算符中应用。

基本数据类型的范围:

int:此类型是各个位之间表示的值直接相加,所以表示的值范围是-2^31 ~ 2^31 - 1。其中精度为31位。

float:此类型是8位指数23位底数,这么来说可以表示最大的值就是2^23^128,最小值就是-2^23^127。所以范围就是-2^23^127 ~ 2^23^128,其中尾数也就是精度为23位。

long:此类型是各个位之间表示的值直接相加,所以表示的值范围是-2^63 ~ 2^63 - 1。其中精度为63位。

double:此类型是11位指数52位底数,这么来说可以表示最大的值就是2^52^1024,最小值就是-2^52^1023。所以范围就是-2^52^1023~ 2^52^1024,其中尾数也就是精度为52位。

java中byte、short、char在底层存储:

链接:java中byte、short、char在底层存储 我们都知道,java中byte占用一个字节,short、char占用两个字节,但是byte、short、char在java底层中存储实际上32位的补码,只不过在定义变量的时候默认加上了一个强制类型转换来限制它的大小。

数据类型之间的转化: 在这里插入图片描述

实心箭头表示无信息丢失的转换。 ①实心箭头都是自动类型提升,不会发生精度损失。 虚心箭头表示转换可能会损失精度。 ①虚心箭头都是自动类型提升,但却都会发生精度损失。

int 和byte详解:

整型常量若在byte类型的保存范围内,可以直接赋给byte变量,不用强转; 整型常量若不在byte类型的保存范围内,必须强转; 整型变量无论值是否在byte范围内,都需要强转; 上述只限于int 和byte。 //整型常量在byte范围内 byte a=120; //byte取值范围是 -128-127 System.out.println(a); //120 //整型常量不在byte范围内--》需要强转 //byte b=130;// 错误(从int转换到byte可能会有损失) byte b=(byte)130; //强转为byte System.out.println(b); //-126 byte c=(byte)300; System.out.println(c); // 44 取的是300的低吧8位即44 //整型变量--》需要强转 int num=12; //byte d=num; //错误(从int转换到byte可能会有损失) byte d=(byte)num; System.out.println(d); //12 复制代码

造成损失精度的原因:

强制类型转换损失精度(大范围转小范围有可能损失精度,小范围转大范围不会损失精度) ①byte - short - char - int - long - float -double(从左往右小类型到大类型可以自动完成,也称为隐式类型转换) 运算时溢出损失精度:

①当两个整数进行运算时, 其结果可能会超过整数的范围而发生溢出,正数过大而产生的溢出,结果为负数;负数过大而产生的溢出,结果为正数。

int a = 2147483647; //int类型整数的上限 int b = -2147483648; //int类型整数的下限 a = a + 1; b = b - 1; System.out.println("a=" + a); //输出结果: a=-2147483648 溢出,结果错误。 System.out.println("b=" + b); //输出结果: b=2147483647溢出,结果错误。 复制代码

②在溢出之前将一个值的类型往大的转

int a = 2147483647; long d=(long)a+1; System.out.println(d); long b=(long)(a+1); System.out.println(b); long c=a+1; System.out.println(c); 结果: 2147483648 -2147483648 -2147483648 复制代码 整型数据除法运算中的取整损失精度 ①若对两个整数相除,会舍弃小数的部分(注意:不是四舍五入),结果也是整数。 浮点类型运算时会出现舍入误差 ①二进制系统中无法精确的表示1/10,就好像十进制系统中无法精确的表示1/3一样,计算机的运算底层都是二进制,而二进制无法精确表示浮点类型,导致计算时会有误差造成精度的损失。

精度损失总结:

整型(int,long,short)与整型(int,long,short)进行计算只要结果不超过该结果类型的取值范围就不会损失精度(不算除法)。 计算中只要有浮点类型参与运算(float,double)就有可能损失精度。 基本数据类型与String间转换

简述:

String类型是字符串类型,意思是为多个字符类型组成的类型,它是一个引用类型。 当任意基本数据类型与String进行相加+时,都会变成Stirng类型。 进制与进制间的转换

简述:

进制有十进制(我们生活中常用的进制),二进制(计算机底层数据表达使用的进制),十六进制,八进制。 十进制:满10进1 十六进制:以0X或0x开头。满16进1 八进制:以0开头。满8进1 二进制:以0b或0B开头。满2进1 ①二进制的整数有如下三种形式: 1、原码:直接将一个数值换成二进制数。最高位是符号位 2、负数的反码:是对原码按位取反,只是最高位(符号位)确定为1。 3、负数的补码:其反码加1。

数的范围:

其中一字节就是八位 可以表示的数有2^8-------256个。 其中最高位表示符号位可以表示正数和负数。 因此表示的数可以是-128~127。 ①其中还有0这个数,因此正数的范围只到127。

在这里插入图片描述

原码,反码,补码

简述:

链接:补码(为什么按位取反再加一):告诉你一个其实很简单的问题 原码:可直观反映出数据的大小。 补码:将加减运算统一为加法运算。 在这里插入图片描述 反码:方便原码和补码的相互转换。

在这里插入图片描述

为什么计算机中数据要以补码的形式存储?

因为计算机中只有加法没有减法.为了更加低成本的计算出结果,所以使用补码来存储数据。 结论:原码、反码都是无用的,都是为补码而存在。

正整数转二进制,负整数转二进制,小数转二进制:

正整数转二进制: ①正整数转成二进制。规则:除二取余,然后倒序排列,高位补零。 ②倒着排序 10101 ,验证下转成十进制: 1×2的4次方+1×2的2次方+1×2的0次方=16+4+1=21。正确。 ③计算机一般是8 位 16位 32位 64 位的,所以不够位高位补零。8位表示法:00010101 21 /2 -------------------------------余 1 10/2 -------------------------------余 0 5/2 ------------------------------- 余 1 2/2 --------------------------------余 0 1/2 ---------------------------------余 1 复制代码 负整数转二进制: ①先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一。 取 -21 演示,看口诀, 21 的二进制表示为: 10101 取反: 01010 加一 : 01011 复制代码 小数转换为二进制的方法: ①对小数点以后的数乘以2,有一个结果,取结果的整数部分(不是1就是0),然后再用小数部分乘以2,再取结果的整数部分……以此类推,直到小数部分为0或者位数已经够了就OK了。 ②验证: 0×2^0 + 0×2^-1 + 0×2^-2 + 1×2^-3 = 1/8 = 0.125 正确。 ③现在来说明0.1转二进制不能表示的原因: 取0.125演示: 0.125 ×2=0.25 .......................0 0.25×2=0.5.............................0 0.5×2=1.0................................1 即 0.125的二进制表示为小数部分为0.001 记住,乘到小数为0。排序:正序。 复制代码 0.1×2=0.2 .....................0 0.2×2=0.4 ......................0 0.4×2=0.8 .....................0 0.8×2=1.6.......................1 0.6×2=1.2.......................1 0.2×2=0.4.......................0 ........ 结论:是无限循环的。 复制代码 注意: ①有可能是死循环,用浮点数循环需要注意。 ②因为i有可能为10.1这样不等于10,因此死循环了。 for(double i=0;i!=10;i+=0.1){ } 复制代码 运算符

简介:

对于各种运算符的优先级其实不用去记,毕竟太复杂了,而且开发中也不会这样做,开发中一般在需要优先使用的地方加一个括号,这样也比较容易看。

算术运算符:

算术运算符有 加+ ,减-, 乘*, 除/, 取余数%, 自增++, 自减- -。 自增和自减都有两种形态 a++和a--都是先做运算再相加或相减。 ++a和--a都是先相加或相减再做运算。 注意: ①varNum=varNum++值不变的原因: 链接:java中i=i++问题解析 底层 varNum=varNum++的执行过程: 0: bipush 10 将参数10压入栈; 2: istore_1 栈中弹出一个数,赋给第一个局部变量:a. 3: bipush 66 将参数66压入栈; 5: istore_2 栈中弹出一个数,赋给第二个局部变量:varNum 6: iload_2 将第二个局部变量i的值入栈,此时栈顶的值为66 7: iinc 2, 1 指令iinc对给定的局部变量做自增操作。2, 1 表示对第2个局部变量varNum进行累加1操作 ,意味着varNum 变为了 67 10: istore_2 栈顶弹出一个数:也就是66 赋给第二个局部变量 varNum,意味这 varNum的值 又变回66了。 总结:自增是直接对变量的值进行修改,赋值就是从栈中取值,所以自增后再赋值就被先前放入栈中的值给覆盖掉了。 public class Test{ public static void main(String[] args){ int a=10; int varNum=66; varNum=varNum++; System.out.println(varNum); } } 复制代码

赋值运算符:

赋值运算符有 +=, -=, *=, %=,/=。 赋值运算符不会改变本身变量的数据类型!

比较运算符:

比较运算符的结果是boolean布尔类型。 比较运算符有 > , < ,== ,!=,>=, , < ,>=,>>无符号右移,&与运算,|或运算,^异或运算,~取反运算。 右移,表示在一定范围内,每向右移一位,相当于/2. 位运算是直接对整数的二进制进行的运算

三元运算符(条件运算符):

三元运算符:(条件表达式)?表达式1:表达式2; 在三元运算符中表达式1和表达式2要求是一致的! 三元运算符与if-else相似,当一个表达式同时可以用两种进行表达时我们一般使用三元运算符,因为简洁而高效! 程序流程控制

if-else:

if-else分为三钟结构: 在这里插入图片描述在这里插入图片描述在这里插入图片描述

switch-case:

注意:如果没有break,则找到匹配的语句,并向下执行直到遇到break或直到语句执行结束。(break是可选的!) switch结构中的表达式只能是如下六种类型:byte,short,char,int,枚举类型,String类型。 case之后只能声明常量不能不能声明范围 default:表示if-else中的else,是可选的而且位置是灵活的。凡是能用switch-case的都能用if-else,反之不成立!

在这里插入图片描述

while,do-while,for中的关键字:

break:用于结束当前循环语句块 continue:用于跳过循环语句块中的一次执行 return:并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。

while: 在这里插入图片描述 do-while: 在这里插入图片描述 for: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3