标题
什么是关联?
在UML图中如何体现?
代码中如何体现?
java中堆是存放什么?
java中栈存放什么?
常量池存放什么?
代码体现?
什么是声明?
什么是定义?
声明和定义的区别是什么?
在代码中如何体现?
实例化属于什么?
构造函数什么时候用?
什么是接口与抽象类它们的区别?
什么是多态?
代码如何体现多态?
什么是针对实现编程?
什么是针对接口编程?
针对接口编程与针对实现编程的区别?
什么是关联?
百度百科:互相贯连
就是我们大家都有关系、事物互相之间发生牵连和影响
在UML图中如何体现?
在UML中可以表示强依赖关系,也可以是普通的关联关系
在UMl图中分为3类
- 关联关系:分为双向关联,单向关联
- 什么时候是关联关系?
当你一个类的的对象包含另一个类的对象,关联就会出现双向或者是单向
- 什么时候是关联关系?
- 聚合关系:整体和部分的关系,A是B的一部分,但是A也可以单独的存在
- 组合关系:他是比聚合更加强的关联关系,A是b的一部分,但是他们有相同的生命周期,一旦有一个死亡,那么另一个也死亡
代码中如何体现?
单向关联:从图可以看书是English类指向了Reading类,引用了Reading的属性或者方法,这个时候English知道Reading属性方法的存在,但是Reading类不知道English的存在,这就是单向关联在代码中的体现
双向关联:跟单向关联对比,双向关联的彼此都知道自己的存在,并且可以调用对象的公共属性和方法
聚合:A聚合于B,但是B可以离开独立存在,所以就是说我的B属性可以在A里出现,A消亡的时候不会影响到我B的出现,为什么会这样呢?是应该我A和B都在外面new了对象,是两个对象,所以他们之间是没有关系,在我A里面只是调用了他的参数而已
组合:强关联关系,在代码中体现就是我在A类里面new了一个B类一个对象,如果我们使用的时候只需要在外面new A类就可以了,他们会把A于B都给我们new出来了,所以B和A的生命周期是绑定在一起的
java中堆是存放什么?
堆是存放new出来的对象,堆解决的是数据存储问题,数据怎么放,放在那里
java中栈存放什么?
存放基本类型的变量数据、对象的引用,但是对象不是存放到栈中的,他是存放在堆中的,栈是运行的单位,处理数据
常量池存放什么?
听到常量肯定是存放字符串常量或者基本类型常量
代码体现?
栈:在代码中存放在栈中的元素 有基本数据类型i的引用指向2,引用有S ,s1
int i= 2
string s = "abx"
string s1 = new String ("a")
```
----------
堆代码体现
鸭子 duck = new 鸭子(1,100)
“`
什么是声明?
声明是向编译器介绍名字-标识符
什么是定义?
建立变量分配存储空间,告诉编译器给他分配空间
声明和定义的区别是什么?
定义创建对象并为这个对象分配了内存,声明没有分配内存。
- 定义于声明的区别
1定义是需要建立空间声明
2声明不需要建立存储空间
A a表示声明,他告诉编译器a是A类的对象变量,但是不进行初始化
如果a= new A() 这就是初始化,分配了空间
- 为什么有声明
声明的目的在于提前使用,在定义之前使用,如果不提前使用则没有必要提前声明
在代码中如何体现?
声明
A a
定义
new出来一个对象,其实这个时候就在堆内分配了空间
实例化属于什么?
你想去超市里面买苹果,你对阿姨说:我要一个苹果,然后阿姨就给了你一个苹果 apple = new apple()
如果你说阿姨我要买苹果,那么就相当于java中没有分配给你空间,存储,阿姨不知道你要多少个苹果,代码中就是Apple apple = null
在这里需要注意的是 T1 a =new T1()他表示的是我们new出了一个T1对象,而不是a对象,我们的a是引用,也就是存储在栈中的引用,而对象是new T1 他存放在堆中,并且a 指向了T1
构造函数什么时候用?
构造函数是在对象建立(只有对象创建才调用)时由jvm调用的,给对象进行初始化的,所以在最开始就调用了,你可以跟js初始化连接起来
当我们需要在程序运行的时候自动new出对象初始化的时候使用,构造函数的根本目的是只要创建了对象就会自动的调用构造函数,不用我们调用,省的我们忘记。
什么是接口与抽象类?它们的区别?
接口就是规范,统一标准的目的,当我们在做一个大项目的时候,我们需要让大家都知道这个是做什么的?但是具体不用知道怎么做?
什么是多态?
多态就是一种事物有多种表现形态:坐公车时,一个男的靠在你的肩膀,你可能不爽,但是如果一个美女靠在你的肩膀你就很乐意,这就是多态的表现。哈哈
代码如何体现多态?
覆盖,子类继承父类,重写。。。。。
什么是针对实现编程?
针对一个对象去实现,也就是在我们这个过程中我们知道是谁执行了我们的方法,并且还是写死的
public interface Animal {
public void makeSound();
}public void hearChickenSound(Chicken chicken) {
chicken.makeSound();
}
什么是针对接口编程?
变量的声明类型后者方法的返回类型是超类型,而不是具体的子类,超类型只是有一个方法明,具体什么都不干,正真做活的是子类,所以这个时候我们只只知道超类,而不知道那个子类去实现了。所以我们无需关心以后执行真正的数据类型是什么样子的,非常的解耦合!
这个时候我们的Animal不是针对的具体某个对象了,
public void hearSound(Animal animal) {
animal.makeSound();
}
如何来了一个new需要叫,那么我们直接调用hearSound就可以了,
hearSound(new Cow())
针对接口编程与针对实现编程的区别?
针对接口编程要比针对实现编程更加方便和解耦合,为我们以后项目开发起到非常好的作用,因为很对接口我们可以变,但是针对实现我们不可以变,针对的是特定的对象,所以我们要针对接口编程,而不是针对实现编程。