JavaDoc:
生成DOC文档的命令:javadoc -d 要存放到的目录 -author -version 源文件名.java
内存:
Java程序在运行时,需要为虚拟机分配一定的内存空间。为了提高运算效率,又对该内存空间进行了不同区域的划分,
每一片区域都有特定的数据处理方式和内存管理方式。
1.栈内存:用于存储局部变量,当数据用完后,所占空间会自动释放,并且是先进后出
2.堆内存:用于存储对象(数组也是对象),通过new创建的实例都存放在这里,它们都有一个内存地址,并且实体中的字段都有默认的
初始化值。如果实体不再被引用的时候,当垃圾回收器工作时会将其回收
3.方法区(共享区、数据区):存放类中的静态方法、成员方法、静态类变量
4.本地方法区:
5.寄存器:
面向对象:
面向过程:强调的是功能行为
面向对象:将功能封装进对象,强调的是具备了功能的对象。是复杂的过程简单化,从以前的执行者编程了现在的指挥者。
面向对象的三大特征:封装,继承,多态。
类:对现实生活中事物的描述,用于描述一类事物的共性。
对象:一类事物实实在在存在的实体。
接口:对一类事物的共同行为的抽象定义。使用接口降低了耦合性,提高了扩展性。
抽象类:
当多个类中出现功能相同,主体不同的时候,可以向上抽取功能定义,而不抽取主体定义。
* 抽象方法一定是定义在抽象类中的,因为类中只要存在抽象方法,则这个类也必须为抽象类
* 抽象方法和抽象类必须用abstract关键字修饰
* 抽象类不可以被实例化,因为调用抽象方法没意义
* 抽象类中的抽象方法想要被使用,必须由子类实现其所有抽象方法,再创建子类实例去调用
* 如果抽象类的子类只实现了部分抽象方法,则这个子类也必须是抽象类
构造代码块、构造函数、静态代码块:
构造代码块:在构造器之前执行,为所有对象初始化
构造函数:为对应的对象进行初始化
静态代码块:随着类的加载而执行,为类初始化,值执行一次
this、static:
this:就是对调用当前方法的对象的引用
static修饰的成员,随着类的加载而加载(存在于方法区中),随着类的消失而消失,它的生命周期最长,优先于对象的存在,被所有对象共享,可以使用类名调用。
对象的创建过程:
1.加载对应的Class文件
2.静态代码块执行,为类初始化
3.在堆内存中开辟空间,分配内存地址
4.在堆内存中建立对象的特有属性,并默认初始化
5.对属性显示初始化
6.构造代码块初始化
7.对应的构造器初始化
8.将内存地址赋给栈内存中的引用变量
封装:
隐藏对象的属性和实现细节,只对外提供公共访问方式。这样就将变化隔离了起来,使用更为方便,提高了可重用性和安全性。
继承:
提高了代码的复用性,让类与类之间产生了关系,有了这个关系,才有了多态的特性。必须是类与类之间有所属关系(is a)才可以承。
Java只支持单继承,不支持多继承,因为多继承容易带来安全隐患,当多个父类中定义了相同的功能但内容不同时,子类对象不确定要运行哪一个,但是Java保留的这种机制,并用另外一种形式来体现,即多实现。
Java支持多层继承。
多态:
某一类事物的多种存在形态,例如猫和狗也是动物中的一种。在程序中表现为用父类类型的引用变量指向子类类型的对象。
多态大大的提高了代码的扩展性和可重用性,降低了耦合性
多态中成员函数的特点(非静态):------>动态绑定 编译:参阅引用变量所属类是否有调用的方法,有则通过,没有则失败 执行:参阅对象所属类是否有调用的方法,有则调用对象类的方法,没有则调用引用变量所属类的方法 多态中成员变量及静态成员函数:-------->静态绑定 编译和执行的时候都是参阅引用变量所属类,即均参阅左边的类。 其中静态成员函数,不依附于对象存在,所以引用是哪个类就执行哪个类的方法。 |
继承:is a,谁是谁的一种
聚集、聚合:has a,谁里面有谁
组合:部分和主体不可分割
覆盖(Override):
当子类继承了父类的时候,沿袭了父类的功能,但是能功能的内容不一样,这时就可以采用覆盖的方式来解决,保留从父类继承的功能,重写功能的内容
静态只能覆盖静态
final关键字:
final可以修饰类、方法、变量
final修饰的类不可以被继承
final修饰的方法不可以被覆盖
final修饰的变量为常量,只能被赋值一次
局部内部类只能访问被final修饰的局部变量
模版方法设计模式:
在定义功能时,功能的一部分是确定的,但也有一部分是不确定的,而确定的部分在使用不确定的部分,这时就可以把不确定的部分单独分装为一个抽象方法,具体功能由子类去实现
这种设计模式既提高了扩展性,也提高了复用性
内部类方位外部类成员(包括实例成员和静态成员)时,可以直接访问,因为内部类持有外部类实例的引用,格式为 外部类名.this
外部类访问内部类实例成员(内部类只能有实例成员)时,内部类的成员不管哪种访问级别对于外部类都是可以访问的,需要创建内部类实例
内部类访问内部类成员(实例成员)时,因为内部类实例是建立在外部类实例的基础上的,内部类对内部类的访问都要通过外部类来实现,内部类的成员不管哪种访问级别对于外部类都是可以访问的,所以类中的内部类与内部类之间可以互相访问而不受权限的控制
内部类(包括局部内部类,不包括静态内部类)中不能有静态成员,因为内部类是建立在外部类的实例上的,只有创建了外部类的实例后,内部类才会被加载,外部类的实例还没创建的时候,内部类中的静态方法能被加载吗?
静态内部类不不能直接访问外部类的实例成员,因为静态内部类的加载不依赖外部类的实例,当外部类加载完毕时,静态内部类也被加载了,在静态内部类中没有对外部类实例的引用,所以要访问外部类的实例成员时,需要使用外部类实例来引用,基于静态内部类随外部类一起加载的原理,静态内部类是可以直接访问外部类静态成员的,也可以定义静态成员
总结:内部类是在外部类创建实例后被加载的,静态内部类是随着外部类一起被加载的