(一)面向对象

1、引用变量与对象的创建过程:
  A Java的内存管理与分配:
    栈是一块Java使用内存区域, 使用的方式:LIFO(后来者居上)
    堆也是一块Java使用内存区域, 使用方式: 无需随机分配
  B 局部变量 与 堆对象空间分配
   Java 局部变量在栈中分配, 是按照变量的类型分配 
   对象在堆中分配, 按照类的属性(实例变量)分配空间
  C 变量类型与分配
   变量分为: 基本类型和引用类型
   基本类型变量的空间大小: 就是基本类型的空间大小, 值是基本类型的值
   引用变量的值是一个对象的地址值, 引用变量通过地址引用了一个堆对象.引用类型变量的占用空间大小和值管理是"透明的(不可看见)",

   由Java系统管理: 变量占用空间以及值的管理, 都是透明的. 


2、Java中的构造器: 声明在类内部, 方法名与类名一致的方法叫构造方法, 构造方法不能声明返回值类型.

3、对象实例化过程:
 new运算: 创建对象实例
  1 根据类的属性在堆中分配对象空间.并且自动初始化实例变量
  2 根据参数类型调用构造器. 
  3 new运算返回对象的引用地址.

4、 this 关键字
  this 是对当前对象的引用, 是运行期间当前对象本身.
 可以使用this明确的访问当前对象的属性或者方法类似于"我".
  this() 是调用本类的其他构造器, 可以使用构造器的重用, 
    简化代码的实现. 
  * this() 必须写在构造器的第一行!
 
 5、 构造方法重载: 参数不一样的构造器
   方法签名 = 方法名+参数类型列表
   方法重载:a 方法名一样 b 方法参数不一样
     也可以说: 方法名一样, 方法签名不同的方法
     
 6、 默认构造器
  1 java 类一定有构造器
  2 如果类没有声明任何构造器,Javac自动提供一个默认构造器, 无参数默认构造器
  3 如果提供构造器声明, Javac将不再提供默认构造器.   


7、对象的方法
 1) 表示对象的功能, 依赖于对象存在.
  方法是动作,是功能,一般用动词声明.  
 2)方法也经常重载, 重载:方法名一样, 参数不一样重载体现了,功能的多态.重载的方法经常互相重用.

方法签名(方法的识别关键字)
   方法签名 = 方法名+参数类型列表
   Java 类中不能存在相同方法签名的方法
   方法重载: 方法名一样, 方法签名不同的方法

java方法参数的传递规则: 基于值的传递, 是变量值的复制, 
  1) 基本类型就是其中值的复制, 
  2) 引用类型是引用值(地址)的复制.

变量的值: a 基本类型的值是其本身, b 引用变量的值是一个地址值,是被引用对象的首地址.

8、 继承 用来表达概念上具体化延续的具体概念.
 1 * 子类继承父类的属性和方法
 2 * 构造器不能继承!
 3 实例化子类,会递归分配所有父类的空间
 4 子类构造器一定调用父类构造器
 
 * 类一定有构造器

 关于继承中的构造器:
 1 * 子类构造器中, 一定调用父类构造器。
 2 子类构造器 默认调用父类无参数构造器!
 3 如果父类没有无参数构造器,就必须在子类中明确指定调用父类的有参数构造器!
 4 使用super()调用父类构造器,必须写在子类构造器第一行
this() 必须写在子类构造器第一行
 5 编程建议:所有的类都提供无参数构造器!减少继承时候的麻烦。


9、 关于对象的实例化过程:
 1 检查类是否加载,如果没有加载就加载这个类,要加载所有父类。
   * 懒惰式加载(按需加载):如果第一次用到就加载,只加载一次。通过CLASSPATH指定的路径寻找类文件(.class),加载以后是一个对象,类型是Class。
 2 在内存堆中分配对象空间。递归分配所有父类和子类属性空间。属性默认自动初始化。自动初始化为“0”值。
 3 进行属性的赋值。
 4 递归调用父类构造器。(默认调用父类无参数构造器!)
 5 调用本类构造器。


10、 访问控制修饰符
 1 public
 2 protected
 3 default 很少使用,很少使用package作为访问控制的边界
 4 private 
 
 * 一般自然现象: 都是尽可能的封装典型.
 
 声明属性和方法尽可能私有。这样才能做到尽可能的封装。
 提供适当的属性访问方法,适当的开放属性的访问。
 
 一个源文件可以有多个类, 但是只能有一个public类, 文件名要与Public类一致. 如果有其他类, 就只能是默认修饰
 
 不建议使用非公有类。就是说所有类都应该是公有的,并且一个源文件一个类。


11、 继承中的语法现象
 1 父类型变量可以引用子类型的实例,父类型的实现是多态的!
 2 子类可以覆盖父类的方法,修改父类的行为。
   * 方法覆盖:子类覆盖了父类“相同方法签名”的方法。
   方法的覆盖是由方法动态绑定实现的,就是Java虚拟机运行时候确定执行那个那个对象那个方法,java最终执行子类的方法。


12、 引用类型转换(是引用变量的类型的转换!)
 1 向下转型(隐式/自动类型转换),是小类型到大类型的转换
   如:
   Circle c = new Circle(1,2,3);
   Shape s = (Shape) c;//表示圆一定是图形
 
 2 向上造型(强制类型转换),是大类型到小类型。
   如:
   Shape s = (Shape) new Circle(1,2,3);
   Cirlcle c = (Circle)s; //当s实际引用圆时候,能够转换成功
   s = new Rectangle(1,1,2,2);
   Circle c2 = (Circle) s;//出现类型转换异常,因为s引用的是Rectangle 不是圆实例。
 3 instanceof 运算符,用来检查引用对象的类型。
   经常与“引用类型强制转换”配合,实现安全的类型转换,避免类型转换异常。


13、面向对象设计的几个基本的原则
A:单一职责
系统中的每一个对象应该只有一个单独的职责,所有对象关注的应该是自身职责的完成。
基本思想:高内聚,低耦合。
B:开闭原则
一个对象对扩展开放,对修改关闭。
基本思想:对类的改动是通过增加代码进行的,而不是修改现有的代码。
C:里氏替换原则
在任意父类出现的地方,都可以使用子类来替代。
D:依赖注入原则
要依赖于抽象,不要依赖于具体的实现。
基本思想:在开发中尽量的面向接口编程。
E:接口分离原则
不要去使用一些不需要使用的功能。
基本思想:一个接口不要提供太多的行为。
F:迪米特原则
一个对象对其他的对象应该尽可能少的了解。
基本思想:降低耦合。
G:优先使用组合而不是继承原则
基本思想:在复用对象的时候,要优先考虑组合,而不是继承。因为父类的任何改变都可能直接音响子类的行为。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值