1.计算机体系
1.输入设备: System.in:终端设备、控制台设备(键盘),File:文件(硬盘);
2.输出设备:system.out、System.err:终端、控制台(屏幕)File:硬盘
3.cpu;
4.内存;
学习的重点为CPU和内存
2. CPU的工作原理
1.从内存中读取指令数据
按照读取方式可分为:
- 按站顺序,一条一条读取——顺序执行语句
- 按指定地址读取——分支执行语句和循环执行语句
2.执行指令数据:处理各种各样的数据(暂时不考虑指令数据)
可以粗略的理解为:程序=语句+数据
3.语句角度
3.1在JAVA中,语句出现的位置:
- 方法的内部(不区分什么方法、除了抽象方法),具体为:静态方法、普通方法、final方法、非final方法;
- 类的内部,作为属性定义时,赋值语句也可以出现
class A{
int a=hello();//定义a属性时,执行hello方法(语句)
}
- 各种各样的代码块
构造代码块、静态代码块
class A{
{hello();}
}
class A{
static{hello();}
}
- 出现在构造方法中
class A{
A(){hello();}
}
还有内部类、匿名内、lambda表达式,暂时不用考虑。
2.语句的执行(语句并不是写了就会被执行)
- 方法中的语句,时方法被调用时,才会被执行,无论是什么方法。
- 语句的执行触发实际大体有三种:
1.某个类被加载时,会触发一批语句的执行;
2.某个类实例化对象时,会触发一批语句的执行;
3.某个类的方法,被调用时,会触发一批语句的执行。
3.2类的加载、对象的实例化、方法的调用 - 类的加载:当类被用到时并且类还没被加载时会触发类的加载。
类被用到:1用到了类中的静态属性或者调用了类里的静态方法时
2.要用该类实例化一个对象时
3.用到子类,会触发用到父类(包含接口)
执行顺序:
静态属性定义时里的赋值语句、静态代码块中的语句。执行顺序,按照书写顺序,依次执行;
父类的所有加载语句执行完,才能执行子类的加载语句。 - 对象的实例化:
1.对象的实例化可能会触发类的加载。反之,对象的实例化,可能不触发类的加载(类已经加载过了)
类的加载完成之后,可能紧跟着对象的实例化。反之,类的加载完成之后,可能不会对象的实例化(访问类的静态属性、调用类的静态方法时触发的类的加载)
2.和对象实例化有关的语句:
(1)属性定义时的赋值语句
(2)构造代码块中的语句
(3)构造方法中的语句 - 执行顺序:
(1) 属性定义和构造代码,按照书写顺序执行
(2)第一条完成之后,才执行构造方法中的语句
(3)子类的实例化时, 必须要求父类的所有实例化相关语句全部完成之后,才开始执行子类的 - 方法的调用:
方法中的语句,一定是被调用时,才能执行
1.静态方法,光有类,就可以开始调用了
2.普通方法,必须先通过类,实例化出对象出来(并不要求紧挨着)。才能通过对象去调用
3.唯一的特殊方法是main方法,是被JVM调用的。我们看不到调用的位置
4.数据角度
4.1直接接触到的数据(以变量、字面量、数组元素来体现)
- 基本类型(primitive type):byte、short、int、long、char、float、double(数值类型),boolean;
- 引用类型(referencetype):1.class类型;2接口类型;3.数组类型;
1.字面量(literal)
2.引用类型:null、“xxx”;
3.基本类型:1、1L、1.0、1.0F、‘c’、true、false;
4.数组元素类型:
(1) 类型[] 类型就是数组元素
byte[]、short[]、 int[]、 long[]、char[]、 float[]、 double[]
boolean[]
(2)引用类型作为数组元素
String[] Scanner[]
Comparable[] Comparator[]
(3)数组本身作为数组元素类型
int[][]
int[][][]
int[][][][]
…
4.2数据在内存中的位置 - 在内中的数据,被抽象抽象为JAVA语句中的:变量、数组中的元素、对象;
- JVM中,针对一个JAVA进程,内存主要分为:栈区、堆区、方法区;
1.对象:对象在堆区上;
2.引用:不确定,需要其他条件明确;
3.变量:根据变量的种类来明确变量在什么区域;
变量有几种种类:三种, 分别是局部变量(方法定义的变量、方法的形参、catch ()定义的变量)
4.对象的属性:存在于属性附着的对象上,对象存在于堆区。总的来说是栈区。
5.类的静态属性:存在于静态属性附着的类上,类存在于方法区。总的来说是方法区。
6.光看数据的类型(引用类型or基本类型)不决定变量存在于何处。
7.数组的元素存在于元素附着的对数组对象.上,所以也是存在于堆区。 - 方法的某次执行时需要的数据,以栈帧的形式,放置在栈区。
对象,逻辑上放置在堆区。
类的数据,逻辑上放置在方法区。
语句数据(指令数据、字节码数据、方法)放置在内存的位置:是随着类,放置在方法区。无论是静态方法,还是普通方法!
4.2程序员无法直接接触到的,但是使用非常频繁的
1.对象(属性)
2.类(静态属性、类相关的方法、父类信息)
只能通过引用去操作!
4.3数据存在何处
存在何处,是由其变量的种类决定的,和数据的类型无关。
对引用和对象的理解。