面向对象

面向对象的理解

Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。

两种编程思想

  • OOP:面向对象
  • POP:面向过程

三个术语

  • OOA:面向对象分析;

  • OOD:面向对象设计;

  • OOP:面向对象编程;

实现一个软件的过程:分析A–>设计D–>编程P

面向对象特征

  • 封装(encapsulation)

  • 继承(inheritance)

  • 多态(polymorphism)

类与对象

  • 是一组相关属性和行为的抽象集合,是一个模板;
  • 构建java的最小单位就是类(class)与接口(interface);
  • 属性(成员变量):事物的状态信息;行为(成员方法):事物的行为,能做什么;

类的定义

  • 步骤:定义类名->定义属性->定义方法
public class 类名{
    //定义属性(成员变量)
    //定义方法(成员方法)
}

类中的无参成员方法

  • 格式:
修饰符  返回值类型 方法名(){
	//局部变量
	//方法体
    return ;
}

类中的有参成员方法

  • 格式:
修饰符 返回值类型 方法名(参数列表){
		//方法体;
		//return 返回值;
}
可变长度的参数
  • 可变长参数是一种参数集合,在集合中参数的数量的不确定的,可能为一个或者多个,也可能没有参数;在这个参数集合中的每个参数类型是不确定的,我们将这个参数集合称之为可变的长参数;

  • 格式:

    修饰符 返回值 方法名(参数类型...参数名){
    	//方法体
    }
    public static void show(String...strings) {
        for (int i = 0; i < strings.length; i++) {
        	System.out.println(strings[i]);
        }
    }
    show("AAA","BBB","CCC");//调用时可以不定数量传入
    
    • 返回值根据传入的数据类型返回这个类型的数组;

有参与无参方法的注意

  1. 修饰符:public、protected、(default)、private;
  2. 返回值类型:如果方法执行完毕,不需要返回值就是void,为void的方法只能单独使用,不能用来打印或者赋值使用;如果需要返回一个值,那么就要写返回该值的类型,并且一定要return一个值;
  3. 参数列表:参数可以是基本数据类型、也可以是引用数据类型,可以是多个参数;
  4. 局部变量:方法中定义的变量;
  5. 方法体:方法所要执行的代码;
  6. return:返回值为void时,return不能返回值,只能单独使用,结束执行;返回值不为void时,return返回的值必须与要返回的值类型保持一致;
  7. 方法的定义不能嵌套,只能定义再类中;
  8. 方法的定义没有先后顺序;
  9. 一个方法里面可以有多个return语句,但是必须保证程序执行完毕后,只有一个会执行;

成员变量与局部变量区别

  1. 位置不同:成员变量在类中,局部变量在方法中;
  2. 作用域不同:成员变量在类中,局部变量在方法中;
  3. 初始化不同:成员变量有默认值,局部变量没有默认值,必须要赋值才能使用;
  4. 在内存中的位置不同:成员变量在堆内存中,局部变量在栈内存中;
  5. 生命周期不同:成员变量随着对象的创建而存在,随着对象消失而消失,局部变量随着方法调用而存在,随着方法的调用完成而消失;

对象

  • 是一类事物的具体体现;
  • 对象就是根据类作为模板创建的具体实例;

创建对象

类名 对象名 = new 类名();
访问类中的成员:对象名.成员变量;
    		 对象名.成员方法;

匿名对象

  • 对象的一种简化形式,只需要调用一次时使用;
new 类名().类的方法

类与对象的关系

  • 类是对一种事物的描述,是抽象的;
  • 对象是一类事物的实例,是具体的;
  • 类是对象的模板,对象是类的实体;
  • 类可以创建无数个对象;

构造方法

  • 当一个对象被创建时,构造方法可以用来初始化对象,给对象的成员变量赋初始值;
  • 格式:
修饰符 构造方法名(参数列表){
	//方法体;
}
public class A{
    String name;
    int age;
    public A(){}//没有传入任何参数,就是无参构造方法
    public A(String name,int age){//有参构造方法
        this.nane = name;
        this.age = age;
    }
}
  1. 如果没有定义构造方法,系统自动给出无参构造方法;如果定义了构造方法,系统将不再提供无参构造方法;
  2. 构造方法可以重载;
  3. 构造方法的方法名必须与类名一致,没有返回值;
  4. 不能return返回一个值;
  5. 构造方法在new对象时调用;
  6. 构造方法可以调用普通方法,但是普通方法不能调用构造方法;

封装

  • 将属性隐藏起来,若需访问某一个属性,提供公共方法对其访问;
  • 防止该类的代码和数据被其他类随意访问,要访问必须通过制定方法访问;
  • 封装可以是代码更容易理解和维护,可以增强代码的安全性;

一个标准的类通常有四个部分组成

  1. 所有成员变量都要使用private关键字修饰;
  2. 为每一个变量都提供一个get与set方法;
  3. 提供一个无参构造方法;
  4. 提供一个全参构造方法;

private关键字

  • private关键字是一个权限修饰符,代表私有的;
  • 只能用来修饰成员变量与成员方法;
  • 被private修饰的成员变量与成员方法只有在本类才可以被访问;
  • 要访问被private修饰的成员变量,必须通过提供的getXXX方法与setXXX方法才能访问;
private 数据类型 变量名;
private String name;
public String getName(){//get方法
    return name;
}
public void setName(String name){//set方法
    this.name = name;
}

set方法与get方法

  • set方法:不能有返回值,参数类型与成员类型相对应;
  • get方法:不能有参数,返回值类型与成员变量相对应;
  • 对于基本类型中的boolean类型,get方法写成isXXX方法;

this关键字

  • 代表所在类的当前对象的引用(地址值),对象自己的引用,用于区分成员变量和成员变量;
  • 只能用于属性、方法、构造方法;
  • 调用构造方法时,不能用在普通方法中,只能用在构造方法中,且只能在构造方法的首行;
  • this关键字不能用在静态方法中,this只与对象有关;
private String name;
public String getName(){//get方法
    return name;
}
public void setName(String name){//set方法
    this.name = name; // 因为当前类的name与传入的形参name相同,使用this关键字表示是当前类的name
}

final关键字

  • 修饰符,不可改变;
  • 修饰类,被修饰的类不能被继承;
  • 修饰方法,被修饰的方法不能被重写;
  • 修饰成员变量,被修饰的成员变量只能直接赋值或者在构造方法里面赋值,别的方式就不能修改值;
  • 修饰局部变量(基本类型),被修饰的局部变量只能赋一次值,就再也不能进行再次赋值;
  • 修饰局部变量(引用类型),被修饰的局部变量只能指向一个对象;

static关键字

  • 是一个修饰符,用于修饰成员变量与成员方法;
  • 被修饰的成员就是属于类的,而不是属于那一个对象,它随着类的加载而加载;
  • 当static 修饰成员变量时,该变量就称为类变量(静态属性),该类的每个对象都共享同一个类变量的值,任何对象都可以修改类变量;如果其中一个对象修改了类变量,那么其他对象所访问的该类变量就是被修改之后的值;
  • 访问修饰的成员变量方式:类名.成员变量名;(当然使用对象来点也是可以的)
static final int NUM = 100 ;//被static与final所修饰的变量就是常量,只读不可写;
  • 当static修饰成员方法时,该方法就被称为类方法(静态方法);
  • 被修饰的类方法只能调用静态属性与静态方法,不能调用非静态属性和非静态方法,但是非静态属性与非静态方法却可以调用静态属性与静态方法;
  • 静态方法中不能使用this关键字;

重载

  • 在同一类中,方法名相同,参数列表不同的现象称为重载;
  • 参数列表不同:1.参数个数不同2.参数数据类型不同3.参数顺序不同;
  • 构造方法与普通方法都可以重载;
  • 重载只和参数列表有关,与返回值无关;
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页