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; 在同一个作用域下重复定义变量 } }
- Java中每个变量都需要
-
变量的类型
基本数据类型 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 取反 求出原码 按位次幂相加
十进制转二进制
用一个数不停的除以二取余,得到的结果逆向就是二进制
网友评论