一、面向对象简述
       面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向对象的设计思路,才形成C++,而由C++产生了Java这门面向对象的编程语言。

       但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题。面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,所以,面向对象的开发更像是一个具备标准的开发模式。

在面向对象定义之中,也规定了一些基本的特征:

  (1)封装:保护内部的操作不被破坏;

  (2)继承:在原本的基础之上继续进行扩充;

  (3)多态:在一个指定的范围之内进行概念的转换。

对于面向对象的开发来讲也分为三个过程:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)。(Object Oriented 面向对象)

1.类

   1)是同类型东西的概念,是对现实生活中事物的描述,映射到Java中描述就是class定义的类。类是对象的模板、图纸,是对象的数据结构定义。简单说就是“名词”。
   2)其实定义类,就是在描述事物,就是在定义属性(变量)和方法(函数)。
   3)类中可以声明:属性,方法,构造器;属性(变量)分为:实例变量,局部变量;

        实例变量:用于声明对象的结构的,在创建对象 时候分配内存,每个对象有一份!实例变量(对象属性)在堆中分配,并作用于整个类中,实例变量有默认值,不初始化也能参与运算;

        局部变量: 在栈中分配,作用于方法或语句中,必须初始化,有值才能运算。
   4)类与类之间的关系:
     ①关联:一个类作为另一个类的成员变量:需要另一个类来共同完成。class A { pulic B b }    class B {}    

     ②继承:class B extends A {}    class A {}       

     ③依赖:个别方法和另一个类相关。class A {    public void f(B b) {}//参数里有B     public B g() {}//返回值里有B  }  class B {}

 

 

 

 

 

 

 

 

 

5)null与空指针异常:引用类型变量用于存放对象的地址,可以给引用类型赋值为null(如: Person per = null;//声明对象 ),表示不指向任何对象。当某个引用类型变量为null时无法对对象实施访问(因为它没有指向任何对象)。此时,如果通过引用访问成员变量或调用方法,会产生NullPointerException空指针异常。

 

注意事项:除了8中基本类型,其他都是引用类型变量。

 

2.对象

       类定义完成之后,肯定无法直接使用。如果要使用,必须依靠对象,那么由于类属于引用数据类型

        对象是一类事物实实在在存在的个体!利用类做为模板创建的个体实例,本质是数据。

匿名对象:使用方式一:当对象的方法只调用一次时,可用匿名对象来完成,这样比较简化。如果对一个对象进行多个成员调用,则必须给这个对象起个名字。

               使用方式二:可以将匿名对象作为实际参数进行传递。

           

  1. class A {
  2. public void f(B b) {}//参数里有B
  3. }
  4. class B {
  5. }
  6. public void Test() {
  7. A a = new A();
  8. a.f(new B(初始化参数));
  9. }

 

声明对象方式:  

     (1)格式一:声明并实例化对象

               类名称 对象名称 = new 类名称 () ;

    (2)格式二:先声明对象,然后实例化对象:

              类名称 对象名称 = null ;
              对象名称 = new 类名称 () ;

      引用数据类型与基本数据类型最大的不同在于:引用数据类型需要内存的分配和使用。所以,关键字new的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字new来分配内存空间。
     当一个实例化对象产生之后,可以按照如下的方式进行类的操作:

                                   对象.属性:表示调用类之中的属性;

                                   对象.方法():表示调用类之中的方法。

我们从内存的角度分析。首先,给出两种内存空间的概念:
(1)堆内存:保存对象的属性内容。堆内存需要用new关键字来分配空间;
(2)栈内存:保存的是堆内存的地址(在这里为了分析方便,可以简单理解为栈内存保存的是对象的名字)。
 

 

引用传递的精髓:同一块堆内存空间,可以同时被多个栈内存所指向,不同的栈可以修改同一块堆内存的内容。

 看下面示例:

  1. class Person {
  2. String name ;
  3. int age ;
  4. public void tell() {
  5. System.out.println("姓名:" + name + ",年龄:" + age) ;
  6. }
  7. }
  8. public class TestDemo {
  9. public static void main(String args[]) {
  10. Person per1 = new Person() ; // 声明并实例化对象
  11. per1.name = "张三" ;
  12. per1.age = 20 ;
  13. Person per2 = per1 ; // 引用传递 想创建的对象per1 也指向了 per2的堆内存地址
  14. per2.name = "李四" ; // per2 与 per1 指向的地址内容发生改变
  15. per1.tell() ;
  16. }
  17. }

 

  1. class Person {
  2. String name ;
  3. int age ;
  4. public void tell() {
  5. System.out.println("姓名:" + name + ",年龄:" + age) ;
  6. }
  7. }
  8. public class TestDemo {
  9. public static void main(String args[]) {
  10. Person per1 = new Person() ; // 声明并实例化对象
  11. Person per2 = new Person() ;
  12. per1.name = "张三" ;
  13. per1.age = 20 ;
  14. per2.name = "李四" ;
  15. per2.age = 30 ;
  16. per2 = per1 ;// 引用传递 per2也指向了 per1的内存地址
  17. per2.name = "王五" ; //per2 与 per1 指向的地址内容发生改变
  18. per1.tell() ;
  19. }
  20. }

 

 

 

垃圾:指的是在程序开发之中没有任何对象所指向的一块堆内存空间,这块空间就成为垃圾,

 

所有的垃圾将等待GC(垃圾收集器)不定期的进行回收与空间的释放。

 

垃圾回收;收回的是内存空间的地址,不是真的’垃圾’,该地址再次被占用,原数据就会被覆盖

 

posted on 2018-07-13 19:57 楓与楪 阅读() 评论() 编辑 收藏

版权声明:本文为luke-liuqi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/luke-liuqi/p/9307008.html