文章目录
绑定
源类:基类、超类、父类
源类的副本:子类、继承类、导出类
纯粹替代、替代原则:一个导出类对象能完全替代一个基类对象。
函数绑定:方法调用同该方法的主体(地址)关联。
前期绑定:程序执行前,编译器与链接器程序实现函数绑定 ——java中除了private、final方法是前期绑定,其他都是后期绑定。
后期绑定(多态) :程序执行时,根据对象的类型进行函数的绑定。
java注意:
- 只有static、final、private(自动认为final) 是前期绑定
- 动态(后期)绑定是默认的,实现多态。 C++需关键词“ virtual "
存储数据的地方
- 寄存器: 最快的存储区,cpu内部。
- 堆栈: 用指针(上移,释放、下移,分配内存)java必须知道栈内各内存的生命周期,故放java引用(对象内存位置)、基本类型的值。
- 堆: 无需知道内存生命周期,但分配、清理需要时间。故放java对象。
- 常量存储: 存放在程序代码内部。 可选择ROM
- 非RAM存储: 不受程序控制 例: “流对象”,“持久化对象(对象放在磁盘上)
基本数据类型:①类的字段(如为初始化,系统默认为0)②“局部基本变量”(系统随机赋值并且定为编译错误)
编译、解释: javac、java
无法加载主类:
- 系统默认的class路径 从环境变量classpath查询的
- 类的路径是包名+类名 包名会转化成路径(记得前面路径别重复)
java命令时 可设置classpath指定class位置、sourcepath指定java位置。
eclipse引入package:
- 在“新建的项目a”下“新建文件夹lib”
- 复制package压缩包,lib文件夹右键“粘贴”
- 项目a右键 → 构建路径 → 配置路径 → 库、添加jar → 添加lib文件夹下的package.rar文件 → 应用并关闭。
eclipse按F3查看鼠标指定的源码。方法
- 需在环境变量classpath添加jdk下的src.zip源文件目录
布尔类型boolean:只能赋值为(true、false)两值,其他都是非法的。
java的基本知识与访问控制权限
数的处理速度: 处理器对 除法与求余数 是最慢操作
java源代码文件 : 编译单元 、转译单元 一个文件只能有一个 public类 ,该编译单元的其他类只为 public类 服务使用
java包的命名: 全部使用小写字母
源文件名必须跟文件内的public类名一样、如果源文件无public类,则可以随意命文件名。
环境变量(classpath): 引用jar包类时必须写清楚路径( 路径+文件名),因为import时会接着jar的路径查找
编译后的源文件: 一个源文件如果有内部类、匿名类等。会用$连接内部类、用数字表示匿名类
java的函数包在 jdk/jre/lib/rt.jar 里面
- 即使类被修饰了public,如果类内的方法无修饰(包访问权限),那么不在包内的类使用该public类的包访问权限方法是不被允许的。类只有public 与包访问权限两种
- 处于同一目录、没有设定包名称 系统会默认设置这些文件为该目录为其默认包
字节码指令
bipush: 把数字压入操作数堆栈
iconst: 将常量数值【0 -5】压入堆栈
iload: 把变量的值压入操作数堆栈
aload: 把对象引用所映射的值压入操作数堆栈
dup: 操作数堆栈弹出一个值,复制,并压入堆栈(压入两次)
ldc: 将字符串压入堆栈
istore: 操作数 堆栈 弹出一个数值并赋值给变量
astore: 将 对象引用(地址)赋值给变量
if_icmplt: 弹出堆栈顶部两个int,进行比较,小于则继续循环,大于跳出循环(字节码顺序执行)
反之if_icmpgt- ( if_ int compare them great than )
特殊java关键字修饰符
-
native(本地): 调用本地其他程序语言编写的函数
-
assert(断言): 类似断点、调试程序
-
表示形式:assert (布尔值): 字符串信息 → false:抛出error、true:跳过断言无任何事情
-
切记不要把断言当作业务代码来使用
-
默认 JVM 关闭断言功能,需手动打开断言
- 命令行模式下打开断言: java class文件时增加参数:-enableassertions / -ea
- 命令行模式下关闭断言: 增加参数:-disableassertions / -da
- Eclipse: 源文件右键运行方式 -> 运行配置 -> 自变量 -> VM 自变量:敲入-ea
-
public static void main(String[] args) {
boolean a = false;
assert a: "断言了因为a是false" // 抛出AssertionError异常
}