Java面向对象程序设计(OOP)学习

什么是面向对象


  • 面向对象:面向对象思想就是不断的创建对象,使用对象,指挥对象做事情,强调的是对象,对象中有具体的方法,帮我们完成相应的功能,面向对象是基于面向过程的

  • 面向过程:其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。强调的是过程,通过第一步,第二部,一步一步自己完成对应的需求。代表语言:C语言,当需求单一,或者简单时,我们一步一步去操作也没问题,并且效率也挺高,但是随着需求的不断更改,功能的不断增多,一步一步就显着有点麻烦了。而面想对象就可以通过对功能和步骤的封装,使得结构清晰,使用更方便

  • 简单比较:

用面向过程修电脑:

​              1.学习如何修电脑

​              2.检查哪里坏了

​              3.买需要更换的配件

​              4.修电脑

​              5.修好使用

用面向对象修电脑:

​              1.找个修电脑的师傅

​              2.调用修电脑的技术(功能),传递进去钱的参数

​              3.电脑修好

​              4.使用

  • 比较可得两者优劣:

          面向过程:

                优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源。
                缺点:不易维护、不易复用、不易扩展.

         面向对象:
               优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统         更加灵活、更加易于维护 .
               缺点:性能比面向过程差

类与对象


  • 在面向对象程序设计中,数据和对数据的操作被封装在一个集合体中,即被定义为类。类是用来定义一组对象的共有状态和行为的模板。

  • 类是一种复杂的数据类型,它是将数据和对数据的操作封装在一起的集合体,涉及数据类的扩展。类不仅包含数据,还包含对数据进行操作的方法,正是这些方法反映了数据的行为。

  • 类中的数据成为成员变量,对数据进行的操作称为成员方法。程序中可以生成一个对象,并用标识符表示,通过对象引用类中的成员变量和成员方法。

  • 对象是类的实例,是某个类的变量。当一个程序运行时,系统为对象分配内存单元,而不是为类分配内存单元。类和对象是密切相关的,类脱离不了对象,对象必须依赖类。

举例:
类的定义

/* 
 * 需求:定义一个学生类。
 * 
 * 学生事物:
 * 		属性:姓名,年龄...
 * 		行为:学习,吃饭...
 * 
 * 学生类:
 * 		成员变量:姓名,年龄...
 * 		成员方法:学习,吃饭...
 */
public class Student {
	//成员变量
	//姓名
	String name;
	//年龄
	int age;
	
	//成员方法
	//学习的方法
	public void study() {
		System.out.println("好好学习,天天向上");
	}
	
	//吃饭的方法
	public void eat() {
		System.out.println("学习饿了要吃饭");
	}
}

类的使用

/*
 * 类的使用:
 * 		使用一个类,其实就是使用该类的成员。(成员变量和成员方法)
 * 		而我们要想使用一个类的成员,就必须先拥有该类的对象。
 * 那么我们如何拥有一个类的对象呢?
 * 		创建对象就可以了
 * 我们如何创建对象呢?
 * 	格式:
 * 		类名  对象名  = new 类名();
 * 对象如何访问成员呢?
 * 		成员变量:
 * 			对象名.成员变量
 * 		成员方法:
 * 			对象名.成员方法(...)
 */
public class StudentTest {
	public static void main(String[] args) {
		//类名  对象名  = new 类名();
		Student s = new Student();
		//System.out.println("s:"+s);//地址值
		
		//使用成员变量
		System.out.println("姓名:"+s.name);//null
		System.out.println("年龄:"+s.age);//0
		System.out.println("----------");
		
		//给成员变量赋值
		s.name = "刘诗诗";
		s.age = 18;
		//再次使用成员变量
		System.out.println("姓名:"+s.name);//刘诗诗
		System.out.println("年龄:"+s.age);//18
		System.out.println("----------");
		
		//调用成员方法
		s.study();
		s.eat();
	}
}

成员变量与成员方法


成员变量:和我们学习过的变量的定义是一样的,有两个小区别:

  •  位置不同:类中,方法外
    
  •  初始化值:成员变量不需要给初始化值也可以使用,因为它有默认值
    

成员方法:和我们学习过的方法的定义是一样的,有一个小区别。

  •  去掉了修饰符中的static关键字
    

成员变量和局部变量的区别


A:在类中的位置不同

  •  	成员变量:在类中,方法外
    
  •  	局部变量:在方法中或者方法声明上(形式参数)
    

B:在内存中的位置不同

  •  	成员变量:在堆内存
    
  •  	局部变量:在栈内存
    

C:生命周期不同

  •  	成员变量:随着对象的创建而存在,随着对象的消失而消失
    
  •  	局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
    

D:初始化值不同

  •  	成员变量:有默认值
    
  •  	局部变量:没有默认值,必须先定义,赋值,最后使用
    

private、this关键字和封装


private关键字

1.private关键字:
            a:是一个权限修饰符。
            b:可以修饰成员(成员变量和成员方法)
            c:被private修饰的成员只在本类中才能访问
2. private最常见的应用:

  • 把成员变量用private修饰
  • 提供对应的getXxx()/setXxx()方法

封装

  1. 概述
    是面向对象三大特征之一
    是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改

  2. 封装的好处
    将不需要对外提供的内容都隐藏起来。
    把属性隐藏,提供公共方法对其访问。
    成员变量private,提供对应的getXxx()/setXxx()方法

  3. 封装的好处
    通过方法来控制成员变量的操作,提高了代码的安全性
    把代码用方法进行封装,提高了代码的复用性

this关键字

  1. 概述
    代表所在类的对象引用,方法被哪个对象调用,this就代表那个对象
  2. 使用
    局部变量和成员变量重名
  3. 代码
/*

 * 如果局部变量名称和成员变量名称一致,在方法中使用的时候采用的是就近原则。
 * 
 * 我们有没有办法把局部变量的name赋值给成员变量的name呢?
 * 有
 * 
 * 有什么办法呢?
 * 		用this关键字就可以解决这个问题
 * 
 * this:代表所在类的对象引用
 * 		方法被哪个对象调用,this就代表谁。
 * 
 * 使用场景:
 * 		就是用于解决成员变量被隐藏的问题。		
 */
public class Student {
	private String name;
	private int age;

	public void setName(String name) { //"刘诗诗"
		//name = name;
		this.name = name;
	}

	public String getName() {
		return name;
		//return this.name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getAge() {
		return age;
	}
}

构造方法


  1. 作用概述
    给对象的数据进行初始化
  2. 格式
    方法名与类名相同
    没有返回值类型,连void都没有
    没有具体的返回值
  3. 代码
/*
 * 构造方法:
 * 		给对象的数据进行初始化
 * 
 * 格式:
 * 		方法名和类名相同
 * 		没有返回值类型,连void都不能写
 * 		没有具体的返回值
 *
 */
public class Student {	
	public Student() {
		System.out.println("这是构造方法");
	}
}

public class StudentDemo {
	public static void main(String[] args) {
		//如何调用构造方法呢?
		//通过new关键字调用
		//格式:类名 对象名 = new 构造方法(...);
		Student s = new Student();
	}
}

4.注意事项

  • 如果你不提供构造方法,系统会给出默认构造方法
  • 但是如果你提供了构造方法,系统将不再提供
  • 构造方法也是可以重载的,重载条件和普通方法相同
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值