一、Java的关键字和标识符
关键字
1、定义:
在Java程序中,已经定义好的被预先使用的一些特殊的单词称为关键字 ,一共有50个关键字 (48+2个保留字) ,关键字都是小写的英文单词
2、关键字的分类
2.1 数据类型关键字
byte :字节类型
short : 短整型
int : 整型
long: 长整型
float :单精度浮点型
double:双精度浮点型
char: 字符型
boolean : 布尔类型
void :空类型
null :空对象
2.2 流程控制关键字
if: 条件分支判断
else:条件分支
switch: 条件分支判断
case : 条件分支其中一种情况
default : 默认
break: 退出条件 或 循环
continue : 退出当前循环,继续下一次循环
for : 循环
do: 循环
while : 循环
return:方法的返回
2.3 面向对象关键字
class:定义类
interface : 定义接口
extends:继承一个类
implements: 实现一个接口
super : 超级 (用于调用父类的成员)
this: 当前类
instanceof : 判断一个类的类型
import : 导入一个类
package : 定义一个类所在的包
new : 创建对象
2.4 修饰符关键字
abstract :修饰抽象类 、抽象方法
final : 修饰常量
native: 本地的 ,也用于修饰变量
private :私有的
protected : 受保护的
public : 公共的
static :静态的
synchronized :修饰方法或代码块,用于线程安全的
transient :瞬时状态
volatile :瞬时状态
2.5 异常关键字
try:试一试
catch: 捕获异常
finally: 最后执行的代码块 ( 多出的一个)
throws :定义需要抛出的异常
throw:抛出异常
2.6 其他关键字
assert :测试中的断言
strictfp : 其他
enum:定义枚举
2.7 保留字
const 、goto
标识符
1、定义
在Java程序中,所有由程序员自己命名的元素统称为“标识符”
2、标识符命名规则
-
标识符由数字、字母、下划线和$组成
-
标识符不能以数字开头
-
标识符区分大小写
-
标识符不能是关键字
注意事项:
定义类名的标识符 :首字母必须大写 ,后面的单词的首字母大写,准寻 大驼峰命名法 (例如 XxxXxx ,UserInfo ,Student)
定义方法 标识符: 首字母尽量小写 ,后面的单词首字母大写,准寻 小驼峰命名法(例如 xxxXxxx , getUserName() )
定义变量标识符: 单词全部小写 ( username)
定义包名: 按模板分层级, 使用公司的域名 倒写,(例如 com.softeem.xxx 、com.j2008.xxx)
定义项目名: 尽量使用英文 (Java项目 可以使用中文,JavaWeb项目一定使用英文)
标识符 | 是否符合 | 标识符 | 是否符合 |
---|---|---|---|
_$abc | ok | $username | ok |
Abc | ok | USERNAME | ok |
this | no | #stu | no |
1username | no | NULL | ok |
null | no | n1 | ok |
二、Java的常量和变量
常量
1、定义
在Java中,固定不变的数据量称为常量,常量也有内存,常量存放在被称为“常量池”的内存中
面试题: 常量池的内存有哪些? (存放常量的内存有哪些 )
2、常量的分类
常量类型 | 含义 | 示例 |
---|---|---|
整数常量 | 所有的整数 | 1,100,500 ,-20 |
小数常量 | 所有的小数 | 1.5,-3,4 ,3.1415926… |
字符常量 | 由单引号引起来,只能写一个字符,不能为’’ | ‘a’ ,‘2’ ,’ ’ |
字符串常量 | 由双引号引起来,可以写多个字符,可以为“” | “hello” “\n” “\t” |
布尔常量 | 用于条件判断的 , 只有2个常量 | true 、false |
空常量 | 用于表示空对象 | null |
常量的修饰符 : final
final int n = 100 ; // 定义常量的语法 ,n的值只能为 100,不能再次改变 ,其中n就是常量
变量
1、定义
在Java中用于保存一个数据的最小内存单元 称为 “变量” ,变量中每次只能存放一个值 ,变量的数值是可以被改变的 。
在定义变量时,需要明确三要素: 数据类型 、 变量名(标识符)、变量值
2、变量语法:
数据类型 变量名 = 初始值;
或者 数据类型 变量名1 ,变量名2 ;
// 定义一个变量 变量名是n ,数据类型是int ,初始值为100
int n = 100 ;
// 将原有变量名n中的值变更为 110
n=110;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1U6Ik8lG-1600836054972)(assets/1600655853306.png)]
变量在赋值时,值必须满足与数据类型匹配,如果不匹配可能出现异常 或丢失精度
3、变量的分类 :
全局变量(global variables)
在Java的类结构中,定义在类中,方法外面的变量, 它的作用范围: 整个类的方法中
public class Test1 {
//定义全局变量 :定义在类里面,方法的外面
int n = 100;
//定义方法
public void m(){
// 输出一句话 "" 表示输出的内容 + 表示连接两个字符串
System.out.println("n:"+n);
}
//定义方法
public void s(){
System.out.println("n:>>>"+n);
}
}
局部变量(local varibable)
一般声明在方法或代码块(条件语句块,循环语句块,静态语句块等) 中,它的作用范围只能在声明的区域中使用
// 定义run方法
public void run(){
// 局部变量 只能在声明所在的方法中使用
int n=200;
int i =1;
// 当类总存在局部变量和 全局变量同名时, 变量的使用遵循“就近原则”
System.out.println("局部变量n:"+ n); // 200
}
// 定义eat方法
public void eat(){
// System.out.println("i---"+i);
}
调用方法的语法
public static void main(String [] args){
// 如何调用 这个类的方法呢? 需要创建对象
// 创建对象的语法: 类名 对象名 = new 类名();
//调用对象的方法语法: 对象名.方法名();
Test1 obj = new Test1();
obj.m();
obj.s();
obj.run();
obj.eat();
}
三、Java的数据类型
Java是一门强类型的编程语言,它不同于一些弱类型的语言(JavaScript ,php,python),Java在声明变量时必须显示的定义变量的数据类型,变量的类型一旦定义,则不能改变 。Java中数据类型分为两大类
1、基本数据类型 : 包括 整数,浮点,字符,布尔类型等
2、引用数据类型 :包括 类,数组,集合,接口等
1、基本数据类型
- 整数型 ,默认值为0
数据类型 | 关键字 | 字节长度 | 数值范围 |
---|---|---|---|
字节型 | byte | 1个字节=8位 | -128~127 |
短整型 | short | 2个字节=16位 | -32768~32767 |
整型 | int(默认) | 4个字节=32位 | -2的31次方 ~2的31次方-1 |
长整型 | long | 8个字节=63位 | -2的63次方~2的63次方-1 |
-
浮点型,默认值为0.0
数据类型 关键字 字节长度 范围 单精度 float 4个字节 1.4013E-45~3.4028E+38 双精度 double 8个字节 4.9E-324~1.7977E+308 -
字符型 默认值 ‘ ’
数据类型 关键字 字节长度 范围 字符型 char 2个字节 0~65535 一个字符能存放一个中文汉字
-
布尔型 默认值 false
数据类型 关键字 字节长度 范围 布尔类型 boolean 1个字节 true、false 注意:
// 对于两个double类型/float类型的数计算, 由于计算机在计算式会缺失精度,计算的结果 //不是预期的0.3,建议对于浮点数计算式,使用java.math.BigDecimal引用数据类型计算 double d1 =0.1; double d2 = 0.2; //结果 0.30000000000000004 double d3 = d1 + d2; System.out.println(d3); float f1 =0.2f; float f2 = 0.3f; float f3 = f1-f2; // 结果 -0.1000000000001 System.out.println(f3);
对于字符类型中 "\ " 表示转移字符,不会占用内存
\n :换行
\t : 一个制表符tab
\b: 表示退格
\r: 表示enter
2、引用数据类型
在Java中除了8个基本数据类型以外的数据类型,都是引用数据类型 ,常用的引用数据类型 包括 类、数组、 接口,String 等
以类 举例
创建一个学生类 ,在一个类中会包含一些 变量(全局变量),还包含一些方法
定义一个学生类,这个类就是引用数据类型
public class Student{ // 定义的一个字符串变量 String stuname="张三"; char sex= '男'; int age = 20; // 定义一个方法 public void showInfo(){ System.out.println(stuname); System.out.println(sex); System.out.println(age); } }
如何使用这个学生类型(引用数据类型)
public static void main(String [] args){ // 定义学生类型 ,引用数据类型需要创建 引用的对象 // 引用数据类型 变量名 = null // 基本数据类型 变量名 = 初始值 // 对于类的创建 // 类名 对象名 = new 类名(); Student stu = new Student(); // 对象名.方法名(); stu.showInfo(); }
引用数据类型与基本数据类型的区别?
1、创建方式不同 ,基本数据类直接通过定义变量的方式创建, 而引用数据类型需要new一个对象
2、在JVM的内存分配不同, 基本数据类型的内存在栈内存中直接创建 , 而引用数据类型是在栈内存中定义引用的地址,实际的内存分布在堆内存中
3、引用数据类型 可以调用它的方法, 而基本数据类型没有方法
引用数据类型的内存分布图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pTjH6rB1-1600836054973)(assets/1600676108899.png)]
基本数据类型的分布:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vwahZBVV-1600836054974)(assets/1600676345002.png)]
四、Java的数据类型的转换
为什么需要进行数据类型转换
在Java中数据进行计算时 ,必须要求计算的元素的数据类型一致,如果数据类型不一致需要进行转换
数据转换分类
1、自动类型转换
转换规则: 范围小的类型向范围大的类型转换(从小到大转换)
byte -> short -> int-> long -> float -> double 其中boolean类型不参与转换
char ->int
转换原理: 类型向上提升
2、强制类型转换
- 整数之间的强转
// int 类型
int i=1;
// byte 类型
byte j=100;
// 由于i和j 不同类型,不能直接计算,程序会自动将j的类型向上提升为 int
// 所以i +j 之后依然是 int 类型
// 此时 int 的内存 大于 byte 的内存,会出现数据溢出的情况 ,JVM不允许
// byte s = i + j ; // 等号两遍类型不匹配
int y = i + j ;
System.out.println(y);
// 如果一定要使用byte赋值,还有一种办法,就是将两遍类型一致
byte s = (byte)(i + j) ; // 两个数在相加时 会先自动提升为int 然后再相加
- 整数与小数之间的强转
// 整数和小数之前 也会丢失精度
int n2 = 100;
double n3 = 3.5;
int n4 = (int)(n2 + n3);
// 相加时先提升为 double ,然后相加后得到 double
// double是8个字节 不能放在4个字节的长度中,
// (这里好比double 为一桶水, int为一杯水,相当于将一桶水往一杯水中放)
// 只能留住一本水的内容,所以 这里 如果强转成int 则小数会丢失,
System.out.println(n4);
- 小数和小数之间的强转
// float 与 double 类型
float f1 = 3.14f;
double d2 = 3.5;
double dd = f1+d2;
float ff = (float)(f1 + d2);
- 丢失精度的情况
// 强转时会丢失精度
byte n=100;
int m = 30;
byte mm = (byte)( n + m); // 因为最大值为127 再往后就是从最小值开始-128
System.out.println(mm);
// 整数和小数之间 也会丢失精度
int n2 = 100;
double n3 = 3.5;
int n4 = (int)(n2 + n3);
五、Java的字符ASCII码表
字符 | int值 |
---|---|
a | 97 |
A | 65 |
0 | 48 |
依次小写字母往后都是数字 ,例如 b为98,c为99… | |
A:65 B:66 C:67 0:48 1:49 2:50… |
字符与数值的转换
// int 与 char类型的转换
// 每一个char类型都有一个字符编码 这个编码参照 ASICC码表
char c='a';
// 自动提升 : 因为 char类型占2个字节, int占4个字节,自动char向上提升
int n = c;
System.out.println(n);
// 先相加 再转换
char c2 = (char)(n+2); // 需要强转
// 字符+字符 直接相加
char c3 = 'a'+'b';
System.out.println((int)c3);
| 依次小写字母往后都是数字 ,例如 b为98,c为99… | |
| A:65 B:66 C:67 0:48 1:49 2:50… | |
字符与数值的转换
// int 与 char类型的转换
// 每一个char类型都有一个字符编码 这个编码参照 ASICC码表
char c='a';
// 自动提升 : 因为 char类型占2个字节, int占4个字节,自动char向上提升
int n = c;
System.out.println(n);
// 先相加 再转换
char c2 = (char)(n+2); // 需要强转
// 字符+字符 直接相加
char c3 = 'a'+'b';
System.out.println((int)c3);
2020.9.21