Java 基础语法Java 版本概述
在 Java 这门语言体系当中,最基础的部分就是 Java SE 部分,Java 的标准版本。它包括 Java 最基础的一些结构,包括面向对象的一些特性等等,同时它也是 Java 技术基础和核心。在 Java SE 的基础之上,又分为了 Java EE(Java 的企业版),应用于大型企业级应用的开发。Java ME 主要用于嵌入式开发。
Java SE
JVM 是 Java 虚拟机,它也是整个 Java 技术的核心。Java 语言的跨平台归功于 JVM。
JDK 是 Java 开发工具包,没有 JDK 就没有办法进行 Java 程序的开发。
JRE 是 Java 运行环境,如果我们需要运行一个 Java 程序,就需要安装 JRE。
JDK、JRE 和 JVM 之间的关系:
JDK、JRE和JVMHelloWorldpublicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.println(“HelloWorld!”);}}
Java 中所有的代码都必须包含在 class 中,main 方法是程序的入口,并且 Java 是区分大小写的,如果写成 Main,那么程序将因找不到程序入口而无法运行。使用 public 修饰的 class 名(HelloWorld)必须和源代码文件名相同。
$javacHelloWorld.java$javaHelloWorldHelloWorld!
编译源代码:打开命令行,切换到源代码目录。输入 javac HelloWorld.java,如果程序没有任何提示,并且在同级目录下生成了一个 .class扩展名的文件,那么说明编译成功,反之编译失败。
变量
在 Java 中,变量需要先声明 (declare) 才能使用。在声明中,需要包括数据类型和变量名称,语法格式与 C 相同。例如:
inta=1;常量
Java 中的 final 关键字可以用于声明属性(常量),方法和类。当 final 修饰属性时,代表该属性一旦被分配内存空间就必须初始化。在变量前面添加关键字 final 即可声明一个常量。在 Java 编码规范中,要求常量名必须大写。例如:
finaldoublePI=3.14;
常量也可以先声明,再进行赋值,但只能赋值一次,比如:
finalintFINAL_VARIABLE;FINAL_VARIABLE=100;数据类型数据类型
Java 中一共八种基本数据类型,下表列出了基本数据类型的数据范围、存储格式、默认值和包装类型等。
数据类型默认值存储格式数据范围包装类型short02 个字节-32,768 到 32,767Shortint04 个字节-2,147,483,648 到 2,147,483,647Integerbyte01 个字节-128 到 127Bytechar空2 个字节Unicode 的字符范围:\u0000(即为 0)到 \uffff(即为 65,535)Characterlong0L 或 0l8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807Longfloat0.0F 或 0.0f4 个字节32 位 IEEEE-754 单精度范围Floatdouble0.0 或 0.0D(d)8 个字节64 位 IEEE-754 双精度范围Doublebooleanfalse1 位true 或 falseBoolean整数
byte、short、int、long 四种基本数据类型表示整数,需要注意的是 long 类型,使用 long 修饰的变量需要在数值后面加上 L 或者 l,比如 long num = 1L;,一般使用大写 L,为了避免小写 l 与数值 1 混淆。
浮点数
float 和 double 类型表示浮点数,即可以表示小数部分。需要注意的是 float 类型的数值后面需要加上 F 或者 f,否则会被当成 double 类型处理。double 类型的数值可以加上 D 或 d,也可以不加。
char 类型
char 类型表示单个字符。需要将字符用单引号括起来char a = ‘a’;,char 可以和整数互相转换,如果字符 a 也可以写成char a = 97;。也可以用十六进制表示char a = ‘\u0061’;。
boolean 类型
boolean 类型表示真值 true或者假值 false,可以使用 1 bit 来存储,但是具体大小没有明确规定。JVM 会在编译时期将 boolean 类型的数据转换为 int,使用 1 来表示 true,0 来表示 false。JVM 支持 boolean 数组,但是是通过读写 byte 数组来实现的。Java 中布尔值不能和整数类型或者其它类型互相转换。
String
Java 中使用 String 类来定义一个字符串,字符串是常量,它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。
String 对象的初始化格式有如下两种:
Strings0=”abc”;Strings1=newString(“abd”);
String 类具有丰富的方法,比如计算字符串的长度、连接字符串、比较字符串、提取字符串等等。
计算字符串长度
length() 方法:
//方法原型publicintlength(){}
调用方法:字符串标识符.length(); 返回一个 int 类型的整数(字符串中字符数,中文字符也是一个字符)。例如:
Strings1=”abc”;Strings2=”Java语言”;intlen1=s1.length();intlen2=s2.length();
则变量 len1 的值是 3,变量 len2 的值是 6。
字符串比较
equals() 方法,该方法的作用是判断两个字符串对象的内容是否相同。如果相同则返回 true,否则返回 false。
equals() 方法比较是从第一字符开始,一个字符一个字符依次比较。
equals比较原理
Strings1=”abc”;Strings2=newString(“abc”);booleanb=(s1==s2);
字符串连接
字符串连接有两种方法:
使用 ,比如 String s = “Hello ” “World!”。使用 String 类的 concat() 方法。
例如:
Strings0=newString(“Hello”);Strings1=”World” “!”;// 号连接Strings2=s0.concat(s1);//concat()方法连接System.out.println(s2);
而且使用 进行连接,不仅可以连接字符串,也可以连接其他类型。但是要求进行连接时至少有一个参与连接的内容是字符串类型。
charAt() 方法
charAt() 方法的作用是按照索引值(规定字符串中第一个字符的索引值是 0,第二个字符的索引值是 1,依次类推),获得字符串中的指定字符。例如:
Strings=”abc”;charc=s.charAt(1);
则变量 c 的值是 ‘b’。
字符串常用提取方法方法返回值功能描述indexOf(char ch)int搜索字符 ch 第一次出现的索引indexOf(String value)int搜索字符串 value 第一次出现的索引lastIndexOf(char ch)int搜索字符 ch 最后一次出现的索引lastIndexOf(String value)int搜索字符串 value 最后一次出现的索引substring(int index)String提取从位置索引开始到结束的字符串substring(int beginindex, int endindex)String提取 beginindex 和 endindex 之间的字符串部分trim()String返回一个前后不含任何空格的调用字符串的副本
说明:在字符串中,第一个字符的索引为 0,子字符串包含 beginindex 的字符,但不包含 endindex 的字符。如果参数只有beginindex,那么会提取从beginindex开始到结束的字符。
String Builder
String 是无法被修改的,对 String 的修改,其实是新建了一个 String 对象。StringBuilder 修改字符串的内容,相当于一个存储字符的容器。
初始化格式有以下三种:
#构造一个不包含任何字符且初始容量为16的StringBuilderStringBuildera=newStringBuilder();#构造一个不包含任何字符且容量为cap的StringBuilderStringBuilderb=newStringBuilder(intcap);#构造一个StringBuilder,内容初始化为strStringBuilderc=newStringBuilder(Stringstr);
而第三种方法初始化的容量是初始容量 16 str 的长度。
StringBuilder 常用方法:
方法返回值功能描述deleteCharAt(int index)StringBuilder删除 StringBuilder 中指定位置的 charindexOf()int返回子字符串首次出现在该字符串中的索引capacity()int返回当前容量charAt(int index)char返回序列中指定索引的 char 值toString()String返回序列数据的 String 格式算术运算符
算术运算符用在数学表达式中,主要实现的是算术运算,如常见的加减乘除等。
表格中的例子中,变量 a 的值为 5,变量 b 的值为 3,变量 i 的值为 1:
算术运算符名称描述类型举例 加法相加运算符两侧的值双目运算符a b 等于 8-减法左操作数减去右操作数双目运算符a – b 等于 2*乘法相乘操作符两侧的值双目运算符a * b 等于 15/除法左操作数除以右操作数双目运算符a / b 等于 1%取余左操作数除右操作数的余数双目运算符a % b 等于 2 自增操作数的值增加 1单目运算符 i(或 i ) 等于 2–自减操作数的值减少 1单目运算符–i(或 i–) 等于 0
其中,自增( )和自减(–)运算符有两种写法:前缀( i,–i)和后缀(i ,i–)。
前缀自增自减法( i,–i):先进行自增或者自减运算,再进行表达式运算。后缀自增自减法(i ,i–):先进行表达式运算,再进行自增或者自减运算位运算符
Java 定义了位运算符,应用于整数类型 (int),长整型 (long),短整型 (short),字符型 (char),和字节型 (byte) 等类型。位运算时先转换为二进制,再按位运算。
表格中的例子中,变量 a 的值为 60(二进制:00111100),变量 b 的值为 13(二进制:00001101):
位运算符名称描述举例&按位与如果相对应位都是 1,则结果为 1,否则为 0(a&b),得到 12,即 0000 1100丨按位或如果相对应位都是 0,则结果为 0,否则为 1( a 丨 b )得到 61,即 0011 1101^按位异或如果相对应位值相同,则结果为 0,否则为 1(a^b)得到 49,即 0011 0001~按位补翻转操作数的每一位,即 0 变成 1,1 变成 0(~a)得到 -61,即 1100 0011<<按位左移左操作数按位左移右操作数指定的位数a<<2 得到 240,即 1111 0000>>按位右移左操作数按位右移右操作数指定的位数a>>2 得到 15 即 1111>>>按位右移补零左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充a>>>2 得到 15 即 0000 1111逻辑运算符
逻辑运算符是通过运算符将操作数或等式进行逻辑判断的语句。
表格中的例子中,假设布尔变量 a 为真(true),变量 b 为假(false):
逻辑运算符名称描述类型举例&& 或 &与当且仅当两个操作数都为真,条件才为真双目运算符(a && b) 或 (a & b) 为假|| 或 |或两个操作数任何一个为真,条件为真双目运算符(a || b) 或 (a | b) 为真!非用来反转操作数的逻辑状态。如果条件为真,则逻辑非运算符将得到假单目运算符(!a)为假^异或如果两个操作数逻辑相同,则结果为假,否则为真双目运算符(a ^ b) 为真
&& 与 || 是具有短路性质,当按优先级顺序计算到当前表达式时,表达式的结果可以确定整个表达式的结果时,便不会继续向后进行判断和计算,而直接返回结果。
关系运算符
关系运算符生成的是一个 boolean(布尔)结果,它们计算的是操作数的值之间的关系。如果关系成立,结果为 true(真),否则,结果为 false(假)。
表格中的例子中,假设变量 a 为 3,变量 b 为 5:
比较运算符名称描述举例==等于判断两个操作数的值是否相等,如果相等则条件为真(a == b) 为 false!=不等于判断两个操作数的值是否相等,如果值不相等则条件为真(a != b) 为 true>大于判断左操作数的值是否大于右操作数的值,如果是那么条件为真(a > b) 为 false<小于判断左操作数的值是否小于右操作数的值,如果是那么条件为真(a < b) 为 true>=大于等于判断左操作数的值是否大于或等于右操作数的值,如果是那么条件为真(a >= b) 为 false<=小于等于判断左操作数的值是否小于或等于右操作数的值,如果是那么条件为真(a <= b) 为 true
除了上表列出的二元运算符,Java 还有唯一的一个三目运算符 ?: 。
语法格式:
布尔表达式 ?表达式 1 : 表达式 2;
运算过程:如果布尔表达式的值为 true,则返回表达式 1的值,否则返回表达式 2的值。
强调:
== 和 != 适用于所有的基本数据类型,其他关系运算符不适用于 boolean,因为 boolean 值只有 true 和 false,比较没有任何意义。== 和 != 也适用于所有对象,可以比较对象的引用是否相同。
引用:Java 中一切都是对象,但操作的标识符实际是对象的一个引用。
运算符优先级
运算符的优先级不需要特别记忆,比较复杂的表达式一般使用圆括号 ()分开,提高可读性。
运算符的优先级
关键字和方法关键字
Java 的关键字用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名。其中,const 和 goto 这两个关键字在 Java 语言中并没有具体含义。
Java关键字
方法的定义语法:
访问修饰符返回值类型方法名(参数列表){方法体}
比如:
publicvoidfunctionName(Objectarg){System.out.println(“HelloWorld.”);}
在上面的语法说明中:
访问修饰符:代表方法允许被访问的权限范围, 可以是 public、protected、private 或者省略(default) ,其中 public 表示该方法可以被其他任何代码调用。返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为 void (代表无类型);如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用 return 语句返回值。方法名:是方法的名字,必须使用合法的标识符。参数列表:是传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。方法体:方法体包含具体的语句,定义该方法的功能。
根据方法是否带参、是否带返回值,可将方法分为四类:
无参无返回值方法无参带返回值方法带参无返回值方法带参带返回值方法
当方法定义好之后,需要调用才可以生效,可以通过 main 方法(main 方法是 Java 程序的入口)来调用它。
预告
基础篇(下) 中会对流程控制、数组、输入输出等其他基础语法进行梳理,本周内更新 ~