• 第四课:面向对象(基础) M


    1、面向对象概念

      面向对象是一个比较先进的设计思路,在这之前有一种开发设计,称为面向过程,两者之间的区别为:

        面向过程:专注于解决问题

        面向对象:经过完整的分析、设计之后才可以进行开发

      面向对象的程序开发实际上分为三种:OOA、OOD、OOP

        OOA:面向对象分析

        OOD:面向对象设计

        OOP:面向对象程序

    2、面向对象的三大特征

      封装性:对外部不可见,保护类中的操作不被外部直接访问

      继承性:扩展类的功能。

      多态性:方法的重载,不同的方法名称根据传入的参数类型或个数不同调用的方法也不同。多态是在整个Java中最重要的概念,而且一个好的面向对象设计中肯定要大量的使用多态性

    3、类与对象

      类和对象是面向对象中两个最重要的概念:

        类:表示一个共性的产物,是对某一类实物的描述,是抽象的、概念上的定义。

        对象:就是一个个性的体现,是实际存在的该类实物的每个个体,因而也称为实例(instasnce)。

      实际上,类就相当于是一个对象的操作图纸,按照此图纸生产出来的对象,才可以被用户所使用:

        没有类则肯定没有对象的产生

        没有对象的产生类不能使用

        对象的所有活动范围在类中已经完整的定义出来了

    4、类与对象的定义

      (1)、类要使用class来进行定义,类由属性和方法组成,类的定义格式为:

        class 类名称{

          数据类型 属性 ;  //声明成员变量(属性)

          public 返回值的数据类型 方法名称 ( 参数1, 参数2...) {  //定义方法的内容

            程序语句 ;

            [return表达式 ;]

          }

        };

      属性跟标量一样,数据类型就是使用Java的两种数据类型:基本数据类型、引用数据类型。

      但是,此时在方法的定义上与直接使用主方法调用的时候声明不一致的是,不再出现static关键字。

      (2)、对象的创建及使用的两种方式:

        类名 对象名称 = null ;  //声明对象

        对象名称 = new 类名() ;  //实例化对象

        或者:

        类名 对象名称 = new 类名() ;  //产生实例化对象

      (3)、对象的操作分为两种情况:

        访问属性:对象名称.属性名 = 值 ;

        访问方法:对象名称.方法() ;

      (4)、对象的产生

        对象的产生步骤实际上是分为两步完成的:

          声明对象:类名称 对象名称 = null ;

          实例化对象:对象名称 = new 类名称() ;

        如果对象在使用中只是声明的话,则无法使用,会出现下面的错误必须实例化之后才可以正确使用:

        Exception in thread "main" java.lang.NullPointerException

        出现上面错误的原因:是由于对象未被实例化,所以出现的空指向异常,此异常在开发中会经常出现。

        实际上对于对象的产生,也是与数组一样,需要划分堆栈空间的:

          对象实际上是保存在栈内存中的:Person per = null ;

          实例化之后对象会开辟对应的堆内存空间:per = new Person() ;

            在堆内存中实际上存放的是对象的各个属性,因为对象中只能依靠属性的不同来区分。

            全部的方法保存在全局代码区中,这是一个其他的存储空间,这个方法被所有的对象所共同拥有。

         

    声明几个对象,就会在栈内存中开辟几个空间来保存对象,然后分别实例化对象,也就是说,只要一出现关键字new就表好似要开辟新的内存空间。而且这些对象之间不会互相影响。

    5、对象的引用传递

      在对象的操作中实际上是存在引用传递的,所谓的引用传递,就是将一个堆内存空间的使用权交给了其他的对象,就相当于为一个堆内存空间起了一个别名。

    class Person{
    	String name ;
    	int age ;
    	public void tell(){
    		System.out.println("姓名:" + name + ",年龄:" + age) ;
    	}
    }
    public class SimpleDemo{
    	public static void main(String args[]){
    		Person per1 = null ;	//声明对象per1
    		Person per2 = null ;	//声明对象per2
    		per1 = new Person() ;	//实例化对象per1
    		per2 = per1 ;	     //引用传递
    		per1.name = "张三" ;	//为对象属性赋值
    		per1.age = 30 ;
    		per2.age = 33 ;
    		per1.tell() ;
    		per2.tell() ;
    	}
    }
    

      一个栈内存只能引用一个堆内存空间,但是一个堆内存空间可以被多个栈内存同时指向。在Java中不用的内存空间成为垃圾空间,垃圾空间要等待垃圾收集机制进行空间释放,垃圾收集机制成为GC

    【2011-12-27】

  • 相关阅读:
    信号灯的典型应用
    字符串过滤
    做一些学习的事情一定要坚持下去
    昨天的你造就今天的你,今天的你准备怎么造就明天的你呢?
    vue中计算属性,方法,侦听器
    vue模板语法
    Vue实例的生命周期钩子
    VUE实例
    简单的组件间传值
    前端组件化
  • 原文地址:https://www.cnblogs.com/chuanstone/p/2303827.html
Copyright © 2020-2023  润新知