目录
计算机体系&&CPU原理
计算机体系
CPU:计算机中负责读取指令,对指令译码并执行指令的核心部件
内存:用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据
输入设备: System.in 终端设备,控制台设备(键盘);File 文件(硬盘)
输出设备: System.out && System.err 终端设备,控制台设备(屏幕设备); File 文件(硬盘)
CPU的基本工作原理
备注:1 ——>2——>1循环执行,直至处理数据完毕
1,从内存中读取指令数据
- 顺序执行语句:按照顺序,一条一条的进行读取
- 分支执行语句&&循环执行语句: 按照指定地址,去读取
2,执行指令数据(对各种各样的数据进行处理)
- int a = 1;表示从a变量所代表的内存空间中把值读到CPU中
- int c = a + b;表示从CPU中,把a+b计算出来的数据保存到c变量所代表的的内存空间中
语句角度对JavaSE小结
问题1:Java中,语句出现的位置?
备注:内部类,匿名类,lambda表达式。这三种暂时不考虑
- 方法的内部(包括静态方法,普通方法,final方法,非final方法,除了抽象方法)
- 类的内部,作为属性定义时,赋值语句也可以出现
- 各种各样的代码块(构造代码块&&静态代码块)
- 出现在构造方法中
//构造代码块 class A { { hello(); } } //静态代码块 class A { static { hello(); } } //构造方法 class A { A() { hello(); } }
问题2:Java中,语句出现的位置什么时候会被执行到?
备注:内部类,匿名类,lambda表达式。这三种暂时不考虑。跟上面问题一一对应
1,方法中的语句,是方法被调用时才能执行!不论方法是什么方法。
当有方法重载时,执行的是哪个方法?
回答:方法重载通常用于创建完成一组任务相似但参数的类型或参数的个数或参数的顺序不同的方法。既可以发生在普通方法上,也可以发生在构造方法上,既可以发生在同类中,也可以发生在父子类中。
当有方法重写(当父类是private时,子类不能继承方法)时,执行的是哪个方法?
回答:方法的重写是指两个方法的返回值、方法名、参数的类型和个数相同(子类重写父类的方法)。方法的重写,不能发生在同类中,只能发生在子类中。若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。 如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
方法的隐藏:如果子类中定义的静态方(类方法)与父类中静态方法(类方法)具有相同的返回值类型、方法名、方法参数的类型和个数完全相同,则称子类中的该方法“隐藏”了父类中的该方法。当子类创建的对象调用该隐藏方法时,默认调用的是子类中的方法。
//代码块的执行时机
class A {
int a = ........ A类实例化一个对象时被执行(隐含着子类实例化时,会触发父类的实例化)
}
class A {
static int a = ..... A类被加载时执行,静态
}
class A {
{ ....... } A类实例化对象时
}
class A {
static { } A类被加载时执行
}
class A {
A(){ ....... } A类实例化对象时
}
语句的执行触发位置小结(此处可对语句执行的顺序进行总结):
- 某个类被加载时,会触发一批语句的执行
- 某个类被实例化对象时,会触发一批语句的执行
- 某个类中的方法被调用时,会触发一批语句的执行
1,什么时候进行类的加载?
类被用到时&&类还没有被加载过时
- 类被用到时——(用到了类中的静态属性||调用了类里的静态方法)
- 类被用到时——(要用该类实例化一个对象时)
- 类被用到时——(用到子类时,会触发父类(包含接口))
- 类还没有被加载过时——(以目前学到的,类的加载往往只执行一次)
执行顺序
静态属性定义时里面所包含的赋值语句,静态代码块语句。执行顺序按照书写的顺序执行。父类的所有加载语句执行完,才能执行子类的加载语句
2, 对象的实例化
对象的实例化可能会触发类的加载。反之,对象的实例化,可能不触发类的加载(类已经加载过了);类的加载完成之后,可能紧跟着对象的实例化。反之,类的加载完成之后,可能不会对象的实例化,比如在访问类的静态属性,调用类的静态方法时候触发的类的加载,就不会引起对象的实例化。
和对象实例化有关的语句
主要有3个部分:1)属性定义时的赋值语句;2)构造代码块中的语句;3)构造方法中的语
执行顺序:1)和 2)按照书写顺序执行;前面完成以后,才执行第 3);子类的实例化时,必须要求父类的所有实例化相关语句全部完成之后,才开始执行子类的
3,方法中的语句,一定是被调用时才能执行
- 静态方法,光有类,就可以开始调用了;
- 普通方法,必须先通过类,实例化对象出来(并不要求紧挨着)。才能通过对象去调用
- 唯一的特殊方法是main方法,是被JVM调用的,我们看不到调用的过程
Java认知从数据角度?
问题1,数据的分类
直接接触到的数据:基本类型(数值和布尔)和引用(class类型/接口类型/数组类型)类型
无法直接接触的数据:对象(属性);类(静态属性,类的相关方法,父类信息)
问题2, 数据到底存放在内存中的哪里?
内存中的数据被抽象成java语句中的哪些概念——变量,数组中的元素,对象
JVM中,针对一个Java进程,内存主要分为几个区域?——栈区,堆区,方法区
引用(存的就是找到对象的线索)不确定在什么区上?不确定,需要其他条件来明确。
变量在什么区域上?根据变量的种类来明确在什么区上?
变量有3种,分别是局部变量(方法定义的变量,方法的形参,catch、(定义的变量)),对象的属性,类的静态属性。
- 局部变量存在于该方法执行时,创建的栈帧中。总得来说是栈区
- 对象的属性存在于属性符着的对象上,对象存在于堆区,总得来说是堆区
- 类的静态属性存在于静态属性附着的类上,存在于方法区
- 数组的元素附着所在的数组对象,存在于堆区
- 语句中(指令数据,字节码数据,方法)是随着类,放置在方法区,无论是静态方法还是普通方法。举个栗子:以字节码为代表的指令数据,在方法被调用时放在栈区;对象被实例化时放在堆区;类被加载时就放入方法区。
- 备注:光看数据的类型,不觉得变量存在于何
JAVA认知从语法角度
大致:1,包的声明(package);2,类的导入(import);3,类的定义(一个Java文件中,最多只能有一个public类,如果只有一个类,要求明和文件名一样)
类的职责:
- 作为静态属性,静态方法的存放位置;
- 作为构造对象的模板(属性,构造方法,方法)
- 作为被继承的模板(属性,构造方法,方法),抽象类和接口是其的特例化
语句中的隐式赋值
- 方法的调用,隐含着 形参 = 实参的赋值
- 方法的发挥,隐含着 返回值 = return的值
- 方法调用后的赋值
java重要关键字,代码块位置出现,分别代表什么作用
- static:静态导入;全部出现在类的内部,方法的外部;与该类的接棒,只和类有关系;静态属性,静态方法,静态代码块,静态内部类
- final:修饰变量;修饰类;修饰方法
- abstract:修饰类;修饰方法
Java是面向对象的编程语言
面向对象:帮助程序员更好划分出类的职责
表现:把现实中的一类事物,抽象成一组相关的数据,以便于数据管理的一组方法
Java是一种面向对象的语言,因此提供了很多语法上的工具,如类,对象,继承,重写,抽象类,接口等等
面向对象的三大特点:封装;继承;多态
- 封装:哪些职责归哪些对象管,尽可能不公开不相关的数据
- 多态:作为服务的使用(以方法的形式提供,不需要知道,方法是具体对象实现的),表现为多种形态。
- 继承:extends和implements。类继承(extends)某个类;接口继承(extends)某个接口;类实现(implements)某些接口。