计算机体系
计算机的组成
CPU的工作原理
从哪里读
1、按顺序度,一条一条读取 ——> 顺序执行语句
2、按照指定地址,读取 ——> 分支执行语句、循环执行语句
程序 = 语句 + 数据(粗略)
Java中的语句
Java中,能出现语句的位置有哪些
1、方法的内部(不区分哪种方法,除了抽象方法)
2、类的内部,作为属性定义时,赋值语句也可以出现
class A {
int a = hello();
}
定义属性 a 时,执行 hello 方法(语句)
3、各种各样的代码块
构造代码块、静态代码块
4、出现在构造方法中
注:像 import java.util.Scanner 的这种导入包的操作不是语句
语句何时被执行
方法中的语句,一定是被调用时,才会执行
1、静态方法,光有类,就可以开始调用了
2、普通方法,必须先通过类实例化出对象,才能通过对象去调用
3、唯一的特殊方法时 main 方法,是被JVM调用的,我们看不到调用位置
语句的执行触发大体有三种
1、某个类被加载时,会触发一批语句的执行
2、某个类实例化对象时,会触发一批对象的执行
3、某个类的方法被调用时,会触发一批语句的执行
类的加载、对象的实例化、方法的调用
什么时候进行类的加载
类被用到并且类还没有被加载过
注:类的加载往往只执行一次
什么情况下类被用到
1、用到了类中的静态属性或者类里的静态方法时
2、要用该类实例化对象时
3、用到子类,会触发用到父类(包含接口)
类加载时语句的执行顺序
静态属性定义时的赋值语句、静态代码块中的语句。执行顺序按照书写顺序依次执行
父类的所有语句执行完,才能执行子类的语句
对象实例化
对象的实例化可能会触发类的加载,当类已经加载过后,对象的实例化就不会触发类的加载
类的加载完成后,可能紧跟着对象的实例化
和对象实例化有关的语句
1、属性定义时的赋值语句
2、构造代码块中的语句
3、构造方法中的语句
执行顺序:
属性定义和构造带吗,按照书写顺序执行,之后才执行构造方法中的语句
子类实例化时,必须要求父类的所有实例化相关语句全部完成后,才开始执行子类的
Java中的数据
直接接触到的数据
1、基本类型
byte、short、int、long
char
float、double
boolean
2、引用类型
class 类型
接口类型
数组类型
3、字面量
内存中的数据被抽象成Java语句中的哪些概念
1、变量
2、数组中的元素
3、对象
数据在内存中的位置
JVM中,针对一个Java进程,分为栈区、堆区、方法区
对象在堆区上
引用的区域不确定,需要有其他条件来明确
类存在于方法区
局部变量:存在于该方法执行时,创建的栈帧中,总的里说是栈区
对象的属性:存在于属性附着的对象上,总的来说是堆区
类的静态属性:存在于静态属性附着的类上,总的来说是方法区
数组的元素存在于元素附着的数组对象上,所以存在于堆区
方法的某次执行时需要的数据,以栈帧的形式,放置在栈区
变量的存储
1、基本类型
byte、short、int、long 1、2、4、8字节,按照指定规则,把数字保存起来
float、double 4、8字节,以浮点数保存(有精度损失)
char 2字节,以UTF-16方式保存,保存的Unicode编码
boolean 无固定
2、引用类型是什么
引用类型不像基本类型,保存的数据是无法直接使用的,而是间接使用的
引用类型可以存对象地址,但不要求必须存对象的地址
引用中存的是找到对象的 “ 线索 ” ,逻辑上,引用是指向对象的
数据有哪些
程序员可以直接接触到的:变量、字面量、数组元素
程序员无法直接接触到的,但是使用非常频繁的
1、对象(属性)
2、类(静态属性、类相关的方法、父类信息)
Java中的语法
Java代码,是以类为基本单元进行组织的
包的声明:package ... ;
类的导入:import ...;
类的定义:一个Java文件中最多只能有一个public类,类名和文件名相同
类的职责
1、作为静态属性、静态方法的存在位置
2、作为构造对象的模板(属性、构造方法、方法)
3、作为被继承的模板(属性、构造方法、方法)
4、抽象类和接口是其的特殊化
赋值语句
赋值语句等号的左边是一个内存空间(变量、数组元素),等号的右边只要是个值就行
1、显式赋值
a = ...;
a[0] = ...;
2、隐式赋值
方法的调用,隐含着,形参 = 实参的赋值 add(1,2) add(int a,int b){...}
a = 1;b = 2;
方法的返回,隐含着,返回值 = return 的值
int add(...){... return 1;} 隐含着int returnValue = 1;
方法调用后赋值, int c = add(1,2); c = ...;
3、赋值的基本要求
等号两边的类型完全一致或者等号两边的类型,具备转换的可能性
1)可以直接转换的
int -> long、float -> double、long -> double 逻辑上小范围赋值给大范围
String -> Object、int[] -> Object
2)不能直接转换,但是可以强制转换的
逻辑上大范围赋值给小范围
float -> int、double -> float、Object -> String、Object -> int[]
几个重要关键字的作用
static
1、静态导入
2、全部出现在类的内部,方法的外部;与该类的对象解绑,只和类有关系
静态属性、静态方法、静态代码块、静态内部类
final
1、修饰变量
变量的值只能赋值一次,之后不可改变
2、修饰类
变为最终类,只可实例化对象,不能被继承
3、修饰方法
abstract
1、修饰类
变为抽象类,只可被继承,不能实例化对象
2、修饰方法
this
在构造方法中调用自己的其他构造方法;访问自己的属性、方法
super
在构造方法中,调用父类的构造方法;方法 “ 父类 ” 的属性、方法
面向对象编程
为了程序员考虑的一种编程思想,帮助我们更好的划分出类的职责
表现为,把现实世界中的一类事物抽象成一组相关的数据,以及数据管理的一组方法
面向对象的三大特征
1、封装
哪些职责归哪些对象管,尽可能不公开相关数据(工具:访问限定符、方法)
2、多态
作为服务的使用(以方法的形式提供,不需要知道,方法是具体对象实现的),表现为多种形态
3、继承
类继承(extends)某个类 单继承
接口继承(extends)某些接口 多继承
类实现(implements)某些接口 多实现
方法的重写
粗略的要求:返回值类型、方法名称、方法的形参完全一致