Java基础部分

Posted 有一个大佬梦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础部分相关的知识,希望对你有一定的参考价值。

标识符

Java 中标识符是为方法、变量或其他用户定义项所定义的名称。标识符可以有一个或多个字符。在 Java 语言中,标识符的构成规则如下。

  • 标识符由数字(0 ~ 9)和字母(A ~ Z 和 a ~ z)、美元符号($)、下划线(_)以及 Unicode 字符集中符号大于 0xC0 的所有符号组合构成(各符号之间没有空格)。
  • 标识符的第一个符号为字母、下划线和美元符号,后面可以是任何字母、数字、美元符号或下划线。
  • 标识符是大小写敏感的
  • 标识符可以包含关键字、保留字,但不能与关键字、保留字重名。
  • 标识符的长度没有限制
  • 合法标识符举例:age、#salary、_value。
  • 非法标识符举例:123age、-salaru、#abc。

关键字

关键字(或者保留字)是对编译器有特殊意义的固定单词,不能在程序中做其他目的使用。关键字具有专门的意义和用途,和自定义的标识符不同,不能当作一般的标识符来使用。

Java语言共定义了如下所示的关键字

abstract assert boolean break
case catch char class
continue default do double
enum extends final finally
for goto if implements
instanceof int interface long
new package private protected
return strictfp short static
switch synchronized this throw
transient try void volatile
  • 用于数据类型的关键字有 boolean、byte、char、 double、 false、float、int、long、new、short、true、void、instanceof。
  • 用于语句的关键字有break、case、 catch、 continue、 default 、do、 else、 for、 if、return、switch、try、 while、 finally、 throw、this、 super。
  • 用于修饰的关键字有 abstract、final、native、private、 protected、public、static、synchronized、
    transient、 volatile。
  • 用于方法、类、接口、包和异常的关键字有 class、 extends、 implements、interface、 package、import、throws。
  • 还有些关键字,如cat、 future、 generic、innerr、 operator、 outer、rest、var等都是Java保留的没有意义的关键字。
  • 另外,Java还有3个保留字:true、false、null。它们不是关键字,而是文字。包含Java定义的值。和关键字一样,它们也不可以作为标识符使用。

注释

  • 单行注释:以双斜杠“//”标识,只能注释一行内容,用在注释信息内容少的地方。
  • 多行注释:包含在 “ /* ” 和 “ */ ” 之间,能注释很多行的内容。
  • 文档注释:包含在 “ /** ” 和 “ */ ” 之间,也能注释多行内容,一般用在类、方法和变量上面,用来描述其作用。文档注释只放在类、接口、成员变量、方法之前,因为 Javadoc 只处理这些地方的文档注释,而忽略其它地方的文档注释。

Javadoc 是 Sun 公司提供的一种工具,它可以从程序源代码中抽取类、方法、成员等注释,然后形成一个和源代码配套的 API 帮助文档。也就是说,只要在编写程序时以一套特定的标签注释,在程序编写完成后,通过 Javadoc 就形成了程序的 API 帮助文档。

常量与变量

常量是指在程序的整个运行过程中值保持不变的量。在这里要注意常量和常量值是不同的概念,常量值是常量的具体和直观的表现形式,常量是形式化的表现。通常在程序中既可以直接使用常量值,也可以使用常量。

常量值

  • 整数型常量值
  • 实数型常量值
  • 布尔型常量值
  • 字符型和字符串常量值

常量

Java 语言使用 final 关键字来定义一个常量,其语法如下所示:

final dataType variableName = value

其中,final 是定义常量的关键字,dataType 指明常量的数据类型,variableName 是变量的名称,value 是初始值。

  • 静态常量:使用在 final 之前 public static 修饰。public static 修饰的常量作用域是全局的,不需要创建对象就可以访问它,在类外部访问形式为类.常量。这种常量在编程中使用很多。
  • 成员常量:在方法之外定义,作用域类似于成员变量,但不能修改。
  • 局部常量:在方法之内定义,作用域类似于局部变量,但不能修改。

变量

Java 语言是强类型(Strongly Typed)语言,强类型包含以下两方面的含义:

  • 所有的变量必须先声明、后使用。
  • 指定类型的变量只能接受类型与之匹配的值。

在 java 中用户可以通过指定数据类型和标识符来声明变量,其基本语法如下所示:

DataType identifier=value;

DataType:变量类型,如 int、string、 char 和 double 等。identifier:标识符,也叫变量名称。value:声明变量时的值。

Java变量的作用域:静态变量、全局变量和局部变量

名称 修饰 访问 生命周期
全局变量(实例变量) 无 static 修饰 对象名.变量名 只要对象被当作引用,实例变量就将存在
静态变量(类变量) 用 static 修饰 类名.变量名或对象名.变量名 其生命周期取决于类的生命周期。类被垃圾回收机制彻底回收时才会被销毁

局部变量是指在方法或者方法代码块中定义的变量,其作用域是其所在的代码块。可分为以下三种:

  • 方法参数变量(形参):在整个方法内有效。
  • 方法局部变量(方法内定义): 从定义这个变量开始到方法结束这一段时间内有效。
  • 代码块局部变量(代码块内定义):从定义这个变量开始到代码块结束这一段时间内有效。

基本数据类型

基本数据类型包括 boolean(布尔型)、float(单精度浮点型)、char(字符型)、byte(字节型)、short(短整型)、int(整型)、long(长整型)和 double (双精度浮点型)共 8 种。

类型名称 关键字 占用内存 取值范围
字节型 byte 1 字节 -128~127
短整型 short 2 字节 -32768~32767
整型 int 4 字节 -2147483648~2147483647
长整型 long 8 字节 -9223372036854775808L~9223372036854775807L
单精度浮点型 float 4 字节 +/-3.4E+38F(6~7 个有效位)
双精度浮点型 double 8 字节 +/-1.8E+308 (15 个有效位)
字符型 char 2 字节 ISO 单一字符集
布尔型 boolean 1 字节 true 或 false

提示:char 代表字符型,实际上字符型也是一种整数类型,相当于无符号整数类型。

引用数据类型

引用数据类型建立在基本数据类型的基础上,包括数组、字符串、类和接口。引用数据类型是由用户自定义,用来限制其他数据的类型。另外,Java 语言中不支持 C++ 中的指针类型、结构类型、联合类型和枚举类型。

引用类型还有一种特殊的 null 类型。所谓引用数据类型就是对一个对象的引用,对象包括实例和数组两种。实际上,引用类型变量就是一个指针,只是 Java 语言里不再使用指针这个说法。

空类型(null type)就是 null 值的类型,这种类型没有名称。因为 null 类型没有名称,所以不可能声明一个 null 类型的变量或者转换到 null 类型。

空引用(null)是 null 类型变量唯一的值。空引用(null)可以转换为任何引用类型。

在实际开发中,程序员可以忽略 null 类型,假定 null 只是引用类型的一个特殊直接量。

注意:空引用(null)只能被转换成引用类型,不能转换成基本类型,因此不要把一个 null 值赋给基本数据类型的变量

数据类型转换

如果以下 2 个条件都满足,那么将一种类型的数据赋给另外一种类型变量的时,将执行自动类型转换(automatic type conversion)。

  • 两种数据类型彼此兼容
  • 目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)

在运算过程中,由于不同的数据类型会转换成同一种数据类型,所以整型、浮点型以及字符型都可以参与混合运算。自动转换的规则是从低级类型数据转换成高级类型数据。转换规则如下:

  • 数值型数据的转换:byte→short→int→long→float→double。
  • 字符型转换为整型:char→int。

直接量的类型

int 类型的直接量

在程序中直接给出的整型数值,可分为二进制、十进制、八进制和十六进制 4 种,其中二进制需要以 0B 或 0b 开头,八进制需要以 0 开头,十六进制需要以 0x 或 0X 开头。例如 123、012(对应十进制的 10)、0x12(对应十进制的 18)等。

long 类型的直接量

在整型数值后添加 l 或 L 后就变成了 long 类型的直接量。例如 3L、0x12L(对应十进制的 18L)。

float 类型的直接量

在一个浮点数后添加 f 或 F 就变成了 float 类型的直接量,这个浮点数可以是标准小数形式,也可以是科学计数法形式。例如 5.34F、3.14E5f。

double 类型的直接量

直接给出一个标准小数形式或者科学计数法形式的浮点数就是 double 类型的直接量。例如 5.34、3.14E5。

boolean 类型的直接量

这个类型的直接量只有 true 和 false。

char 类型的直接量

char 类型的直接量有三种形式,分别是用单引号括起来的字符、转义字符和 Unicode 值表示的字符。例如‘a’,‘\\n’和‘\\u0061’。

String 类型的直接量

一个用双引号括起来的字符序列就是 String 类型的直接量。

null 类型的直接量

这个类型的直接量只有一个值,即 null。

运算符

算术运算符

一元运算符

运 算 符 名 称 说 明 例 子
- 取反符号 取反运算 b=-a
++ 自加一 先取值再加一,或先加一再取值 a++ 或 ++a
-- 自减一 先取值再减一,或先减一再取值 a-- 或 --a

二元运算符

运 算 符 名 称 说 明 例 子
+ 求 a 加 b 的和,还可用于 String 类型,进行字符串连接操作 a + b
- 求 a 减 b 的差 a - b
* 求 a 乘以 b 的积 a * b
/ 求 a 除以 b 的商 a / b
% 取余 求 a 除以 b 的余数 a % b

赋值运算符

运算符 含义 实例 结果
+= 将该运算符左边的数值加上右边的数值, 其结果赋值给左边变量本身 int a=5; a+=2; a=7
-= 将该运算符左边的数值减去右边的数值, 其结果赋值给左边变量本身 int a=5; a-=2; a=3
*= 将该运算符左边的数值乘以右边的数值, 其结果赋值给左边变量本身 int a=5; a*=2; a=10
/= 将该运算符左边的数值整除右边的数值, 其结果赋值给左边变量本身 int a=5; a/=2; a=2
%= 将该运算符左边的数值除以右边的数值后取余,其结果赋值给左边变量本身 int a=5; a%=2; a=1

逻辑运算符

运算符 用法 含义 说明 实例 结果
&& a&&b 短路与 ab 全为 true 时,计算结果为 true,否则为 false。 2>1&&3<4 true
|| a||b 短路或 ab 全为 false 时,计算结果为 false,否则为 true。 2<1||3>4 false
! !a 逻辑非 a 为 true 时,值为 false,a 为 false 时,值为 true !(2>4) true
| a|b 逻辑或 ab 全为 false 时,计算结果为 false,否则为 true 1>2|3>5 false
& a&b 逻辑与 ab 全为 true 时,计算结果为 true,否则为 false 1<2&3<5 true

关系运算符

运算符 含义 说明 实例 结果
> 大于运算符 只支持左右两边操作数是数值类型。如果前面变量的值大于后面变量的值, 则返回 true。 2>3 false
>= 大于或等于运算符 只支持左右两边操作数是数值类型。如果前面变量的值大于等于后面变量的值, 则返回 true。 4>=2 true
< 小于运算符 只支持左右两边操作数是数值类型。如果前面变量的值小于后面变量的值,则返回 true。 2<3 true
<= 小于或等于运算符 只支持左右两边操作数是数值类型。如果前面变量的值小于等于后面变量的值, 则返回 true。 4<=2 false
== 相等运算符 如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值相等,也都将返回 true。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。 Java 也支持两个 boolean 类型的值进行比较。 97 == \'a\' 5.0 == 5 true == false true true false
!= 不相等运算符 如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值不相等,也都将返回 true。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。 4!=2 true

自增和自减运算符

运算符 含义 实例 结果
i++ 将 i 的值先使用再加 1 赋值给 i 变量本身 int i=1; int j=i++; i=2 j=1
++i 将 i 的值先加 1 赋值给变量 i 本身后再使用 int i=1; int j=++i; i=2 j=2
i-- 将 i 的值先使用再减 1 赋值给变量 i 本身 int i=1; int j=i--; i=0 j=1
--i 将 i 的值先减 1 后赋值给变量 i 本身再使用 int i=1; int j=--i; i=0 j=0

位逻辑运算符

运算符 含义 实例 结果
& 按位进行与运算(AND) 4 & 5 4
| 按位进行或运算(OR) 4 | 5 5
^ 按位进行异或运算(XOR) 4 ^ 5 1
~ 按位进行取反运算(NOT) ~ 4 -5

复合位赋值运算符

运算符 含义 实例 结果
&= 按位与赋值 num1 &= num2 等价于 num 1=num 1 & num2
|= 按位或赋值 num1 |= num2 等价于 num 1=num 1 | num2
^= 按位异或赋值 num1 ^= num2 等价于 num 1=num 1 ^ num2
-= 按位取反赋值 num1 ~= num2 等价于 num 1=num 1 ~ num2
«= 按位左移赋值 num1 «= num2 等价于 num 1=num 1 « num2
»= 按位右移赋值 num1 »= num2 等价于 num 1=num 1 » num2

三目运算符

Java 提供了一个特别的三元运算符(也叫三目运算符),经常用于取代某个类型的 if-then-else 语句。

result = <expression> ? <statement1> : <statement3>;

其中,expression 是一个布尔表达式。当 expression 为真时,执行 statement1, 否则就执行 statement3。此三元运算符要求返回一个结果,因此要实现简单的二分支程序,即可使用该条件运算符。

运算符优先级

优先级 运算符 结合性
1 ()、[]、{} 从左向右
2 !、+、-、~、++、-- 从右向左
3 *、/、% 从左向右
4 +、- 从左向右
5 «、»、>>> 从左向右
6 <、<=、>、>=、instanceof 从左向右
7 ==、!= 从左向右
8 & 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= 从右向左

流程控制语句

Java 提供两种流程控制结构的语法,Java 提供了 if 和 switch 两种分支语句,并提供了 while、do while 和 for 三种循环语句。一般写循环语句时,分以下三步走:

  1. 定义初始值
  2. 设置判断条件
  3. 初始值变化

除此之外,JDK5 还提供了一种新的循环:foreach 循环,能以更简单的方式来遍历集合、数组的元素。

Java 还提供了 break、continue 和 return 来控制程序的循环结构,作用如下:

  • break:表示跳出当前层循环
  • continue:表示跳出本次循环,进入下一次循环
  • return:跳出当前方法的循环

foreach语句

foreach 循环语句是 Java 1.5 的新特征之一,在遍历数组、集合方面,foreach 为开发者提供了极大的方便。foreach 循环语句是 for 语句的特殊简化版本,主要用于执行遍历功能的循环。

foreach 循环语句的语法格式如下:

for(类型 变量名:集合) {
    语句块;
}

其中,“类型”为集合元素的类型,“变量名”表示集合中的每一个元素,“集合”是被遍历的集合对象或数组。

假设有一个数组,采用 for 语句遍历数组的方式如下:

// 声明并初始化数组
int[] numbers = { 43, 32, 53, 54, 75, 7, 10 };
System.out.println("----for----");
// for语句
for (int i = 0; i < numbers.length; i++) {
    System.out.println("Count is:" + numbers[i]);
}

那么采用 for-each 循环语句遍历数组的方式如下:

// 声明并初始化int数组
int[] numbers = { 43, 32, 53, 54, 75, 7, 10 };
System.out.println("----for each----");
// for-each语句
for (int item : numbers) {
    System.out.println("Count is:" + item);
}

用户交互类

java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。

下面是创建 Scanner 对象的基本语法:

Scanner s = new Scanner(System.in);

接下来我们演示一个最简单的数据输入,并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据:

使用 next 方法:

import java.util.Scanner; 
 
public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 从键盘接收数据
 
        // next方式接收字符串
        System.out.println("next方式接收:");
        // 判断是否还有输入
        if (scan.hasNext()) {
            String str1 = scan.next();
            System.out.println("输入的数据为:" + str1);
        }
        scan.close();
    }
}

执行以上程序输出结果为:

runoob com
输入的数据为:runoob

使用 nextLine 方法:

import java.util.Scanner;
 
public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 从键盘接收数据
 
        // nextLine方式接收字符串
        System.out.println("nextLine方式接收:");
        // 判断是否还有输入
        if (scan.hasNextLine()) {
            String str2 = scan.nextLine();
            System.out.println("输入的数据为:" + str2);
        }
        scan.close();
    }
}

执行以上程序输出结果为:

runoob com
输入的数据为:runoob com

next() 与 nextLine() 区别

next():

  • 1、一定要读取到有效字符后才可以结束输入。
  • 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
  • 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  • next() 不能得到带有空格的字符串。

nextLine():

  • 1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
  • 2、可以获得空白。

使用 nextDouble 方法

以下实例我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果:

import java.util.Scanner;
 
class RunoobTest {
    public static void main(String[] args) {
        System.out.println("请输入数字:");
        Scanner scan = new Scanner(System.in);
 
        double sum = 0;
        int m = 0;
 
        while (scan.hasNextDouble()) {
            double x = scan.nextDouble();
            m = m + 1;
            sum = sum + x;
        }
 
        System.out.println(m + "个数的和为" + sum);
        System.out.println(m + "个数的平均值是" + (sum / m));
        scan.close();
    }
}

执行以上程序输出结果为(输入非数字来结束输入):

请输入数字:
12
23
15
21.4
end
4个数的和为71.4
4个数的平均值是17.85

以上是关于Java基础部分的主要内容,如果未能解决你的问题,请参考以下文章

Java Lambda

Java语言基础之方法的设计

JSP基础

java 阳光偏好片段第2部分

argparse 代码片段只打印部分日志

JSP 基础语法