`

黑马程序员-编程基础02-小知识点

 
阅读更多

 

------- android培训java培训、期待与您交流! ----------

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

外部类访问内部类实例成员(内部类只能有实例成员)时,内部类的成员不管哪种访问级别对于外部类都是可以访问的,需要创建内部类实例

内部类访问内部类成员(实例成员)时,因为内部类实例是建立在外部类实例的基础上的,内部类对内部类的访问都要通过外部类来实现,内部类的成员不管种访问级别对于外部类都是可以访问的,所以类中的内部类与内部类之间可以互相访问而不受权限的控制

内部类(包括局部内部类,不包括静态内部类)中不能有静态成员,因为内部类是建立在外部类的实例上的,只有创建了外部类的实例后,内部类才会被加载,外部类的实例还没创建的时候,内部类中的静态方法能被加载吗?

静态内部类不不能直接访问外部类的实例成员,因为静态内部类的加载不依赖外部类的实例,当外部类加载完毕时,静态内部类也被加载了,在静态内部类中没有对外部类实例的引用,所以要访问外部类的实例成员时,需要使用外部类实例来引用,基于静态内部类随外部类一起加载的原理,静态内部类是可以直接访问外部类静态成员的,也可以定义静态成员

总结:内部类是在外部类创建实例后被加载的,静态内部类是随着外部类一起被加载的

 

------- android培训java培训、期待与您交流! ----------   
详细请查看:http://edu.csdn.net/heima/ 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics