黑马程序员--面向对象

 ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1.面向对象

1.1.面向对象的概念

面向对象是一种对现实世界的一种抽象,是计算机编程技术发展到一定阶段后的产物

1.2.理解面向对象

面向对象是相对于面向过程而言

面向对象和面向过程都是一种思想

面向过程:强调的是功能行为,以过程为中心,算法为驱动  程序=算法+数据

面向对象:将功能封装进对象,强调具备了功能的对象,以对象为中心,消息为驱动  程序=对象+消息

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

一句话概括:万物皆对象

举例:电灯泡的发明与使用

有对象直接拿来用,没有对象造一个对象用

1.3.面向对象的特点

三个特征:封装,继承,多态

 

找对象,建立对象,使用对象,维护对象的关系


现实中的对象:张三   李四

想要描述:提取对象中共性内容.对具体的抽象

描述时:这些对象的共性有:姓名,年龄,性别,学习java的功能

 

映射到java中,描述就是class定义的类

具体对象就是对应java在堆内存中用new建立实体

1.4.类与对象的关系

类就是对现实生活中事务的描述

对象就是这类事实物就是实实在存在的个体

 概括:类是对象的抽象,对象是类的具体

class Car
{
	//描述颜色
	String color = "红色";
	//描述轮胎数
	int num = 4;

	//运行行为。
	void run()
	{

		System.out.println(color+".."+num);
	}
	
}
Car a=new Car()内存中开辟情况

成员变量:定义在方法之外的变量

局部变量:定义在方法内部,参数列表,for循环等位置上

 区别:

1.      作用的范围不一样

成员变量作用于整个类中,局部变量作用于函数中,或者语句中

2.      在内存中的位置:

成员变量在堆内存中,因为对象的存在,才在内存中存在

局部变量存在于栈内存中,当方法调用结束后会消失

1.5.匿名对象

没有名字的对象

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

匿名对象两种使用情况

1.      当对对象方法仅进行一次调用时,比较简化

如果对一个对象进行多个成员调用时,必须起个名字

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

匿名对象调用属性没有意义,调用方法有意义

new Car();

匿名对象开辟内存情况:

1.6.封装(encapsulation)

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

好处:

1.      将变化隔离

2.      便于使用

3.      提高重用性

4.      提高安全性

原则:

1.      将不需要对外提供的内容都隐藏起来

2.      把属性都隐藏,提供公共方法对其访问

拿买电脑举例:你找一个人给你买电脑,这个懂电脑的人如何去和卖电脑的人谈内存,谈硬盘,谈CPU你都不需要了解,只要那人把电脑买到即可.也就是说,这个人去买电脑的技巧和方法和你都没有关系,对你是隐藏的

 

:函数是java中最小的封装体

         类也是封装体

         包也是封装体

         框架也是封装体

 

饭店:顾客-->服务员-->厨师

 

关键字:

         private:私有的,权限修饰符:用于修饰类中的成员(成员变量,成员方法)

         私有只在本类中有效,类以外即使建立了对象也不能直接访问

:封装不是私有

私有仅仅是封装的一种表现形式

 

之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句

对访问的数据进行操作.提高代码的健壮性

 

成员变量在不初始化值得情况下是可以进行运算的,因为在堆内存中开辟空间时会赋值为默认值

局部变量在不初始化值得情况下是不可以进行运算的,因为它是在栈内存中开辟的内存空间,不会赋默认值


2.构造函数

特点:

1.      函数名与类名相同

2.      不用定义返回值类型

3.      不可以写return语句

作用:

         给对象进行初始化

注意:

1.      默认构造函数的特点

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

b.      当在类中自定义了构造函数后,默认的构造函数就没有了,如果初始化时调用空参数的构造函数,编译会报错

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

 

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

一出现就出现了一些基础的特性(人一出生就会哭)

 

练习:定义一个person类,写3个构造函数

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

3.      构造函数和一般函数的不同点

a.      在写法上不同

b.      在运行上不同:

i:构造函数在对象一建立时就运行,为对象初始化

ii:一般函数在对象调用时才运行,是为对象添加所具备的功能

c.      运行的次数

i:构造函数只运行一次(声明的对象构造方法只能执行一次)

ii:一般函数可以被对象调用多次

4.      什么时候定义构造函数呢?

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

2.1构造代码块:

实现方式:
{
    System.out.print(“hello”);
}

作用:给对象进行初始化

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

构造代码块与构造函数的区别

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

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

可以把不同构造函数的的共性放在构造代码块中统一初始化

构造代码块小细节:

1.      构造函数可以使用private修饰,只是被修饰的构造函数不能被在他类中初始化对象

 

当局部变量名称和全局变量名称相同

String name;
	public Person(String name){
		name=name;
	}

在编译时不会出错,在运行时也不会出错

但是执行结果却是null

如果方法中有的此变量名,在方法中就会调用此变量名

如果方法中没有此变量名,才会去全局变量中寻找变量名

如果想把局部变量中的值赋给全局变量,需要对全局变量进行标识


就引入了关键字:this

3.this关键字

this可以区分局部变量和成员变量情况

问题:

1.      this为什么可以解决这个问题呢?

2.      this到底代表的是什么呢?

this:

         代表本类的对象

         代表它所在函数所属对象的引用

         简单说:哪个对象在调用this所在的函数,this就代表哪个对象

this 关键字的应用

当定义类时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象

(本类对象调用本类方法时,使用this关键字)

构造函数之间调用已经有的方法:

	public Person(String name){
		name=name;
	}
	public Person(String name,int age){
		this(name);//没有点
		this.age=age;
	}

注意:

1.      this语句只能定义在构造函数的第一行,因为初始化要先执行

2.      this只能在构造函数之间应用,成员方法不能调用构造函数

3.      this指向的是当前对象的内存地址值(可以输出)







------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值