Java语言基础之:面向对象

一、 面向对象概念

1.1  理解面向对象

面向对象是相对面向过程而言,面向对象和面向过程都是一种思想。

区别在于:面向过程强调的是功能行为;面向对象将功能封装进对象,强调具备了功能的对象。

面向对象是基于面向过程的。

1.2  面向对象的特点

1、是一种符合人们思考习惯的思想

2、可以将复杂的事情简单化

3、将程序员从执行者转换成了指挥者

如何实现需求: 如果有具备所需功能的对象,就调用这个对象;如果没有就创建一个具备所需功能的对

象并调用这个对象来完成需求先要去找具有所需的功能的对象来用。这样可以提高程序复用性并简化开发。

言之:Java中实现需求就是找对象,建立对象,使用对象,维护对象的关系

 1.3  面向对象开发过程、设计过程、特征

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

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

3、面向对象的特征:封装(encapsulation)、继承(inheritance)、多态(polymorphism)


现实中对象无处不在:

空调:我们只需要操作遥控上的加热、制冷按钮,空调就能实现相应功能,而不需要我们去关心

其内部是如何运作。

灯:只需要打开开关,灯就会亮,而不用去了解灯内部具体的构造和实现原理。

二、类与对象的关系

是对拥有相同行为特征对象的一个抽象描述,而对象是类这个抽象概念中事实存在的个体。

如:人类是对所有人的描述,张三就是这个类中的具体对象。

映射到Java中:描述就是被class定义的类(如 class Person)。具体对象就是Java在堆内存中

用new建立的实体(如 Person ZhanSan=new Person())

2.1 类与对象(图例)

类与对象的关系如图

可以理解为:

类就是图纸:图纸是用来描述汽车的属性。

汽车就是堆内存中的对象:汽车是具备图纸所描述属性的具体实体


2.2 类的定义

生活中描述事物无非就是描述事物的属性行为

 如:人有身高,体重等属性,有说话,打球等行为。

Java中用类class来描述事物也是如此:

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

 行为:对应类中的成员函数。

定义类其实就是在定义类中的成员(成员变量成员函数)。


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

成员变量成员变量定义在类中,在整个类中都可以被访问;成员变量存在于堆内,随着对

象的建立而建立,如果不再使用,JVM会应用垃圾回收机制进行回收;成员变量有默认初始化值

局部变量局部变量只定义在局部范围内,如函数内、语句内等;局部变量存在于栈内存中。

当作用的范围结束,变量空间会自动释放局部变量没有默认初始化值


 2.4 创建对象,使用对象(以车为例)

class Car//对Car这类事物进行描述
{
	String color = "red";
	int num = 4; 
	public static void show()
	{
		System.out.println("color="+color+"..num="+num);
	}
}
class CarDemo
{
	public static void main(String[] args)
	{
		Car c1 = new Car();//建立对象
		Car c2 = new Car();
		c2.color = "black";//对对象的属性进行修改 
		c2.show();//使用对象的功能。
	}
} 

对上例代码中对象在内存中结构的描述:


 

2.5 匿名对象

匿名对象是对象的简化形式

匿名对象两种使用情况:

1、当对对象方法仅进行一次调用时,用匿名对象来实现比较简化;如果对一个对

象进行多个成员调用,必须给这个对象起名字

2、匿名对象可以作为实际参数进行传递。

代码实例:

class Car
{
	String color="red";
	int num=4;
	void run()
	{
		System.out.println(color+","+num);
	}
}
class NiMingObject 
{
	public static void main(String[] args) 
	{
		new Car().num=5; //在堆内新开辟Car类型的实例1,并将num改为5
		new Car().color="blue";//在堆内新开辟Car类型的实例2,并将color改为blue
		new Car().run();//在堆内新开辟Car类型的实例3,调用其run()方法

		Car c=new Car();
		c.num=6;
		c.run();        //实例c可以通过c.对象成员 对属性进行修改及方法调用
		new Car().num=6;//匿名对象只能修改一个属性
		new Car().run();//匿名对象只能调用一个方法

		Car q=new Car();
		q.run();	
	}
}


三、 封装

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

封装的好处:1.将变化隔离  2.便于使用  3.提高重用性  4.提高安全性

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

private关键字:是一个权限修饰符,用于修饰成员(成员变量和成员函数),被私有化的成

员只在本类中有效(既被私有修饰的成员只能被本类调用)。

Private关键字常用到的一个示例:将成员变量私有化,对外提供对应的set 、get 方法对

其进行访问。提高对数据访问的安全性。

class Person
{
	//将age私有化之后,类以外即使建立了对象也不能直接访问,但人有年龄
	//,就需要在Person类中提供对应访问age的方式
    private int age;
	public void setAge(int a)
	{
		if (a>0&&a<130)
		{
			age=a;
		}
		else
			System.out.println("年龄错误");
		
	}
	public int getAge()
	{
		return age;
	}
	void talk()
	{
		System.out.println("age="+age);
	}
}
class PersonDemo
{
	public static void main(String[] args) 
	{
		Person p=new Person();
		//a.age=-23; //:30: 错误: age可以在Person中访问private
		p.setAge(-32);
		p.talk();    //输出结果”年龄错误   age=0“   //成员变量有默认值 局部变量不初始化不能参与运算
 	}
}


四、 构造函数

构造函数特点:

1.函数名与类名相

2.不用定义返回值类

3.不可以写return语句作用: 给对象进行初始化。

注意:

1.默认构造函数的特点。

2.多个构造函数是以重载的形式存在的。

3.构造函数对象一建立就会调用与之对应的构造函数

构造函数的小细节:

1.当一个类中没有定义构造函数时,那么系统会默认给该类加入一个

空参数的构造函数

2.当在类中自定义了构造函数后,系统默认构造函数就消失

构造函数和一般函数区别:

1.写法上不同。

2.在运行上也有不同;构造函数是在对象一建立就运行,给对象初始化。

而一般方法是对象调用才执行,是给对象添加对象具备的功能

3.一个对象建立,构造函数只运行一次。而一般方法可以被该对象调用多次

什么时候定义构造函数:

当分析事物时,该事物存在具备一些特性或者行为, 那么将这些内容定义在构造函数中

构造代码块:

构造代码块(定义不同对象共性的初始化内容)

作用:给对象进行初始化

运行:对象一建立就运行,而且优先于构造函数执行

与构造函数区别:

1.构造代码块是给所有对象进行统一初始化

2.而构造函数是给对应的对象初始化 

代码示例:

class Person 
{
	private String name;//构造代码块
	private int age;//构造代码块	
	Person()
	{
		System.out.println("A:name="+name+",,age"+age);
	}
	Person(String n)
	{
		name=n;
		System.out.println("B:name="+name+",,age"+age);
	}
	Person(String n,int a)
	{
		name=n;
		age=a;
		System.out.println("B:name="+name+",,age"+age);
	}

}
class PersonDemo2
{
	public static void main(String[] args)
	{
		Person p2=new Person();
		Person p1=new Person("zhang");
		Person p3=new Person("zhang",6);
	}
}


 五、this关键字

特点:this代表其所在函数所属对象的引用。 换言之:this代本类对象的引用。

换言之:哪个对象在调用this所在的函数,this就代表哪个对象。

什么时候使用this关键字:当在函数内需要用到调用该函数的对象时,就用this。

六、static关键字

static关键字用于修饰成员(成员变量和成员函数)

被修饰后的成员具备以下特点:

1.随着类的加载而加载

2.优先于对象存在

3.被所有对象所共享

4.可以直接被类名调用

使用注意:

1.静态方法只能访问静态成员

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

3.主函数(main)是静态的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值