5.面向对象思想 Object-Oriented Thought

本文介绍了Java面向对象的基本概念,包括类和对象的关系、成员变量与局部变量的区别、封装的概念及应用、构造函数的作用与特点、this关键字的使用、static关键字的功能、单例设计模式的实现方法等内容。

1.概念

对象:客观存在的对象实体和主观抽象的概念

面向对象:以对象作为中心,采用抽象、封装、继承,多态等设计方法来解决问题的一种软件开发方法

2.类和对象的关系

类:事物的描述

对象:该事物的实例,java中通过new关键字创建

类是对象的抽象,对象是类的实例

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

定义环境不同:成员变量定义在类中,局部变量定义在局部代码块中

定义内存不同:成员变量定义在堆内存中,局部变量定义在栈内存中

生存周期不同:成员变量随着对象的创建而存在随着对象的消失而消失,局部变量随所属区域的执行而存在随着所属区域的消失而释放

默认初始值不同:成员变量都有默认初始值,局部变量没有默认初始值

4.封装

隐藏对象的属性和实现细节,仅对外提供公共访问方式

好处:提高程序重用性、安全性

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

5.构造函数

作用:给对象初始化

特点:a.函数名与类名相同   b.没有返回值   c.不用定义返回值类型

代码示例

class Person {
	private String name;
	private int age;

	// 自定义构造函数
	Person() {// 一个类如果没有自定义构造函数,则该类中会有一个默认的空参数构造函数;如果自定义构造函数,则默认构造函数就不存在了
		System.out.print("Person run");
	}
}

public class ConsDemo {
	public static void main(String[] args) {
		Person p = new Person();
	}
}
构造函数和一般函数的区别:

调用方式不同:构造函数在对象创建时被调用,一般函数在需要函数功能时被调用

调用次数不同:构造函数只会被调用一次,一般函数会被调用多次

构造代码块

所有对象初始化

代码示例

class Person {

	{// 构造代码块,随着对象的创建而创建
		System.out.println("ConsCode...");
	}

}

public class ThisDemo {

	public static void main(String[] args) {
		Person p = new Person();
	}

}
6.this关键字

this代表本类对象的引用,当函数内需要用到调用该函数的对象时使用;当成员变量和局部变量重名时,使用this关键字区分

代码示例

class Person {
	private String name;
	private int age;

	Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public void speak() {
		System.out.println(name + ":" + age);
	}
}

public class ThisDemo {

	public static void main(String[] args) {
		Person p = new Person("旺财", 12);

		p.speak();

	}

}
this也可以用于构造函数中调用其他构造函数,但只能定义在构造函数的第一行因为初始化动作先执行

代码示例

class Person{
	private String name;
	private int age;
	
	
	Person(String n,int a){
		name=n;
		age=a;
	}
	
	//判断是否是同龄人
	public boolean compare(Person p){
		return this.age==p.age;
	}
}
public class ThisDemo {

	public static void main(String[] args) {
		Person p1=new Person("旺财",12);
		Person p2=new Person("小 强",12);
		
		
		boolean b=p2.compare(p1);
		System.out.println(b);
	}
	
}

7.static关键字

用于修饰成员变量和成员函数

被修饰的成员的特点:

        随着类的加载而加载

        优先于对象存在

        被所有对象共享

        可以直接被类名调用  格式: 类名.静态成员

        修饰的是共享数据,对象中存储的是特有数据

使用注意事项:

          静态方法只能访问静态成员,非静态方法既可以访问静态成员,又可以访问非静态成员

          静态方法不可以写this,super关键字

          主函数是静态

成员变量和静态变量的区别:

           a. 生命周期不同

                    成员变量随着对象的创建而存在,随着对象的被回收而释放

                    静态变量随着类的加载而存在,随着类的消失而消失

           b.调用方式不同

                     成员变量只能被对象调用

                     静态变量既可以被对象调用,也可以被类名调用

           c.别名不同

                     成员变量也称为实例变量

                     静态变量也称为类变量

           d.数据存储位置不同

                     成员变量存储在堆内存的对象中

                     静态变量存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据

代码示例

class Person {
	private String name;
	static private String sex;

	Person(String name, String sex) {
		this.name = name;
		Person.sex = sex;
	}

	public void speak() {
		System.out.println(this.name + ":" + Person.sex);
	}
}

public class ThisDemo {

	public static void main(String[] args) {
		Person p = new Person("yilong", "male");

		p.speak();

	}

}

静态代码块

给类进行初始化

代码示例

class StaticCode {
	static int num;
	static {
		num += 10;
		System.out.println("haha");
	}

	static void show() {
		System.out.println(num);
	}
}

public class StaticDemo {

	public static void main(String[] args) {

		StaticCode.show();
	}

}

当类中有对象时,静态代码块、构造函数、构造代码块的执行顺序:

静态代码块>构造代码块>构造函数

8.单例设计模式

设计模式:解决问题的某种思想

单例设计模式:可以保证一个类在内存中的对象唯一性

步骤:

a.私有化该类构造函数

b.通过new在本类中创建一个本类对象

c.定义一个公有方法,将创建的对象返回

代码示例

class Single {//饿汉式 类一加载,对象就已经建立了
	private int num;
	static Single s = new Single();

	private Single() {
	}

	public static Single getInstance() {
		return s;
	}

	
	public void setNum(int num) {
		this.num = num;
	}

	public int getNum() {
		return num;
	}
}

public class SingleDemo {

	public static void main(String[] args) {
		Single s1 = Single.getInstance();
		Single s2 = Single.getInstance();

		s1.setNum(1);
		s2.setNum(2);

		System.out.println(s1.getNum());
		System.out.println(s2.getNum());
	}

}
class Single {// 懒汉式 延迟加载形式, 类加载进来没有对象,只有调用getInstance方法时,才会创建对象
	private int num;

	private static Single s = null;

	private Single() {
	}

	public static Single getInstance() {
		if (s == null)
			s = new Single();
		return s;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public int getNum() {
		return num;
	}
}

public class SingleDemo {

	public static void main(String[] args) {
		Single s1 = Single.getInstance();
		Single s2 = Single.getInstance();

		s1.setNum(1);
		s2.setNum(2);

		System.out.println(s1.getNum());
		System.out.println(s2.getNum());
	}

}



面向对象的思维过程是一种解决问题和设计软件的方法,它将现实世界的概念和问题转化为计算机程序设计的模型。这种思维过程的核心是将问题划分为对象,并基于这些对象的特性和行为来构建软件。 首先,面向对象的思维过程强调用对象来表示现实世界中的个体或事物。每个对象有自己的属性和方法。属性描述了对象的特征,方法则定义了对象的行为。通过将问题分解为对象,我们可以更好地理解和控制问题的复杂性。 其次,面向对象的思维过程注重对象之间的交互。对象可以通过消息传递来与其他对象进行通信和合作。这种交互引入了封装、继承和多态的概念。封装可以隐藏对象的内部实现细节,使得对象能够更加独立地工作。继承可以让一个对象继承另一个对象的属性和方法,从而减少重复编码,提高代码复用性。多态允许不同的对象对同一消息做出不同的响应,提供了更大的灵活性和可扩展性。 最后,面向对象的思维过程鼓励模块化和抽象化。通过将对象组织成类和模块,我们可以更好地组织和管理代码。类是一种将相似对象的属性和方法封装在一起的方式。模块是将相关类组织在一起的方式。通过模块化和抽象化,我们可以提高代码的可读性、可重用性和可维护性。 综上所述,面向对象的思维过程是一种将问题转化为对象模型,强调对象之间的交互和模块化的方法。它提供了一种抽象、灵活和可扩展的解决问题的方式,被广泛应用于软件开发领域。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值