什么是面向对象?
面向对象是一种将复杂的东西简单化的思想,有三个特征:封装、继承、多态
从生活出发,理解类与对象的关系
类:对现实生活中事物的描述,描述包含事物的属性和行为
对象:这类事物,实实在在存在的个体
举个简单的例子:
技术主管吩咐开发专员开发一个功能模块。
开发专员就是一个对象,技术主管只要通过这个对象就可以实现想要的功能,而开发专员具体怎么开发技术主管不需要知道。
成员变量与成员函数
上面讲到类就是对事物的描述,包含事物的属性和行为,即变量与方法,定义的变量为成员变量,方法为成员函数。
成员变量与局部变量的作用范围
- 成员变量:成员变量作用于整个类中
- 局部变量:局部变量作用于函数中或语句中(for语句)
成员变量与局部变量在内存中的位置
- 成员变量:在堆内存中,随对象的存在而存在。不赋值也可参与运算,堆内存中的变量会自动默认初始化
- 局部变量:存在栈内存中。不赋值是不能参与运算的。栈内存中的变量不会默认初始化
建立对象的方法:
1
|
Person p =
new
Person();
|
注:对象存在与堆内存中,p是一种类类型变量,属于一种引用型变量,p引用堆内存中的new Person()
匿名对象
格式:new Person();
匿名对象的使用方式
- 当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化。
- 可以将匿名对象作为实际参数进行传递。
12345678910public
static
void
main(String[] args)
{
show(
new
Car());
}
public
static
void
show(Car c)
{
c.num =
3
;
c.color =
"black"
;
c.run();
}
注:如果对一个对象进行多个成员调用,必须给这个对象起个名字。
封装(Encapsulation)
封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:将变化隔离,便于使用,提高重用性,提高安全性。
封装原则:将不需要对外提供的内容都隐藏起来,可通过private私有化
把属性都隐藏,提供公共方法对其访问。
构造函数
特点:
- 函数名与类名相同
- 不用定义返回值类型
- 不可以写return语句
- 每个类都有一个默认的构造函数Person(){},默认构造函数看不到,定义了就成自定义构造函数了,默认构造函数的权限随着类的变化而变化
- 多个构造函数式以重载的形式存在
- 若写了带有参数的构造函数即指定构造函数(Person(int x){}),一定要自定义Person(){} 这个原来被默认的构造函数,否则在很多时候会出错,比如new Person(); 这时候会初始化Person(int x){},而因对象没传入参数而编译出错;再比如存在继承关系的时候,自定义构造函数中存在super();会因定义了Person(int x){}而没定义Person(){}导致“无法将类 Person中的构造器 Person应用到给定类型”错误
作用:给对象进行初始化(对象一建立,就会调用与之对应的构造函数)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class
Person
{
Person()
{
System.out.println(
"person ren"
);
}
}
class
PersonDemo
{
public
static
void
main(String[] args)
{
Person p =
new
Person();
//结果:person ren
}
}
|
构造函数和一般函数的执行时间
-
构造函数:对象一建立就运行,给对象初始化,一个对象建立,构造函数只执行一次。
-
一般函数:当被调用时才执行。可被对象调用多次。
什么时候定义构造函数?
当分析事物时,该事物本身存在一些特性或者行为,那么将这些内容定义在构造函数中
构造代码块
作用:给对象进行初始化
对象一建立就运行,而且优先于构造函数执行。
构造代码块和构造函数的区别
- 构造代码块是给所有对象进行统一初始化
- 构造函数是给对应的对象初始化
this关键字
this代表它所在函数所属对象的引用。哪个对象在调用this所在的函数,this就代表哪个对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
class
Person
{
private
String name;
private
int
age;
Person(String name)
{
this
.name = name;
//当局部变量名与成员变量名想同时,方法内的变量会优先认为为局部变量。可通过this关键字来定义其变量为对象所属的成员变量。当不存在局部变量与成员变量相同时,可不使用this,但是使用this阅读性更好
}
Person(String name,
int
age)
{
this
(name);
this
.age = age;
}
public
void
speak()
{
System.out.println(
"name="
+
this
.name+
"\tage="
+
this
.age);
}
}
class
PersonDemo
{
public
static
void
main(String[] args)
{
Person p =
new
Person(
"onename"
);
Person p1 =
new
Person(
"twoname"
,
13
);
p.speak();
p1.speak();
}
}
|
this的应用:本来函数中用到本类对象时,使用this关键字引用
this语句,用于构造函数之间互相调用 this(name); 构造函数之间调用只能用this。
this语句只能放在函数的第一行。原因是初始化的动作先执行,再执行赋值的初始化
注意:this语句调用得注意避免出现死循环
---------------------- ASP.Net+Android+IOS开发、 .Net培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net