------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
面向对象
一、面向对象思想:在Java的学习过程中,面向对象几乎贯穿始终。
面向对象思想概述:当需求单一,或者简单时,我们一步一步的去实现没有问题,而且效率也很高,但是随着需求的增加,功能的增多,我们就会发现面对每一个步骤都很麻烦。我们就开始思考,能不能把这些功能进行封装,封装时根据不同的功能进行不同的封装,功能累死的封装在一起。当我们使用时,只需要找到对应功能的类就可以了,这就是面向对象的思想。
特点:1、是一种符合我们思想习惯的思想
2、可以复杂的事情简单化
3、讲文明从执行者变成了指挥者,角色发生了变化
二、类与对象概述
1、言:我们学习编程就是为了模拟现实世界的事物,现实信息化。我们如何描述现实世界的事物呢?
举例:描述学生事物
姓名,年龄,性别
吃饭,学习,睡觉
属性: 就是该事物的描述信息
行为: 就是该事物能够做什么
Java语言中最基本的单位就是类,所以我们可以把事物用作类的一个体现,这样我们就得到了类和事物的实现的对应关系
事物 类
属性------------------------成员变量
行为------------------------成员方法
2、成员变量和成员方法
成员变量:和定义变量一样,只不过位置发生了变化,在类中,方法外
成员方法:和定义方法一样,只不过把static去掉
3、类和对象
类:是一组相关的属性和行为的集合
对象:是该类事物的具体体现
举例:类-----------学生
对象--------班长(班长是一名学生,就是学生类中的一个据图体现)
4、创建对象
创建对象格式:类名 对象名 = new 类名();
使用成员方法:对象名.方法名(.........)
使用成员变量:对象名.变脸名
下面我们代码说明:
class Student
{
String name;
nt age ;
public void eat(){
System.out.println("班长吃饭了。。。。。。。。");
}
public void sleep(){
System.out.println("班长睡觉了。。。。。。");
}
}
我们首先创建一个学生类,成员变量为姓名和年龄,这是学生的属性,而每个学生都要吃饭和睡觉,这是学生的行为,用方法来实现
class Test{
public static void main(String[] args){
Student s = new Student();
s.name = "小明";
s.age = 22;
s.eat();
s.sleep();
System.out.println(s.name+"-----"+s.age);
}
}
运行结果为:
班长吃饭了。。。。。。。。
班长睡觉了。。。。。。
小明------------22
我们来测试一下这个类,创建一个学生对象,将名字定义为小明,将年龄定义为22,然后再调用学生共有的方法,吃饭和睡觉。这样就实现了一个类的具体体现,以后再需要学生的描述,就可以调用这个类,创建对象。
我们将相似的功能封装在学生类中,用的时候只要找到学生类就可以使用了,这就是面向对象的思想
5、成员变量的局部变量的区别
在类中的位置:成员变量在类中方法外,局部变量在方法定义中和方法声明上
在内存中的位置:成员变量在堆内存中,局部变量在栈内存中
生命周期:
成员变量随着对象的创建而存在,随着对象的消失而消失
局部变量随着放啊分的调用而存在,随着方法的调用完毕而消失
初始值不同:
成员变量有默认的初始值
局部变量没有默认的初始值,必须定义,赋值,然后才可以使用
注意:局部变量和成员变量的名称可以一致,在方法中使用的时候会采用就近原则。
6、参数传递问题
在Java中,只有值传递,没有址传递。
形式参数:
基础数据类型:形式参数的改变不影响实际参数,因为在内存中基础数据类型是实际的数据,在传递的时候是实际参数的值,并不是实际参数本身。
引用数据类型:形式参数的改变直接影响实际参数的值,对于引用数据类型,传递的是其地址值,这里相当于指向了那个地址,然后对于那个地址内的数据进行操作,原数据会被覆盖
7、匿名对象
匿名对象就是没有名字的对象,其应用场景在与调用方法,仅仅值使用一次的时候。
同时匿名对象可以作为实际参数传递
格式为:new 对象名();
解释:顾名思义,不用对其赋予名称,并且只是用一次,使用之后就会等待垃圾回收机制回收。
如果再次创建一个匿名对象,这并不与仅仅使用一次冲突,因为虽然没有名字,但同样用到了new关键字,在内存中同样新开辟了一个空间,属于两个对象。
三、封装
封装概述:是指隐藏对象的属性和实现细节,进对外提供公共访问方式
封装的好处:隐藏了实现细节,提供了公共访问方式
提高了代码的复用性
提高了代码的安全性
封装的原则:将不需要对外公开的内容都隐藏起来,把属性隐藏,只提供公共方法对其进行访问
private关键字:
1、是一个权限修饰符
2、可以修饰成员变量和成员方法
3、被其修饰的成员只能在本类中被访问
this关键字:
封装大多都会使用private关键字,而被private修饰之后只能在本类中使用,所以我们就需要定义方法来对成员变量进行操作,这是又会有问题,当我们的成员变量和局部变量名称相同时,局部变量就会将成员变量隐藏,就近原则。
而使用this关键字就是用来区分局部变量和成员变量,this代表本类的引用,简单说,就是谁调用我,我就代表谁
下面我代码实现一下:
class Student
{
private String name;
private int age ;
public void setName(String name){
this.name = name ;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public void eat(){
System.out.println("班长吃饭了。。。。。。。。");
}
public void sleep(){
System.out.println("班长睡觉了。。。。。。");
}
}
将属性隐藏,把name和age用private修饰,这样外部想要访问就只能创建对象,再调用其setName和setAge方法在对其操作,保证了安全新。
class Test{
public static void main(String[] args){
Student s = new Student();
s.setName("小白");
s.setAge(18);
s.eat();
s.sleep();
System.out.println(s.getName()+"-----"+s.getAge());
}
}
只能其方法对其赋值,也只能调用其方法显示其值。
这就是封装的思想。
本人也在学习之中,我将博客作为我的一种交流方式,也看作是一种学习笔记,其中有很多知识在我书写过程中会有疏漏,也有很多不足,其他朋友访问的时候如果发现请不吝赐教,学习编程过程是艰苦的,希望其他朋友指出我的不足之处,我会加以改正,大家共同进步