1、关键字、变量、数据类型

关键字和保留字

定义:被Java语言赋予特殊含义,有专门用途的字符串

特点:关键字中所有字母都为小写

关键字列表

数据类型 class、interface、enum、byte、short、int、long、float、double、char,boolean,void

流程控制 if、else、switch、case、default、while、do、for、break、continue、return

访问权限 public、protected、private

定义类 abstract、final、static、synchronized

类与类之间的关系 extends、implements

类实例相关 new、this、super、instanceof

异常处理 try、catch、finally、throw、throws

包相关 package、import

其他关键字 native、strictfp、transient、volatile、assert

值关键字 true、false、null

保留字

goto、const

保留字、关键字不能被使用

标识符 Identifier (变量、方法、类)

Java对各种变量、方法和类等要素命名时使用的字符序列成为标识符

技巧:凡是自己可以起名字的地方都教标识符

定义合法标识符的规则:

由26个英文字母大小写、0-9、_或$组成

不能以数字开头

不可以使用关键字和保留字、但可以包含

Java中严格区分大小写,长度无限制

标识符不能包含空格

Java中的名称命名规范

包名: 多个单词组成时所有字母都小写: myproducttest

类名、接口名:多个单词组成所有单词首字母大写: MyProductTest

变量名、方法名:首字母小写、其他单词首字母大写: myProductTest

常量名:所有字母都大写,多个单词用下划线分割:MY_PRODUCT_TEST

在起名字时,为了提高阅读性,要尽量有意义,“见名知意”

java采用unicode字符集,因此标识符也可以使用汉字声明,但不建议使用

可以看看《代码简洁之道.pdf》

变量

概念:内存的一个存储区域,该区域的数据可以在同一类型范围内不断变化。变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值。

作用:用于在内存中保存数据

注意事项:

Java中每个变量都需要先声明,后使用

使用变量名来访问这块区域的数据

变量的作用域:其定义所在的一对{}内

变量有在其作用域内才有效

在同一个作用域内,不能定义重名变量

public class myTest {
public static void main(String[] args) {
int myAge = 12;
System.out.println(myAge);
// System.out.println(myNumber);
// 在使用myNumber之前未定义
int myNumber;
// System.out.println(myNumber);
// 使用myNumber之前必须初始化
myNumber = 1001;
System.out.println(myNumber);
// int myAge = 11; 在同一个作用域下重复定义变量
}
}

变量的类型

基本数据类型 primitive type

数值型: byte(1字节)、short(2字节)、int(4字节)、long(8字节)

浮点型:float(4字节)、double(8字节)

字符型:char(2字节)

布尔型:boolean(1字节)

1字节等于 8bit

引用数据类型 reference type

类:class

接口: interface

数组:[]

public class Test {
public static void main(String[] args) {
// 1、 整型
byte b1 = 12;
byte b2 = -128;
// b2 = 128; 超出范围会报错
System.out.println(b1);
System.out.println(b2);
short s1 = 128;
// 通常定义整数时,使用int型
int i1 = 1234;
//声明long型变量,必须以'l'或者"L"结尾
long l1 = 123456L;
System.out.println(l1);
// 2、浮点型 不要求精度可以使用
// 通常定义浮点型变量时,使用double型
// 单精度 4 字节 float
// 声明float型变量必须以'f'或者"F"结尾
float f1 = 12.3F; //如果不加F/f 会报错 
System.out.println(f1);
// 双精度 8 字节 double
double d1 = 123.3;
System.out.println(d1 + 1);
// 3、字符型 char (一个字符=2字节)
// 声明char型变量,通常使用一对''
char c1 = 'a';
// c1 = 'AB'; 错误!字符型只能写一个字符
System.out.println(c1);
char c2 = '1';
char c3 = '中';
System.out.println(c2);
System.out.println(c3);
char c4 = '\n';
System.out.print("hello" + c4);
System.out.println("world");
// 4、布尔类型 boolean
// 只有两个值 true 和 false
boolean bool1 = true;
// bool1 = false;
System.out.println(bool1);
boolean isMarried = true;
if(isMarried) {
System.out.println("不能参加单身party了");
} else {
System.out.println("你可以多谈谈朋友");
}
}
}

类型转换 **

自动类型转换(提升)

前提: 这里讨论的只是7中基本数据类型之间的运算,不包含boolean类型

类型从小到大会自动提升类型 例如 byte => short/int/long/float/double

特别的: 当byte、char、short三种类型的变量做运算时,结果为int

整型运算时 凡事"小于"int型的运算 都以int 类型变量接收结果

class Test {
public static void main(String[] args) {
byte b1 = 2;
int i1 = 129;
int i2 = b1 + i1;
long l1 = b1 + i1;
System.out.println(i2);
float f = b1 + i1;
System.out.println(f);
short s1 = 123;
double d1 = s1;
System.out.println(d1);
char c1 = 'a';
int i3 = 10;
int i4 = c1 + i3;
System.out.println(i4);
byte b2 = 3;
short s2 = 123;
// short s3 = b2 + s2; // 会报类型错误 b2 + s2自动升类型为int
// 只能使用int 以及 "大于" int 容量的数据类型接收结果
int i5 = b2 + s2;
long l2 = b2 + s2;
}
}

强制类型转换

需要使用`()`作为强转符

数据类型容量 由高转低

由高转低强转类型 可以能会中造成数据精度问题、数据截断问题

class Test {
public static void main(String[] args) {
// 精度损失
double d1 = 12.3;
int i1 = (int)d1;
System.out.println(i1); // 12
// 精度损失
int i2 = 128;
byte b = (byte)i2;
System.out.println(b); // -128
}
}

数据类型转换扩展

class Test {
public static void main(String[] args) {
long l = 123123; // 如果不写L 相当于 将int 123123 自动转换成了long
System.out.println(l);
// long l1 = 123123123213222123; //编译失败过大整数,超过了int的容量范围并未有'L'的long型标记
long l1 = 123123123213222123L;
// float f1 = 12.3;// 编译失败,12.3会被当做double类型,需要强制类型转换
// 整数常量,默认类型为int型
// 浮点型常量,默认类型为double型
byte b = 12;
// byte b1 = b + 1; // 编译失败,1是整数常量 int 高转低需要强制转换 否则报错
// float f1 = b + 12.3 // 编译失败,12.3 是浮点型常量 double 高转低需要强制转换 否则报错
}
}

String类型

String 类型是引用数据类型,声明String类型变量是使用一对""

String类型可以和8种基本数据类型进行运算,且运算只能是连接运算"+",运算结果仍然是String类型

class Test {
public static void main(String[] args) {
String s1 = "Hello World";
System.out.println(s1);
String s2 = "a";
String s3 = "";
int number = 1001;
String numberStr = "学号:"
String info = numberStr + number; // 连接运算
System.out.println(info);
}
}

变量之进制

所有数字在计算机底层都以二进制形式存在。

对于整数有四种标识方式

二进制(binary): 0 / 1 ,满二进一。以0b或者0B开头。

十进制(decimal): 0-9, 满十进一。

八进制(octal):0-7,满八进一。以0开头。

十六进制(hex):0-9A-F,满十六进一。以0x或者0X开头。A-F不区分大小写

class BinaryTest {
public static void main(String[] args) {
int num1 = 0b110; // 二进制
int num2 = 110; // 十进制
int num3 = 0127; // 八进制
int num4 = 0x124A;// 十六进制
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
}
}

二进制

Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位;当是long类型时,二进制默认占64位,第64位是符号位。

二进制的整数有如下三种形式

原码:直接将一个数值转换成二进制数,最高位是符号位。

负数的反码:是对原码按位去反,只是最高位(符号位)确定为1。

负数的补码:其反码加1。

计算机以二进制补码的形式保存所有的整数

整数的原码、反码、补码都相同

负数的补码是其反码+1

二进制转十进制

正数二进制 按位次幂相加

负数二进制一般都是补码,负数需要反推 ,补码 - 1 取反 求出原码 按位次幂相加

十进制转二进制

用一个数不停的除以二取余,得到的结果逆向就是二进制