Java是由C语言演变而来,其相较于C具有简单易学的优势,同时Java语言的跨平台性,也给诸多开发者带来很多的便利。这篇文章帮助大家梳理一下Java基础语法,希望通过这篇文章能够让初学者迅速入门。 一、变量与数据类型1.1变量变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。由于该存储单元中的数据可以发生改变,因此得名为”变量“。 变量的分类: 1、按所属的数据类型划分: 基本数据类型变量 引用数据类型变量 2、按被声明的位置划分: 局部变量:方法或语句块内部定义的变量 成员变量:方法外部、类的内部定义的变量 特别注意:类的外面不能有变量的声明 1.2数据类型由于变量记录的数据内容大小不同,导致所需的存储单元大小不同,在Java语言中使用数据类型的概念加以描述. 数据类型的分类: 1.3标识符Java对包、类、方法、参数和变量等要素命名时使用的字符序列称为标识符。规则如下: 1、由字母、数字、下划线(_)和美元符号($)组成。 2、不能以数字开头。 3、区分大小。 4、长度无限制。 5、不能是Java中的保留关键字。 注意:标识符命名习惯为见名知意。 Java中关键字: Java保留字:没有定义用途,但保留备用。goto、const。 1.4类型转换boolean类型不能转换成任何其它数据类型。 1、自动类型转换:容量小的类型自动转换成容量大的数据类型 byte,short,int->float->long->double byte,short,int不会互相转换,它们三者在计算时会转换成int类型 2、强制类型转换:容量大的类型转换成容量小的数据类型时,要加上强制转换符 longl=100L; inti=(int)l; 注意:强制类型转换有可能造成精度降低或数据溢出,使用时要小心。 二、方法2.1方法的概述方法用于封装一段特定的逻辑功能。方法的主要要素有:权限修饰符、方法名、参数列表和返回值。 2.2格式:2.3权限修饰符
2.4返回值详解1、方法调用结束后可以返回一个数据,称之为返回值。 2、方法在声明时必须指定返回值的类型。 3、通过return语句返回,return语句的作用在于结束方法且将数据返回。 4、 如果方法没有返回值(即方法不需要返回数据),需将返回值类型声明为void。 2.5参数列表详解1、方法的参数列表: 在调用时传递给方法,需要被方法处理的数据。 2、在方法定义时,需要声明该方法所需要的参数变量。 3、在方法调用时,会将实际参数值传递给方法的参数变量。 必须保证传递参数的类型和个数符合方法的声明。 2.6方法示例三、运算符3.1算术运算符
特殊: ++: 如果是变量前缀:先对此变量加1,再执行其他的操作。如果是变量后缀:先执行当前语句的其他操作,再对此变量加1。 --: 如果是变量前缀:先对此变量减1,再执行其他的操作。如果是变量后缀:先执行当前语句的其他操作,再对此变量减1。 示例: 3.2赋值运算符注意:赋值运算符作用是将一个值赋给一个变量,运算顺序从右到左 3.3关系运算符注意:关系运算符作用是比较两边的操作数,结果总是boolean型的。 3.4逻辑运算符注意:逻辑运算符用于对boolean型结果的表达式进行运算,运算结果总是boolean型。 3.5字符串连接运算符“+”可以将不同的字符串进行连接,如:Strings=”He”+“llo”;结果”Hello”。 “+”除了可用于字符串相连接,也能将字符串与其它的数据类型相连成一个新的字符串。如:Strings=”x”+123;结果”x123”。 4.1注释在Java中3种标记注释的方式: 使用//,其注释内容从//开始到本行结尾 使用/**/,其注释内容为比较长篇的内容。 使用/***/,用来自动地生成文档。 注意:在Java中,/**/注释不能嵌套。 4.2数据类型4.2.1整型整型用于表示没有小数部分的数值,它允许是负数。Java提供了4中整型: 4.2.2浮点类型浮点类型用于表示有小数部分的数值。在Java中有两种浮点类型: 4.2.3char类型char类型的字面量值要用单引号括起来。 char类型的值可以表示为十六进制值,其范围从\u0000到\Uffff。 在Java中char类型描述了UTF-16编码中的一个代码单元。 建议不要在程序中使用char类型,除非确实需要处理UTF-16代码单元。最好将字符串作为抽象数据类型处理。 4.2.4boolean类型boolean(布尔)类型有两个值:false和true,用来判定逻辑条件。 整型值和布尔值之间不能互相转换。 4.3变量4.3.1变量的初始化声明一个变量之后,必须用赋值语句对变量进行显式初始化,不能使用未初始化的变量。 变量的声明尽可能地靠近变量第一次使用的地方。 4.3.2常量在Java中,利用关键字final指示常量。 关键字final表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。 习惯上,常量名使用全大写。 使用关键字staticfinal设置一个类常量,可以实现某个常量可以在一个类中的多个方法中使用。(类常量的定义位于main方法的外部) 4.4运算符算术运算符:+、—、*、/、++、—— &&(与)、||(或)、!(非) 注意:整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。 4.4.1数值类型之间的转换【标注】:实心箭头表示无信息丢失的转换;虚箭头表示可能有精度损失的转换。 如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型 否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型 否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型 否则,两个操作数都将被转换为int类型 4.4.2强制类型转换语法格式:在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。 4.4.3关系和boolean运算符&&和||运算符是按照“短路”方式来求值的:如果第一个操作数已经能够确定表达式的值,第二个操作数就不必计算了。 4.4.4位运算符处理整型类型时,可以直接对组成整型数值的各个位完成操作。这意味着可以使用掩码技术得到整数中的各个位。位运算符包括: >>和<<运算符将位模式左移或者右移 4.4.5运算符优先级4.5字符串4.5.1子串String类的substring方法可以从一个较大的字符串提取出一个子串。 4.5.2拼接Java语言使用+号连接(拼接)两个字符串。 4.5.3字符串比较使用equals方法检测两个字符串是否相等。 使用equalsIgnoreCase方法检测两个字符串是否相等,而不区分大小写。 4.5.4空串和Null串空串“”是长度为0的字符串。 String变量可以存放一个特殊的值,名为null,表示目前没有任何对象与改变量关联。 4.5.5实战演示4.6输入输出4.6.1读取输入打印输出到“标准输出流”(控制台窗口)是一件非常容易的事情,只要调用System.out.println即可。然而,读取“标准输入流”System.in,通过控制台输入,首先需要构造一个Scanner对象,并与“标准输入流”System.in关联。 nextLine方法将输入一行: 使用nextLine方法是以为在输入行中有可能包含空格。要想读取一个单词(以空白符作为分隔符),可以调用: 要想读取一个整数,就调用nextInt()方法: 要想读取一个浮点数,就调用nextDouble()方法。依次类推。 Scanner类定义在java.util中。当使用的类不是定义在基本java.lang包中时,一定要使用import指示将相应的包加载进来。 【注释】读取密码因为输入是可见的,所以Scanner类不适用于从控制台读取密码。JavaSE6特别引入了 Console类实现这个目的。要想读取一个密码,可以采用下列代码: 为了安全起见,返回的密码存放在一堆字符数组中,而不是字符串中。在对密码进行处理之后,应该马上用一个填充值覆盖数组元素。 采用Comsole对象处理输入不如采用Scanner方便。每次只能读取一行输入,而没有能够读取一个单词或一个数值的方法。 4.6.2格式化输出使用System.out.print(x)将数值x输出到控制台上。这条命令将以x对应的数据类型所允许的最大非0数字位数打印输出x。 在早期的Java版本中,格式化数值曾经引起过一些争议。庆幸的是,JavaSE5.0沿用了C语言库函数中的printf方法。例如: 可以用8个字符的宽度和小数点后两个字符的精度打印x。也就是说,打印一个空格和7个字符。 在printf中可以使用多个参数: 每一个用%开始的格式说明符号都用相应的参数替换。格式说明符后面的转换符号指示被格式化的数值类型:f表示浮点数,s表示字符串,d表示十进制整数。用于printf的转换符号,如下图所示: 另外,还可以给出控制格式化输出的各种标志。例如,逗号标志增加了分组的分隔符。 可以使用多个标志,例如,""%,(.2f)"使用分组的分隔符并将负数括在括号内。用于printf的标志: 注释:可以使用s转换符号格式化任意的对象。对于任意实现了Formattable接口的对象都将条用formatTo方法;否则将调用toString方法,它可以将对象转换为字符串。 可以使用静态的String.format方法创建一个格式化字符串,而不打印输出: printf方法中日期与时间的格式化选项。首先,我们先看一下日期和时间的转换符: 图中只给出指定日期的部分信息。如果需要多次对日期操作才能实现对每一部分进行格式化的目的就太过繁琐。为此,可以采用一个格式化的字符串指出要被格式化的参数索引。所以必须紧跟在%后面,并以$终止。 还可以选择使用<标志。它指示前面格式说明中的参数将被再次使用。下列语句将与前面语句同样的输出结果: 提示:参数索引值从1开始,而不是从0开始,%1$…对第1个参数格式化。这就避免了与0表示混淆。 4.6.3文件输入与输出要想对文件进行读取,就需要一个用File对象构造一个Scanner对象,如下所示: 如果文件名中包含反斜杠符号,就要记住在每个反斜杠之前再加一个额外的反斜杠:”c:\\mydirctory\\myfile.txt"。 要想写入文件,就需要构造一个PrintWriter对象。在构造器中,只需要提供文件名: 4.7控制流程Java使用条件语句和循环结构确定控制流程。 4.7.1块作用域块(复合语句),是指由一对大括号括起来的若干条简单的Java语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。 但是,不能再嵌套的两个块中声明同名的变量。 4.7.2条件语句在Java中,条件语句的格式为: 在Java中,更一般的条件语句格式如下所示: 其中else部分是可选的。else子句与最邻近的if构成一组。 4.7.3循环当条件为true时,while循环执行一条语句/一个语句块。一般格式为: 如果开始循环条件的值就为false,则while循环体一次也不执行。 do/while循环语句 它的语法格式为: 这种循环语句先执行语句/语句块,再检测循环条件;然后重复语句,再检测循环条件,依次类推。 4.7.4确定循环for循环语句是支持迭代的一种通用结构,利用每次迭代之后更新的计数器或类似的变量来控制迭代次数。 如果在for语句内部定义一个变量,这个变量就不能再循环体之外使用。如果希望在for循环体之外使用循环计算的最终值,就要确保这个变量在循环语句的前面且在外部声明。 4.7.5多重选择:switch语句switch语句将从与选项值相匹配的case标签处开始执行知道遇到break语句,或者执行到switch语句的结束处位置。如果没有相匹配的case标签,而有default子句,就执行这个子句。 4.7.6中断控制流程语句break 不带标签的break语句,与用于退出switch语句的break语句一样,它也可以用于退出循环语句。 在循环开始时,如果years>100,或者在循环体中balance>=goal,则退出循环语句。 带标签的break语句,标签必须放在希望跳出的最外层循环之前,并且必须紧跟一个冒号。 如果输入有误,通过执行带标签的break跳转到带标签的语句块末尾。对于任何使用break语句的代码都需要检测循环是正常结束,还是由break跳出。 continue 与break语句一样,continue将中断正常的控制流程。continue语句将控制转移到最内层循环的首部。 如果n<0,则continue语句越过了当前循环体的剩余部分,立刻跳到循环首部。 还有一种带标签的continue语句,将跳到与标签匹配的循环首部。 break和continue的区别: break用于完全结束一个循环,跳出循环体执行循环后面的语句。 continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环。可以理解为continue是跳过当次循环中剩下的语句,执行下一次循环。 4.8大数值如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度浮点数运算。 使用静态的valueOf方法可以将普通数值转换为大数值: 加减乘除 4.9数组数组是一种数据结构,用来存储同一类型值得集合。通过一个整型下标可以访问数组中的每一个值。在声明数组变量时,需要指出数组类型(数据元素类型紧跟[])和数组变量的名字。 创建一个数组数组时,所有元素都初始化为0。boolean数组的元素会初始化为false。对象数组的元素则初始化为一个特殊值null,这表示这些元素(还)为存放任何对象。 要想获取数组中元素的个数,可以使用array.length。 4.9.1foreach循环Java有一种功能很强的循环结构,可以用来依次处理数组中的每个元素(其他类型的元素集合亦可)而不必为指定下标值而分心。 定义一个变量用于暂存集合中的每一个元素,并执行相应的语句/语句块。collection这一集合表达式必须是一个数组或者是一个实现了Iterable接口的类对象(ArrayList)。 4.9.2数组初始化以及匿名数组在Java中,提供了一种创建数组对象并同时赋予初始化值得简化书写形式。 在Java中,允许数组长度0。在编写一个结果为数组的方法时,如果碰巧结果为空,则这种语法形式就显得非常有用。注意,数组长度与null不同。 4.9.3数组拷贝在Java中,允许将一个数组变量拷贝给另一个数组变量。这时两个变量将引用同一个数组: 如果要将一个数组的所有值拷贝到一个新的数组中去,就要使用Arrays类的copyOf方法: 4.9.4命令行参数每一个Java应用程序都有一个带Stringarg[]参数的main方法。这个参数表明main方法将接收一个字符串数组,也就是命令行参数。 4.9.5数组排序要想对数值型数组进行排序,可以使用Arrays类中的sort方法: 这个方法使用了优化的快速排序算法。 4.9.6多维数组多维数组将使用多个下标访问数组元素,它适用于表示表格或更加复杂的排列形式。 声明一个二维数组: |
|