基础语法
-
每一条语句都必须以分号结尾
-
Java中的方法就是其他编程语言中的函数
-
main方法是程序的入口
没有main方法, Java程序是无法启动的
方法必须包含在class内部, 先有class, 再有方法 -
public class 的名称必须要和文件名保持一致
注释(Comment)
Java的注释有3种书写格式
- 单行注释
//啦啦啦
- 多行注释
/*
拉拉
啦啦啦
*/
- 文档注释(一种特殊的多行注释)
很多时候用来描述这个方法是干嘛用的或者这个类干嘛用的或者这个成员变量的用途
/**
* 计算2个整数的和
* @param a 第1个整数
* @param b 第2个整数
* @return 2个整数的和
*/
public static int add(int a, int b) {
return a + b;
}
- 多行注释不能嵌套多行注释
数据类型
Java的数据类型主要分为2大类
- 基本类型(Primitive Type)
byte: 8位的整数, 取值范围是[-128, 127]
short: 16位的整数, 取值范围是[-32768, 32767]
int: 32位的整数, 取值范围是[-2^31, 2^31-1]
long: 64位的整数
float: 单精度32位浮点数
double: 双精度64位浮点数
boolean: 布尔类型, 有true, false两个取值
char: 单个16位的Unicode字符, 2个字节意味着可以存储中文 - 引用类型(Reference Type)
引用类型的值是对对象的引用
引用类型的变量里面存储的值是对象的地址值
字面量(Literal)
字面量:直接写出来的值就叫字面量
- 整数
// 十进制
byte v1 = 123;
// 二进制0b或者0B
short v2 = 0b11001;
// 十六进制0x或者0Xf78a
int v3 = 0xF78A;
// 以用L或者l结尾表示long类型
long v4 = 199L;
- 浮点数
// 以F或者f结尾表示float类型(或者123.4f)
float v1 = 123.4F;
// 以D或者d结尾表示double类型(或者123.4d)
double v2 = 123.4D;
// 默认就是double类型
double v3 = 123.4;
// 可以用科学计数法(E或者e)
float v4 = 1.234E2F;
double v5 = 1.234e2;
- 字符和字符串
// 用单引号表示字符
char v1 = 'A';
// 用双引号表示字符串
String v2 = "ABCD";
- 布尔值
boolean v1 = true;
boolean v2 = false;
- 空值
String string = null;
与空串的区别:
String str1 = "ABCD";
String str2 = ""; // 空串
String str3 = null;
转义序列(Escape Sequences)
和C一样
在数字中使用下划线
从Java7开始, 可以给数字添加下划线增强可读性
int v1 = 1_0000_0000;
int v2 = 0xFF_EC_DE_5E;
int v3 = 0b11010010_01101001_10010100_10010010;
double v4 = 1.23_45_67;
long v5 = 1___0000_0000; // 下划线可以写很多个
下面的用法是错误的
// 不能在浮点数的小数点前后使用下划线
double r1 = 1._23;
double r2 = 1_.23;
// 不能在数字的最前面和最后面使用下划线
int r3 = _123;
int r4 = 123_;
// 不能在X, B, F, D, L, E 等特殊字母的前后使用下划线
变量的初始化
- 任何变量在使用之前都必须要先初始化(赋值)
局部变量:需要程序员手动初始化
非局部变量(实例变量, 类变量): 编译器会自动给未初始化的变量设置一个初始值
运算符(Operator)
- 为了保证运算符按照预期执行, 尽量多使用小括号
字符串拼接
- 可以使用加号(+)进行字符串的拼接
int age = 18;
String name = "Jack";
double height = 1.78;
System.out.println(
"My name is" + name
+ ", age is " + age
+ ", height is " + height);
位运算
>> 与 >>>
>>(有符号右移): 最左用符号位补齐
>>>(无符号右移): 最左用0补齐
& | ^ 的一般使用:
int age1 = 0b10010;
int age2 = 0b11111;
int age3 = age1 & age2;
/*
*0b10010
*0b11111
*-------
* 10010
*/
但在Java里& | ^ 也能用在boolean值中
boolean flag1 = true;
boolean flag2 = false;
System.out.println(flag1 & flag2); // 两个都为true, 才为true
System.out.println(flag1 | flag2); // 有一个为true, 就是true
System.out.println(flag1 ^ flag2); // 不一样就是true, 一样就是false
对比&& ||, & | 少了短路功能
类型转换(Type Conversion)
- 拓宽基本类型转换(Widening Primitive Conversion)
数据范围小的转为数据范围大的(19种), 可以自动转换(隐式转换)
byte转short, int, long, float, double
short转int, long, float, double
char转int, long, float, double
char转int, long, float, double
int转long, float, double
long转float, double
float转double
byte b = 12;
short s = b;
int i1 = s;
char c = 'A';
int i2 = c;
long l = i1;
float f = l;
double d = f;
- 窄化基本类型转换(Narrowing Primitive Conversion)
数据范围大的转为数据范围小的(22种), 可能会丢失精度和范围, 需要强制转换.
一元数字提升(Unary Numeric Promotion)
一元数字提升: 将byte, short, char 类型的一元数字自动提升为int类型(拓宽基本类型转换)
byte b1 = 10;
byte b2 = 20;
b1 + b2
// + 是二元运算符, b1, b2不是一元数字
b1++;
++b1;
// ++是一元运算符(单目运算符), 所以b1是一元数字
下面的情况会执行一元数字提升:
1.数组的索引, 创建数组时的数组长度
注意:数组的索引必须是int类型
int[] array = {11, 22, 33, 44};
byte index = 10;
array[index] = 20; // byte类型自动提升为int类型
char number = 10;
int[] array = new int[number]; // char类型自动提升为int类型
2.一元运算符+
3.一元运算符-
int age = 10;
System.out.println(+age); // 代表正数
System.out.println(-age); // 代表负数
char c = 'A' // 存储的是它的ASCII值65
System.out.println(c); // 打印A
System.out.println(+c); // c是一元数字自动提升为int类型所以打印65
System.out.println((int)c); // 和上面等价
4.按位取反(~)
5.位移(<< >> >>>)
二元数字提升(Binary Numeric Promote)
二元数字提升: 提升一个或两个数字(拓宽基本类型转换)
标识符(Identifier)
命名建议
其他
Integer.toBinaryString() // 这个函数会返回一个数的二进制, 返回值是字符串
System.out.println(Integer.toBinaryString(-128));
- Java里面if条件判断里面的条件必须是布尔类型, 如果用比较运算符的话返回的结果就是布尔类型
不可以
int age = 10;
// 不可以
if (age) {
}
// 可以
if (age > 5) {
}
因为age不是布尔类型.可以比较.