1.查漏补缺
short 和byte相加得到int型,(当byte, short, int, char 混合计算时都变成int)
byte b = 1;
short s = 1;
char c = 'A';
byte bb = b + s + c; //报错
int ii = b + s + c; //正确
long ll = b + s + c; //先变为int , 然后自动转换成long型
double 优先级最高 , 除了布尔类型都能转换为double 无论是整数或是字符型都能转换为double/float;
2.函数与方法的叫法
C语言中只有函数, 没有方法, 且函数可直接调用, 不需要二次调用 Java中只有方法, 没有函数 C++中二者都有 , (面向对象为方法,面向过程为函数)
3.形式参数和实际参数
//在定义方法时称作形参
add(int a, int b){
......
}
//在调用方法时称作实参
add(1 , 2);
4.关于交换两个变量的值
if ( m < n ){
m = m + n;
n = m - n;
m = m - n;
}
5.关于Java中的内存划分和管理
java Runtime Data Area : java运行时数据区域,我们也可以叫JVM内存
首先,内存被划分为 五个区域 : 程序计数器 , 方法区/静态区/静态代码段 , 栈内存(虚拟机栈/VM栈) , 堆内存 , 本地方法栈
程序计数器 :
占用较小的一块空间,作用可以看做是当前线程执行的字节码的位置的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖于这个计数器来完成
可以理解为保存下一条语句的行号,依次向后递增
静态区 :
是用来存放我们的程序文件的,载入到内存之后的程序文件对象的一段空间,java中就是指我们的class文件
包括方法,方法在被调用之前,都是以静态的形式被保存到静态区的
静态区中还有运行时常量池
栈内存 :
以栈数据结构为模型,创建一段内存空间
栈数据结构特性 : 先进后出,像弹夹
用来执行方法,局部变量也是在栈内存
栈的构成
栈空间 : 就是指以栈数据结构为模型的一段内存空间
栈帧 : 栈内存中,每一个栈元素,叫栈帧
栈顶元素 : 最后一个方进入的栈帧
栈底元素 : 第一个放进去的栈帧
栈的操作 :
压栈 : 就是指把元素放入栈空间的过程
弹栈 : 就是把元素从栈空间中弹出的过程
java中,方法调用,就是压栈操作,方法执行完 就是弹栈操作
堆内存 :
用来存放对象,根据静态区中的class文件对象,创建的对象
每个对象空间,分为3块
数据部分 : 成员变量
头部 : hashCode值
类型 : 是哪个类创建的对象,保存的是类文件在静态区的地址,所以在成员方法中是可以直接访问静态属性的
本地方法栈 :
用来执行native声明的方法,比如Object类中的hashCode()方法
6. java程序的执行流程 :
1 java程序编写
文本编辑器,按照java规范编写代码
2 java程序的编译
javac 进行编译 生成 class文件
3 java程序调用
java xxxx
3.1 开启java虚拟机,然后把程序对应的class文件,载入静态区
3.2 jvm自动调用该class的main方法,并且只有一个main方法,固定写法,java是单入口程序
3.3 main被调用之后,jvm就会在栈内存开辟栈帧,把main中的代码复制进去,然后开始执行
3.4 main方法执行流程
3.4.1 在main方法中没有其他方法调用
执行完main方法之后,main栈帧弹栈,结束,jvm关机
3.4.2 main中有其他方法调用
如果调用了当前类的方法,会在main方法栈帧之上,开辟新的栈帧,并把对应的代码复制进去开始执行,直到执行结束,返回到main栈帧的调用处,继续执行main方法
如果调用了其他类的方法,把对应的类载入到静态区,然后再开辟栈帧,复制代码,执行,执行完返回main,继续执行
如果被调用方法中,还有其他方法调用,就继续压栈,一直到main方法执行结束,弹栈,jvm关机
程序加载 :
静态加载 : 程序开始执行,首先把所有和该程序相关的文件,全部一次性从硬盘载入内存
动态加载 : 程序开始执行,只会载入当前用到的文件,如果执行过程中,需要其他文件,再去硬盘中载入