面向对象编程

时间:2022-12-20 14:49:00

面向对象(OOP)与面向过程

    二者都是一种思想,面向对象时相对于面向过程而言的。面向过程,强调的是功能行为。面向对象,将功能封装进对象,强调具备了功能的对象。

    面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。

面向对象的三大特征

    封装(encapsulation)

    继承(Inheritance)

    多态(polymorphism)

·类(class)和对象(object)是面向对象的核心概念。

    类是对一类事物描述,是抽象的、概念上的定义

    对象时实际存在的该类事物的每个个体,因而也称为实例(instance)

·万事万物皆对象

java类及类的成员

  属性:对应类中的成员变量

  行为:对应类中的成员方法

  field=属性=成员变量,method=(成员方法)=函数

类的成员之一:属性

·语法格式:  

  修饰符 类型 属性名=初值;

  说明:修饰符private:该属性只能由该类的方法访问。

     修饰符public:该属性可以被该类以外的方法访问。

     类型:任何基本类型,如int、boolean或任何类。

关于:变量的分类:成员变量与局部变量

·在方法体外,类体内的声明的变量称为成员变量。

·在方法体内部声明的变量称为局部变量

 

成员变量(属性)和局部变量的区别

 

·成员变量:

  成员变量定义在类中,在整个类中都可以被访问。

  成员变量分为类成员变量和实例成员变量,实例变量存在于对象所在的堆内存中

  成员变量有默认初始化值

  成员变量的权限修饰符可以根据需要,选择任意一个

·局部变量:

  局部变量只定义在局部范围内,如方法内,代码块内等。

  局部变量存在于栈内存中。

  作用的范围结束,变量空间会自动释放。

  局部变量没有默认初始化值,每次必须显示初始化。

  局部变量声明时不指定权限修饰符

类的成员之二:方法

语法格式:

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

      方法体语句;

}

  说明:修饰符:public,private,protected等。

     返回值类型:return语句传递返回值。没有返回值:void

对象的创建和使用

  使用new + 构造器创建一个新的对象;

  使用“对象名.对象成员”的方式访问对象成员(包括属性和方法);

·类的访问机制:

    在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(例外:static方法访问非static,编译不通过)

    在不同类的访问机制:先创建要访问类的对象,再利用对象访问类中定义的成员。

成员变量的初始化:

面向对象编程

 

匿名对象

·使用情况

    如果对一个对象只需要进行一个方法调用,那么就可以使用匿名对象。

    我们经常将匿名对象作为实参传递给一个方法调用

什么是方法(函数)?

  方法是类或对象行为特征的抽象,也称为函数。

  java里的方法不能独立存在,所有的方法必须定义在类里。

修饰符 返回值类型 方法名 (参数类型 形参1,参数类型 形参2,...){

      程序代码

      return 返回值;

}

其中:

形式参数:在方法别调用时用于接收外部传入的数据的变量。

参数类型:就是该形式参数的数据类型

返回值:方法在执行完毕后返还给调用它的程序的数据。

返回值类型:方法要返回的结果的数据类型。

实参:调用方法时实际传给函数形式参数的数据。

·注意:

  没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。

  定义方法时,方法的结果应该返回给调用者,交由调用者处理

  方法中只能滴啊用方法,不可以在方法内部定义方法。

方法的重载(overload)

重载的概念

在同一个类中,允许存在一个以上的同名方法,主要它们的参数个数或者参数类型不同即可。

重载的特点:

与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。

体会可变个数的形参

采用数组形参来定义方法

public static void test(int a,String[] books);

以可变个数形参来定义方法

public static void test(int a,String...books);

 

说明:

1.可变参数:方法参数部分指定类型的参数个数是可变多个

2.声明方式:方法名(参数的类型名...参数名)

3.可变参数方法的使用与方法参数部分使用数组是一致的

4.方法的参数部分游客便形参,需要放在形参声明的最后

 

方法的参数传递

·方法,必须由其所在类或对象调用才有意义。若方法含有参数:

    形参:方法声明时的参数

    实参:方法调用时实际传给形参的参数值

·java的实参值如何传入方法呢

  Java里方法的参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。

信息的封装和隐蔽

Java中通过将数据声明为私有的(private),再提供公有的(public)方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:

  隐藏一个类中不需要对外提供的实现细节

  使用者只能通过实现定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;

  便于修改,增强代码的可维护性;

 

四种访问权限修饰符

Java权限修饰符public、protected、private置于类的成员定义前,用来限定对象对该类成员的访问权限。

面向对象编程

注:对于class的权限修饰只可以用public和default(缺省)

  public类可以在任意地方访问

  default类只可以被同一个包内部的类访问

类的成员之三:构造器(构造方法)

·构造器的特征

  它具有与类相同的名称

  它不声明返回值类型。(与声明为void不同)

  不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值

·构造器的作用:创建对象;给对象进行初始化

·语法格式:  

  修饰符 类名(参数列表){

      初始化语句;

}

·根据参数不同,构造器可以分为如下两类:

  隐式无参构造器(系统默认提供)

  显示定义一个或多个构造器(无参、有参)

·注意:

  java语言中,每个类都至少有一个构造器

  默认构造器的修饰符与所属类的修饰符一致

  一旦显式定义了构造器,则系统不再提供默认构造器

  一个类可以创建多个重载的构造器

  父类的构造器不可被子类继承

·构造器一般用来创建对象的同时初始化对象。

·构造器重载使得对象的创建更加灵活,方便创建各种不同的对象。

·构造器重载,参数列表必须不同

关键字-this

this是什么?

·在java中,this关键字比较难理解,它的作用和其词义很接近。

  它在方法内部使用,即这个方法所属对象的引用;

  它在构造器内部使用,表示构造器正在初始化的对象。

·this表示当前对象,可以调用类的属性、方法和构造器

·什么时候使用this关键字呢?

  当在方法内需要用到调用该方法的对象时,就用this。

注意:

  1.使用this()必须放在构造器的首行!

  2.使用this调用本类中的其他的构造器,保证至少有一个构造器是不用this的。

JavaBean

·JavaBean是一种Java语言写成的可重用组件。

·所谓JavaBean,是指符合如下标准的Java类:

    类是公共的

    有一个无参的公共的构造器

    有属性,且有对应的get、set方法

·用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的赋值和粘贴的功能,而不用关心任何改变。

关键字-package

·package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。

package顶层包名.子包名;

·包对应于文件系统的目录,package语句中,用“.“来指明包(目录)的层次;

·包通常用小写单词,类名首字母通常大写

关键字-import

·为使用定义在不同包中的Java类,需用import语句来引入指定包层次下所需要的类或全部类(.*)。import语句告诉编译器到哪里去寻找类。

·语法格式:

  import 包名[.子包名].<类名|*>

·注意:

  若引入的包为:java.lang,则编译器默认可获取此包下的类,不需要再显示声明。

  import语句出现在package语句之后、类定义之前

  一个源文件中可包含多个import语句

  可以使用import lee.*;语句,表明导入lee包下的所有类。而lee包下sub子包内的类则不会被导入。

  import语句不是必须的,可坚持在类里使用其他类的全名

  JDK1.5加入import static语句

JDK中主要的包介绍

1.java.lang----包含一些Java语言的核心类,如String、Math、Integer、

                              System和Thread,提供常用功能。

2.    java.net----包含执行与网络相关的操作的类和接口。

3.    java.io   ----包含能提供多种输入/输出功能的类。

4.  java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、

                            使用与日期日历相关的函数。

5.     java.text----包含了一些java格式化相关的类

6.     java.sql----包含了java进行JDBC数据库编程的相关类/接口

7.     java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的

                             多个类,这些类被用来构建和管理应用程序的图形用户界  

                             面(GUI)。

8.     java.applet----包含applet运行所需的一些类。