zoukankan      html  css  js  c++  java
  • JavaSE基础之面向对象

    一、面向对象简述
           面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由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.对象

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

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

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

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

               

       class A {    
             public void f(B b) {}//参数里有B     
              } 
    
       class B {
            
           
            }
    
         public void Test() { 
                 A a = new A();   
                 a.f(new B(初始化参数)); 
          }

     

    声明对象方式:  

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

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

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

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


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

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

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

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

    3.引用传递

     

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

     看下面示例:

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

     

    class Person {
             String name ;
             int age ;
             public void tell() {
                       System.out.println("姓名:" + name + ",年龄:" + age) ;
             }
    }
    public class TestDemo {
             public static void main(String args[]) {
                       Person per1 = new Person() ;         // 声明并实例化对象
                       Person per2 = new Person() ;
                       per1.name = "张三" ;
                       per1.age = 20 ;
                       per2.name = "李四" ;
                       per2.age = 30 ;
                       per2 = per1 ;// 引用传递  per2也指向了 per1的内存地址
                       per2.name = "王五" ; //per2 与 per1 指向的地址内容发生改变
                       per1.tell() ;
             }
    }

     

     4.垃圾

     

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

     

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

     

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

     

  • 相关阅读:
    Python基础之面向对象3(继承)
    Python基础之面向对象2(封装)
    python基础之面向对象1
    Python基础之变量作用域
    Python基础之函数参数
    Python基础之函数
    Python基础 之for循环嵌套实例
    Python基础之集合
    Python基础之元组和字典
    Python基础之列表深浅复制和列表推导式
  • 原文地址:https://www.cnblogs.com/luke-liuqi/p/9307008.html
Copyright © 2011-2022 走看看