概述:

    面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。

理解面向对象:

而Java面向对象的思想就是强调具有功能的对象:手机打开,手机编写短信,手机发送短信。感觉这些过程是你自己亲自在做,而用面向对象的思却是你指挥着手机去做。面向对象和面向过程都是一种思想,面向对象是基于面向过程的。

  •   面向对象是相对面向过程而言。
  •   面向对象和面向过程都是一种思想。
  •   面向过程:强调的是功能行为。
  •   面向对象:将功能封装进对象,强调了具备功能的对象。面向对象时基于面向过程的。
  •   过程其实就是函数,对象是将函数等一些内容进行了封装。

面向对象的特点:

  1.    是一种符合人们思考习惯的思想。
  2.    可以将复杂的事情简单化。
  3.    将程序员从执行者转换成了指挥者。

  在Java中开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。

  设计的过程:其实就是在管理和维护对象之间的关系。


封装(Encapsulation):

概念:是指隐藏对象的属性和实现细节,仅对外提供访问方式。

原则:将不需要对外提供的内容都隐藏起来。把属性都隐藏,提供公共方法对其访问。

好处:将变化隔离,便于使用。提高重用性,提高安全性。

封装的表现形式之一  --> private:私有,权限修饰符,用于修饰类中的成员(成员函数,成员变量)。私有只在本类中有效。

  • 私有只是封装的一种表现形式。之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句。对访问的数据进行操作,提高代码的健壮性。
  • 一个成员变量 通常会对应两个访问方式一个是设置值,一个是获取值。


构造函数:

    

  • 定义格式:

class 类名称

{

访问权限 类名称(类型1 参数1,类型2 参数2,…)

{

程序语句;

}

}

  • 特点:
  • 1 函数名与类名相同。
  • 2 不用定义返回值类型。
  • 3 不可以写return语句。

作用:

   给对象初始化。

  • 注意:
  • 当一个类中没有定义构造函数时,那么系统会给该类加入一个空参数的构造函数。
  • 当在类中自定义了构造函数之后,默认的构造函数就没有了
  • 构造函数是给不同的对象进行分别初始化。
  • 构造函数 对象一建立就会调用与之对应的构造函数。
  • 一个类中默认会有一个空参数的构造函数,这个默认的构造函数的权限和所属类一致。
  • 如果类被public修饰,那么默认的构造函数也带public修饰符。
  • 如果类没有被public修饰,那么默认的构造函数,也没有public修饰。
  • 默认构造构造函数的权限是随着的类的变化而变化的。
  • 构造函数与一般函数不同之处:
  • 构造函数和一般函数在写法上有不同。
  • 在运行上也有不同:构造函数是在对象一建立就运行。给对象初始化。而一般方法是对象调用才执行,是给对象添加对象具备的功能。
  • 一个对象建立,构造函数只运行一次。而一般方法可以被对象调用多次。
  • 什么时候定义构造函数
  • 当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。
  • 构造函数可以被私有化,但是被私有化的构造函数式不能创建对象的。  
    this关键字:
  • this:代表本类的对象,代表它所在函数所属对象的引用。简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
  • 当定义类中功能时,该函数内部要用到调用函数的对象时,这时用this表示这个对象。但凡本类功能内部使用到了本类对象,都用this表示。
  • 应用:
  • 用于区分同名变量
  • 用于构造函数之间进行互相调用。
  • 注:this语句只能定义在构造函数的第一行。初始化动作要先执行,如果初始化中还有初始化的话,就先执行更细节的初始化。
    示例:
class Person
{
	//定义私有属性
	private String name;
	private int age;
	Person (int age)//构造函数
	{
		this.age = age;
	}
	Person(String name)
	{
		//name = name; //局部变量的名称和成员变量的名称相同,此时两个name都是局部的name。
		this.name = name;//this 表面上是区分成员变量和局部变量。
	}
	Person(String name,int age)
	{
		this(name);//this语句,调用构造函数Person(String name)
		//this.name = name;
		this.age = age;
	}
	public void speak()
	{
		System.out.println("name =" + this.name + ",,age =" + this.age);
		this.show();
	}
	public void show()
	{
		System.out.println(this.name);
	}
	/*
	需求:给人定义一个用于比较年龄是否相同的功能。
	*/
	public boolean compare(Person p)
	{
		return this.age == p.age;
	}
}

class PersonDemo 
{
	public static void main(String[] args) 
	{
		Person p = new Person("lisi ");
		Person p1 = new Person("zhangsan");
		//在一个类中成员之间完成互相调用都是对象来完成的。
		p.speak();
		p1.speak();
		Person p2 = new Person(15);
		Person p3 = new Person(20);
		boolean b = p2.compare(p3);//this和p2指向了同一个地址值,也就是同一个对象
		System.out.println(b);
	}
}

结果如下

ios面向对象与面向协议 面向对象app_面向对象

static(静态)

  • 用法:
  1. 是一个修饰符,用于修饰成员(成员变量,成员函数)。
  2. 当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,
  3. 还可以直接被类名调用。类名.静态成员。
  • static特点:
  1. 随着类的加载而加载  。
  • 当类加载到内存中时,static所修饰的成员就已经在内存中(方法区,共享区,数据区)开辟好了空间。
  • 也就是说静态会随着类的消失而消失,生命周期最长。
  1. 优先于对象存在。静态是先存在的,对象后存在。
  2. 被所有对象所共享。
  3. 可以直接被类名所调用。 类名.静态成员。
  • 实例变量和类变量的区别:
  • 存放位置:
  • 实例变量:随着对象的建立而存在于堆内存中。
  • 类变量:随着类的加载而存在于方法去中。
  • 生命周期:
  • 实例变量:生命周期随着对象的消失而消失。
  • 类变量:生命周期最长,随着类的消失而消失。
  • 静态的使用注意事项:
  1. 静态方法只能访问静态成员(成员变量,成员函数).。非静态方法可以访问静态,也可以访问非静态。
  2. 静态方法中不可以定义this,super关键字。因为静态优先于对象存在,所以静态方法中不可以出现this,super关键字。
  3. 主函数是静态的。
  • 静态有利有弊
  • 利处:对对象共性数据进行单独空间存储,节省内存空间。没有必要每个对象中都存储一份,可以直接用类名调用。
  • 弊端:生命周期过长,访问出现局限性,静态成员只能访问静态。
  • 什么时候使用静态?
  1. 什么时候定义静态变量(类变量)
  • 当对象中出现共享数据时,该数据被静态所修饰。对象中的特有数据要定义成非静态存在于堆内存中。
  1. 什么时候定义静态函数
  • 当功能内部没有访问到非静态数据(对象的特有数据),那么这时该函数(功能)可以定义成静态。
  • 就是一个有静态关键字标示的一个代码块区域。定义在类中。
  •  格式:

 static

 {

静态代码块中执行语句。

 }

  • 特点:
  • 随着类的加载而执行,只执行一次,如果和主函数在同一类中,优先于主函数执行。
  • 作用:
  • 用于给类进行初始化的。
  •  实例:
class StaticCode{
	static
	{
		System.out.prontln("a");
	}
}

class StaticCodeDemo
{
	static
	{
		System.out.prontln("b");
	}
	public static void main(String[] args)
	{
		new StaticCode();
		new StaticCode();//因为类已经加载,静态代码块已经执行过,所以没有打印结果。
		System.out.prontln("over");
	}
	static
	{
		System.out.prontln("c");
	}
}

//打印结果 b c a over