Java标识符和关键字
1.标识符
标识符是指用来标识某个实体的一个符号,可以理解为一个名字,用来标识类名、接口名、方法名、变量名、常量名等。main也是一个方法名,属于标识符,但是这个标识符不能修改。
标识符的命名规则(命名规则属于语法机制,必须遵守)
Java的标识符只能由字母、数字、下划线、美元符号组成,不能含有其它符号,并且第一个字符不能是数字。关键字不能作为标识符使用。像public class static void等都是关键字,不能做标识符。
命名规范(命名规范只是尽量按照统一的规范来进行命名,不符合规范也行,代码是可以编译通过的)
(1)遵循驼峰命名法,例如:firstName、lastName、FirstName、LastName。
(2)类名、接口名首字母大写,后面每个单词首字母大写。
(3)变量名、方法名首字母小写,后面每个单词首字母大写。
(4)常量所有的字母都大写。
2.关键字
Java中提前定义好了一些具有特殊含义的单词,这些单词全部小写,具有特殊含义,不能用作标识符。Java中所有的关键字都是小写。通常在编译器中关键字会高亮显示。Java语言共定义了如下表所示的关键字。
代码注释
注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释只是为了提高可读性,不会被计算机编译。Java提供了3种代码注释,分别为单行注释、多行注释和文档注释。
1.单行注释
//为单行注释标记
int a = 1; // 初始化一个变量a为10
2.多行注释
/* /为多行注释标记
/
注释内容
*/
3.文档注释
/** /为文档注释标记。当文档注释出现在类、方法、字段等的声明前面时,会Javcdoc工具提取为 JavaDoc文档内容。
/*
- 这是一个文档注释示例
- 它通常包含有关类、方法或字段的详细信息
*/
基本数据类型
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
整数类型
整数类型用来存储整数数值。整数类型的数据根据在内存中所占的大学不同可以分为 byte、short、int 和 long这四种类型。这些类型可以存储负数、零和正数。
数据类型 占用内存 取值范围 默认值
byte 1byte -128(-27)~127(27-1) 0
short 2byte -32,768(-215)~32,767(215 - 1) 0
int 4byte -2,147,483,648(-231)~2,147,483,647(231 - 1) 0
long 8byte -9,223,372,036,854,775,808(-263)~9,223,372,036,854,775,807(263 -1) 0L
浮点类型
浮点类型表示有小数部分的数字。Java中浮点类型分为 float 和 double。虽然 float 和 int 都占用 4 字节,但 float 可以表示的范围(-3.43E38 ~ 3.43E38)远超 int。
数据类型 占用内存 取值范围 默认值
float 4byte -3.4E38~3.4E38 0.0f
double 8byte -1.7E308~1.7E308 0.0d
E为科学计数法,表示10的多少次方。
字符类型
1.char 类型
char 类型表示的是一个16 位 Unicode 字符,最小值是 \u0000(十进制),最大值是 \uffff(65535)。
char c1 = ‘a’; // 使用单个字符
char c2 = 97; // 使用十进制的整数(Unicode 值)
char c3 = ‘\u0000’; // 使用十六进制的整数
2.转义字符
转义字符是一些有特殊意义的字符,用来表示常见的不能显示的字符,如表示换行。
布尔类型
布尔类型又称逻辑类型,只有true和false两个值。这种类型只作为一种标志来记录 true/false 情况,布尔类型通常被用在控制流中作为判断条件。
import java.util.Scanner;
public class Tickets {
public static void main(String[] args) {
System.out.println("输入儿童的身高");
Scanner sc=new Scanner(System.in);//获取控制台输入的值
float height=sc.nextFloat();//将输入值赋值给height
boolean result=(height>=1.2);//判断身高是否大于等于1.2米
System.out.println("是否需要买票:"+result);//输出结果
}
}
常量与变量
变量
在程序过程中值会发生变化的量。变量必须先声明,再赋值才能访问(没有赋值不能访问, 不然会报错),直白来说变量就是一个存储数据的一个盒子。根据作用域范围的不同分为:局部变量、实例变量、类变量、参数变量。
变量命名的规则:
○ 使用有意义的单词
○ 不能使用 关键字(例如,class、int、boolean等)作为变量名
○ 变量名不能重复
○ 变量名必须是一个有效的标识符(符合标识符命名规则)
常量
在程序运行过程中一直不会改变的量被称为常量,常量在整个程序的过程中只能被赋值一次。常量的值在声明后不能被修改或重新赋值,常量通常使用大写字母和下划线的形式命名,以便与变量区分。
final static 数据类型 常量名=常量值;
final double PI =3.14; //声明double型常量PI并赋值
数据类型转换
数据类型转换是指将一个值从一种数据类型更改为另一种数据类型的过程。数据类型转换有两种方式,即自动转换类型(隐式转换)与强制转换类型(显式转换)。
自动类型转换(隐式转换)
从低级类型到高级类型的转换,系统自动执行,这种类型的转换叫做自动类型转换。转换从低级到高级:其中char类型比较特殊,它可以与部分int类型数据兼容,且不会发生精度变化。
byte(1字节) – > short(2字节),char(2字节)-- > int(4字节) --> long(8字节) --> float(4字节) --> double(8字节)
数据类型转换必须满足如下规则:
● 不能对boolean类型进行类型转换。
● 不能把对象类型转换成不相关类的对象。
● 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
● 转换过程中可能导致溢出或损失精度
● 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
public class ZDLXZH{
public static void main(String[] args){
int i1 = 'a';//char自动类型转换为int
System.out.println("char自动类型转换为int后的值等于"+i1);
byte b1 = 5;
int i2 = b1; // byte转换为int
System.out.println("byte自动类型转换为int后的值等于"+i2);
float f1 = 3.14f;
double d1 = f1; // float转换为double
System.out.println("float自动类型转换为double后的值等于"+d1);
char c1= 'A';//定义一个char类型
int i3 = c1+1;//char 类型和 int 类型计算
System.out.println("char类型和int计算后的值等于"+i3);
}
}
char自动类型转换为int后的值等于97
byte自动类型转换为int后的值等于5
float自动类型转换为double后的值等于3.140000104904175
char类型和int计算后的值等于66
强制类型转换(显式转换)
强制类型转换是指通过强制转换运算符将一种数据类型转换为另一种数据类型。强制类型转换需要明确地指定要转换的数据类型,并且可能会导致数据精度的丢失或溢出。强制类型转换的条件是转换的数据类型必须是兼容的。
public class QZLXZH{
public static void main(String[] args){
double value = 3.14;
int num = (int) value; // double转换为int
System.out.println("double强制类型转换为int后的值等于"+num);
}
}
double强制类型转换为int后的值等于3
隐含强制类型转换
- 整数的默认类型是 int。
- 浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f。
运算符
运算符是于执行各种操作的特殊符号。用于处理变量和值,执行数学计算、逻辑运算、位运算和其他操作,运算符允许程序员在代码中执行各种操作,从而实现所需的功能。
赋值运算符
用于将值赋给变量,赋值运算符用符号=表示。此类运算符功能是将右方操纵的结果赋值给左操作数。赋值运算符都是先把右边的计算完,在赋值给左边。
public class Test {
public static void main(String[] args) {
int a = 10,b = 11,c = 12; //声明变量a、b、c
c =b= a + 5; //将a与5的和赋值给变量b,然后再赋值给变量c
System.out.println(" b = " + b );
System.out.println(" c = " + c );
c += a ; //将c的值加上a的值,再赋值给c
System.out.println("c += a = " + c );
}
}
b = 15
c = 15
c += a = 25
算术运算符
用于执行基本的数学运算,加法、减法、乘法、除法和取模(取余)等。
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20; //声明变量a、b
System.out.println("a + b = " + (a + b) );
System.out.println("a - b = " + (a - b) );
System.out.println("a * b = " + (a * b) );
System.out.println("b / a = " + (b / a) );
System.out.println("b % a = " + (b % a) );
System.out.println("a++ = " + (a++) );
System.out.println("a-- = " + (a--) );
}
}
a + b = 30
a - b = -10
a * b = 200
b / a = 2
b % a = 0
a++ = 10
a-- = 11
自增自减运算符
自增自减运算符用于让变量的值加1或减1。
public class Test {
public static void main(String[] args) {
int a = 1; //定义一个变量;
a++; //自增运算
System.out.println("a =" + a);//输出此时a的值
a--;
System.out.println("a =" + a);//输出此时a的值
}
}
关系运算符
用于比较两个值的关系,如等于、不等于、大于、小于等。关系运算符返回布尔值(true 或 false),用于条件判断。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in ); //创建扫描器获取在控制台的值
System.out.println("请输入两个整数,用空格隔开(a b):");
int a=sc.nextInt(); //获取输入的第一个数
int b= sc.nextInt(); //获取输入的第二个数
System.out.println("a == b = " + (a == b) );
System.out.println("a != b = " + (a != b) );
System.out.println("a > b = " + (a > b) );
System.out.println("a < b = " + (a < b) );
System.out.println("b >= a = " + (b >= a) );
System.out.println("b <= a = " + (b <= a) );
}
}
逻辑运算符
逻辑运算符用于连接多个条件表达式,实现复杂的逻辑判断。如逻辑与、逻辑或和逻辑非等。逻辑运算符计算的值必须是boolean型数据。
public class Test {
public static void main(String[] args) {
int a = 2,b = 3;
boolean c = true,d = false;
boolean result1=( a < b )&&( a != b );
boolean result2=( a < b )||( a != b );
System.out.println(result1);
System.out.println(result2);
System.out.println("a && b = " + (c&&d));
System.out.println("a || b = " + (c||d) );
System.out.println("!(a && b) = " + !(c && d));
}
}
true
true
a && b = false
a || b = true
!(a && b) = true
位运算符
用于执行位级别的操作,通常用于整型数据类型。位运算符可以分为两大类:位逻辑运算符和位移运算符。
public class Test {
public static void main(String[] args) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
System.out.println("a & b = " + c );
c = a | b; /* 61 = 0011 1101 */
System.out.println("a | b = " + c );
c = a ^ b; /* 49 = 0011 0001 */
System.out.println("a ^ b = " + c );
c = ~a; /*-61 = 1100 0011 */
System.out.println("~a = " + c );
c = a << 2; /* 240 = 1111 0000 */
System.out.println("a << 2 = " + c );
c = a >> 2; /* 15 = 1111 */
System.out.println("a >> 2 = " + c );
c = a >>> 2; /* 15 = 0000 1111 */
System.out.println("a >>> 2 = " + c );
}
}
a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2 = 15
a >>> 2 = 15
instanceof运算符
该运算符用于操作对象实例,检查该对象是否是一个特定类型,如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。
String name = "Java";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真
如果被比较的对象兼容于右侧类型,该运算符仍然返回 true。
class Vehicle {}
public class Car extends Vehicle {
public static void main(String[] args){
Vehicle a = new Car();
boolean result = a instanceof Car;
System.out.println( result);
}
}
三元运算符
条件表达式 ? 值1:值2
当 表达式 的值为 true 时, 整个表达式的值为 值1;当 表达式 的值为 false 时, 整个表达式的值为 值2。
运算符的优先级