6 面向对象之类和对象

1 面向对象和面向过程的区别

  两者都是软件开发思想,先有面向过程,后有面向对象。在大型项目中,针对面向过程的不足推出了面向对象开发思想。

区别:

  1)编程思路不同: 面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完成功能。

  2)封装性:都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能。

  3)面向对象具有继承性和多态性,而面向过程没有继承性和多态性,所以面向对象优势是明显。

2 类和对象

  对象:客观存在的实体(一个具体的事物)。

  类:具有相同特征和共同行为对象的集合。是人类脑海中一个抽象的概念,代表的是一种"共性".

  类中的成员:1.成员属性(描述外部特征) 2.成员方法(描述功能行为)

3 定义和访问类

  1)定义一个类:

    [修饰符] class 类名{

     //1.属性的定义:与定义变量类似

      [修饰符] 数据类型 属性名;

    //2.方法的定义

    [修饰符] 返回值类型 方法名(形参列表){

     //方法体;

      }

     }

2)访问类中成员

  a.访问属性:

    创建对象(创建实例):类名 对象名 = new 类名();

        赋值: 对象名.属性=值;

    属性(成员变量):作用域范围是在整个类体.

  b.调用方法

    静态方法(使用static修饰的方法):类名.方法名()

   普通方法(非static修饰的方法):对象名.方法名();

4 变量的作用域

  变量声明的位置不同会导致其作用域不同。

  局部变量:在方法内部声明的变量,其作用域仅限于当前方法使用。

  成员变量:在类中声明的属性,其作用域可以在当前类中使用。

区别:

  1.作用域不同:成员变量的作用域是在整个类体,局部变量的作用域在当前方法

  2.是否有默认初始值:成员变量是有默认的初始值,局部变量没有默认初始值。

     eg:int类型默认初始值为0  double类型默认初始值为0.0  boolean类型默认为false String默认为null

   3.是否能使用修饰符(public/private/protected/默认):成员变量:可以添加public等修饰符,局部变量不能。

  4.在内存中保存的位置不同:成员变量保存到堆中,局部变量保存到栈。

5构造方法

  构造方法(构造器):是一种特殊的方法,主要用于为成员变量初始化(为成员变量赋初始值)。

特征:

  1.方法名必须与类名相同。

  2.没有返回值类型。void也是一种返回值类型。

  构造的作用:为成员变量赋初始化值。

  语法: [修饰符] 类名([形参列表]){

      }

  构造方法使用new关键字进行调用。

  如果没有显式定义构造方法,虚拟机会自动添加无参构造,但是一旦显式定义了构造方法,虚拟机在编译时将不同添加无参构造(默认无参构造失效),如果需要调用无参构造就必须自己定义。

  构造方法是可以重载(方法名相同,参数列表不同)。

6 this关键字

  this关键字:代表当前对象本身

   1)用于区分成员变量和局部变量。

   2)可以使用this访问当前对象的成员变量和成员方法(可以使用this调用属性和方法)  this.方法名()或this.属性

   3)可以使用this调用构造方法,必须作为构造方法的第一行语句。

  public Dog(String name,String bland,int age){

    this.name=name;

    this.bland=bland;

    this.age=age;

  }

  public void test(){

  }

  this.name ;访问属性

  this.test(); 调用方法

7 值传递和引用传递

  数据类型可以分为基本数据类型和引用数据类型

  如果将基本类型作为方法参数属于值传递:方法执行结束后不会保留执行结果。

  如果将引用数据类型作为方法参数,属于引用传递,方法执行结束后会保留执行结果。

8 内存结构

  1)栈

   在方法中声明的局部变量保存在栈中,方法执行结束后栈中数据会被回收

  2)堆

   堆中保存的是对象的信息,使用new关键字创建的对象信息。堆中信息会被java的垃圾回收器回收。

  3)方法区

   保存的是类的信息(代码)、静态(static)变量、字符串常量等。

9 static关键字

  1)static修饰的变量为静态变量,类变量

    访问方式:  类名.变量名(推荐)    对象名.变量名

   ①成员变量和全局变量的区别:

     a.在计算机内存中保存的位置不同:

      成员变量保存在堆中,全局变量保存在方法区

     b.保存的份数不同

      成员变量每new一次都开辟空间,保存多份。

     全局变量只有1份

     c.访问方式不同

      成员变量: 对象名.属性,可以使用this关键字。

      全局变量: 类名.属性(推荐) 对象名.属性

     d.创建时间不同:

     成员变量:只有使用new关键字创建对象时才会在堆中为其分配空间

        全局变量:在类加载时在方法区中分配空间。

  2)使用static关键字可以修饰方法:静态方法或类方法

   特点:静态方法中无法访问非静态的成员变量或方法;但非静态的方法中是可以访问静态的成员

    访问方式: 类名.方法名(推荐) 对象名.方法名

  3)使用static修饰代码块,静态代码块

   语法:static{

        //代码

     }

   执行过程:在类加载时执行静态代码块。静态代码块>普通代码块>构造方法。只会执行1次。

 代码块:使用花括号包含的代码。使用比较少。不需要显式调用。

 代码块的执行顺序:在创建实例时执行。代码块在构造方法之前执行,并且按照顺序执行,每创建一个对象就会执行1次。执行多次。

  类中代码的执行顺序: 静态代码块>代码块>构造方法>静态方法或实例方法。

  静态的方法中只能访问静态变量, 非静态的方法可以访问静态或非静态的变量

10 package和import关键字

  1)package关键字主要用于声明包。

   java中的包:类似文件夹

  作用:1.分门别类进行存放数据,方便分类和管理。2.避免命名冲突。

  包的命名规范:所有字母都是小写,多级包名之间利用.进行分割

  java中常见的包: java.lang包之外的其他包下的类,使用时需要导包。

   * java.lang包:java核心类库,String,System,Math... 该包下的类可以直接使用,无需导包。

   * java.util包:工具类。 Arrays,Scanner...

  * java.io包:i(input)/o(output)和java中流的输入和输出相关的类库。

   * java.net包:网络编程相关的类库。

   * java.sql包:与数据库操作相关的类库。

   * java.text包:国际化或格式化输出相关的类库。

   * java.awt包/javax.swing包:图形化界面相关的类库

   * 声明包:使用package关键字,必须放在该类的第一行。

  * 语法: package 包名;  eg:cn.zzsxt.oop7;

  2)导入包: import关键字,在使用非当前包下的其他包下的类时需要导包

    方式一: import 包名.*;将整个包导入。 eg: import cn.zzsxt.oop6.*;

   方式二(推荐): import 包名.类名; eg:import cn.zzsxt.oop6.TestStatic;

  *直接使用全类名进行访问: 包名.类名;

      cn.zzsxt.oop6.TestStatic testStatic = new cn.zzsxt.oop6.TestStatic();

  *特殊场景:不同的包下存在相同的类名。

      import java.util.*;

      import java.sql.*;

   java.util.Date date = new java.util.Date();

  3)静态导入

    package cn.zzsxt.oop7;

    import static java.lang.Math.*;

    import static java.lang.Math.PI;

    import static java.lang.Math.random;

  静态导入:JDK1.5之后的新增特性。

   语法: import static 包名.类名;

  作用:如果使用静态导入某个类或类中属性和方法,可以直接使用该类中的静态属性或静态方法。

    System.out.println(Math.PI);

    double rand = Math.random();

    System.out.println(rand);

     System.out.println(PI);//使用java.lang.Math类中的静态属性

    System.out.println(random());//使用java.lang.Math中的静态方法

}

时间: 2024-12-16 12:06:24

6 面向对象之类和对象的相关文章

面向对象与基于对象的区别

面向对象和基于对象的区别是多态,和继承无关. 基于对象仅仅支持了抽象数据类型的功能,继承也不过体现了一种is-a的关系,也是抽象数据类型,只是建立了一个层次体系.但是什么是面向对象呢?就是根 据对象的实际类型不同,可以自动完成不同的行为,而仅仅通过一致的调用形式.换句话说,也就是虚函数实现的多态.以上观点,在OO设计中已经得到了公认, 多态的另一种实现方法是泛型. “面向对象”和“基于对象”两个不同的概念.面向对象的三大特点(封装,继承,多态)却一不可,通常“基于对象”使用对象,但是无法利用现有

php面向对象之克隆对象

在前面的PHP面向对象之对象和引用,我们试图以"$b=$a"的方式复制对象以传递对象的值(内容),结果却是传递对象的地址,在结尾为了解决复制对象这个问题,提到了克隆的方法.接下来讲一下php面向对象之克隆对象. 前面我们已经知道,使用传址引用的方式调用对象,实质调用的是同一个对象,有时需要建设立一个对象的副本,改变原来的对象时不希望影响到副本,在PHP中可以根据现在的对象来克隆出一个完全一样的对象,克隆出来的副本和原本两个对象完全独立而互不干扰. 对象克隆 在php中使用"c

java基础面向对象之类与对象

java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 ?封装性:保护内部结构的安全性 ?继承性:在已有的程序结构上扩充新的功能 ?多态性:在某一个该娘范围内满足 2)面向对象开发分为以下几个步骤: OOA(面向对象分析) OOD(面向对象设计) OOP(面向对象编程) 2.类与对象 1)了解类与对象的关系 ?认识类与对象 类与对象是整个面向对象之中最基础的组成单元,类是共性的一个集合,而对象是某一

关于面向对象和基于对象

面向对象和基于对象的区别是多态,和继承无关. 基于对象仅仅支持了抽象数据类型的功能,继承也不过体现了一种is-a的关系,也是抽象数据类型,只是建立了一个层次体系.但是什么是面向对象呢?就是根据对象的实际类型不同,可以自动完成不同的行为,而仅仅通过一致的调用形式.换句话说,也就是虚函数实现的多态.以上观点,在OO设计中已经得到了公认,多态的另一种实现方法是泛型. “面向对象”和“基于对象”两个不同的概念.面向对象的三大特点(封装,继承,多态)却一不可,通常“基于对象”使用对象,但是无法利用现有的对

sdut 上机练习8面向对象编程(对象的数组)

上机练习8面向对象编程(对象的数组) Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 利用类对象数组完毕N个学生数据(学号是字符串类型.成绩是整型)的输入.输出. 输入 输入有N+1行: 第一行的整数N表示学生数目: 下面N行是N个学生的数据,每行中第一个是表示学号的字符串,第二个是表示学生成绩的整数. 输出 输出N个学生数据. 每一个学生的数据占一行. 演示样例输入 5 01 89 02 78 03 56 04 92 05 76 演示样例输出 01

Java面向对象-类与对象

Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建和使用 看下面实例 我们在com.java1234.chap03.sec01包下新建一个Person类 1 package com.java1234.chap03.sec01; 2 3 /** 4 * Person类 文件名和类名必须一致 5 * @author user 6 * 7 */ 8 pu

面向对象编程-何为对象

转自知乎 面向对象,那么对象就是主导因素.因此我们首先实现的不是函数,而是"类",也即对象.. 面向对象:对象就是物体,这种编程思想就是设定一个有一定功能的物体,然后利用这个物体的功能做你想做的事情.(这个物体有attributes,比如名字啊,年龄啊等等等等,有methods,比如吃喝拉撒睡等等等等,功能==methods)面向过程:你想干嘛,就直接写个功能,然后做你想做的事情. 借楼上的例子,你想写个程序洗衣服,面向对象就是设定一个人,把这个对象赋予拿衣服,搭车,交易,取衣服,回家

C#编程语言与面向对象——类与对象

由于ASP.NET技术是全面向对象的,因此,要掌握这一技术,必须具备有扎实的面向对象理论基础 使用C#编程,所有的程序代码几乎都放在类中,不存在独立于类中之外的函数,因此,类是面向对象编程的基本单元 在绝大多数面向对象语言中,一个类都可以包含两种成员:字段和方法.字段与方法这两个概念是面向对象理论的术语,是通用与各种面向对象语言的.而在各种的具体面向对象语言(比如C#)中,可以简单地理解: 字段及变量,方法及函数. C#编程语言与面向对象--类与对象

面向对象——类与对象篇(第一章)

一.什么是面向对象? 想要学习面向对象,就要先知道面向过程. 面向过程 面向过程:面向过程的程序的核心是过程(流水线思维),就是关心解决问题的步骤. 面向过程 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源,比如单片机.嵌入式开发.Linux/Unix等一般采用面向过 程开发,性能是最重要的因素. 缺点:没有面向对象易维护.易复用.易扩展 适用场景: 一旦完成很少改变的场景(著名的Linux内核.git.以及Apache HTTP Server等) 面向对象 面向对象: