定义:给类、方法、变量等起的名字
规则:
可以使用字母(26个英文字母的大小写、各国的一些语言、…)、数字、下划线、美元符号;
不能以数字开始(可以$开始);
不能是Java中的关键字;
[▲Java]类名必须以大写字母开始
标识符的规范:
前128个是ASCII表
定义:一个值保持不变的量(容器)。
格式:public static final 类型名 常量名 = 常量值;
public static final double PAI = 3.14;//常量的值不可被修改
注意:
注意:
变量定义格式:
[变量修饰符] 变量数据类型 变量名1, 变量名2 [=变量初值];
变量修饰符:
[public/protected/private] [static] [final] [transient] [volatile]
成员变量的类型可以是Java中的任意类型,包括简单数据类型、类、接口、数组。
变量的初始化:
数据类型 | 初值 |
---|---|
整型(byte/short/int/long) | 0 |
float | 0.0f |
double | 0.0d |
boolean | false |
char | /u0000 |
对象类型 | null |
变量的作用域
决定了变量可以使用的范围:
作用域规则:
在一个代码段中定义的变量,只能在该代码段或者该代码段的子代码段中可见。
变量分类:
注意:
变量名首字母一般小写。
+, -, *, /, %
==, ===, !=, >, >=, <, <=
做运算之后一定是boolean型值。
>, >=, <, <=
比较数值,
==, !=
除了比较数值之外,还可以比较相同类型。
flag = "我" >= "你";//×错误 flaf = "我" == "你";//√正确
其中,使用 ==
做比较时,
基本类型:比较数据值
引用类型:比较地址值,所以比较字符串内容是否相同应该调用 equals()
方法。
str1.equals(str2)
,相同返回 True
,否则 False
。
&&, ||, !, &, |
&&,||
进行“短路”运算;
即,有假必假,有真必真。
&, |
则不进行,两边都要进行运算。
+=, -=, *=, /=, %=; >>=, <<=, >>>=
>> /2, << *2, >>>
位移运算(没有 <<< )。
右移运算符 >>
:
用最高位的 1
或 0
补。
无符号右移运算符 >>>
:
算术运算符>关系运算符>逻辑运算符>赋值运算符
*基本数据类型的数据储存在栈内存中。
引用类型的变量,只可能存储两类值:null
或 地址值(含变量的类型)
。
数组储存在堆内存中。
byte,short,char→ int → long → float → double
低优先级转换为高优先级。
char隐式转换:字符在Unicode的编号。
boolean型数据和其他基本数据类型之间不能相互转换。
复合赋值操作:
short s = 10; s = s + 1;//错误,s+1是int型 short s2 = 10; s2 += 1;//正确,使用复合赋值操作时,编译器会把得到的s2+1转换成short型
byte, short, char这三者不管怎么组合运算得到的都是int型数据。
高优先级转换为低优先级。
方式:(目标类型)变量名
double dou2 = 3.14; int myInt = (int)dou2;//myInt==3
int和long转换char:会根据整型值对应的Unicode表中的字符。
注意:
int x = 130; byte b = (byte)x;//b=-128
转换前的数据类型与转换后的数据类型兼容。
String str = "1"; int x = (int)str;//错误
单分支、双分支、多分支。
语句:
if-else语句(可以嵌套)
if (expression) { expression; } else if (expression) { expression; } else { expression; }
switch-case语句
switch (expression) { case 常量1:{ statements break; } case 常量2: { statements break; } ... default: { statements break; } }
格式:
for(1初始化计数;2条件测试;4再求值参数) { 3expression;//如果有多个语句,{}不能省略 }
例:
int sum = 0; for(int i = 0; i<=5; i++) { sum += i; }
for循环中的三个表达式都可以省略,但不能省略';'号。
▲使用for循环可以不包含任何循环体(语句),有助于提高某些算法的效率和创建时间延迟循环。
for(int i=0; i<xyz_value; i++)
格式:
while(expression1) { expression2; }
格式:
do { expression1; } while (expression2);
如果循环次数在执行循环体之前就已确定,一般用for语句;如果循环次数是根据循环体的执行情况确定的,一般用while语句或者do-while语句。
(循环次数已经确定→for;否则其他)
当循环体至少执行一次时,用do-while语句;反之,如果循环体可能一次也不执行时,用 while语句。
type arrayName[];
或者 type[] arrayName;
int[] intArray; int intArray[];
People[] pArray;
int intArray[] = {1,2,3,4}; int[] arr = {1,2,3,4};//不能给数字
type[] arrayName = new type[num];
int[] arr1 = new int[2];//{0,0} arr1[0] = 123; arr2[1] = 456;
注意:
对于动态初始化一维数组,如果只new没有赋值,数组中的所有元素会自动获得默认初始值。如下:
数组类型 | 元素默认初始值 |
---|---|
整型数组 | 0 |
浮点型数组 | 0.0 |
布尔型数组 | false |
字符型数组 | /u0000 |
类类型数组 | null |
引用方式:arrayName[index]
数组下标可以是整型常数或者表达式。
如果下标(index)越界,则会报异常。
获取数组的元素个数(长度):数组变量名.length
intArray.length
int[] arr={1,2,3,4} for(int i=0;i<5;i++) { System.out.println(arr[i]); }
for(int num:arr) { //arr数组中的元素,会依次赋给num System.out.println("num="+num); }
import java.util.*; Scanner sc = new Scanner(System.in);
先构造一个 Scanner
Scanner sc = new Scanner(System.in);
使用 next 等方法
String name = in.nextLine(System.in);