您的位置:首页 > 职场人生

黑马程序员-面向对象三大特性之封装

2015-05-29 18:03 330 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
第一讲
封装

一、封装的概念:
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。(private只是封装的一种表现形式)

二、封装的好处:
1)将变化隔离;
2)便于使用;
3)提高复用性;
4)提高安全性。

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

package com.shengsiyuan;

class Pig
{
//封装age变量
private int age;
//定义一个方法来设置age值
public void setAge(int a)
{
if(a>0 && a<9)
{
age = a;
grow();
}
else
System.out.println("输入的年龄有误");
}
//获取age值
public int getAge()
{
return age;
}
void grow()
{
System.out.println("age="+age);
}
}
public class Demo
{
public static void main(String[] args)
{
Pig p = new Pig();
p.setAge(7);
}
}


补充:构造函数

1) 特点:

a) 构造函数名字必须和类名完全相同;

b)不能有返回值,注意不要写void,也不能写return 语句;

c)不能被子类继承;

d)可以重载但不能被子类所覆盖。

2)作用: 给对象进行初始化。

3)构造函数的小细节: 当一个类中没有定义构造函数时,那么系统就会默认给该类加入一个空参数的构造函数。当在类中自定义了构造函数后,默认的构造函数就没有了。

4)构造函数和一般函数在写法上有不同。

在运行上也有不同: 构造函数式在对象一建立就运行,给对象初始化;而一般方法是对象调用才执行,给是对象添加对象具备的功能。一个对象建立,构造函数只运行一次;而一般方法可以被该对象调用多次。

5)什么时候定义构造函数?

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

6)构造代码块

作用:给对象进行初始化。对象一建立就运行,而且优先于构造函数运行。

和构造函数的区别: 构造代码块是给所有对象进行初始化; 而构造函数是给对应的对象初始化。

构造代码块中定义的是不同对象共性的初始化内容。

补充:this关键字

this代表本类对象,即它所在函数所属对象的引用。

this的应用: 当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。只要是本类功能内部使用到了本类对象,都用this表示。

this语句: 用于构造函数之间进行互相调用。如:this(name);

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

实例:

package com.shengsiyuan;

class Person1
{
private int age;
private String name;
Person1(int age)
{
this.age = age;	//this表示调用构造方法的对象
}
Person1(String name)
{
this.name = name;
}
Person1(String name,int age)
{
this.name = name;
this.age = age;
}
public void speak()
{
System.out.println("name="+name+",age="+age);
show();
}
public void show()
{
System.out.println(this.name);
}
}
public class Demo
{
public static void main(String[] args)
{
Person1 p = new Person1("lisi");
Person1 p1 = new Person1("wangwu",20);
p.speak();
p1.speak();
}
}


结果:



补充:static关键字

用于修饰成员变量和成员方法。当成员被static修饰后,出了可以被对象调用外还可以直接被类名调用。类名.静态成员。

static特点:

1、随着类的加载而加载,随着类的消失而消失。

2、优先于对象存在。

3、被所有对象所共享。

4、可以直接被类名所调用。

实例变量和类变量的区别:

1、存放位置:

类变量随着累的加载而存在于方法区。

实例变量随着对象的建立而存在于堆内存中。

2、生命周期:

类变量生命周期最长,随着类的消失而消失。

实例变量生命周期随着对象的小时而消失。

静态的利弊:

利:对对象的共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存一份,可以直接被类名调用。

弊:生命周期过长。访问出现局限性(静态只能访问静态)。

注意:静态方法只能访问静态成员;非静态方法既可以访问静态也可以访问非静态。

静态方法中不可以写super,this关键字;因为静态优先于对象存在。

主函数数静态的。

问题:

1、什么使用静态?

从两方面下手: 因为静态修饰的内容有成员变量和函数。

2、什么时候定义静态变量(类变量)呢?

当对象中出现共享数据时,该数据被静态所修饰。

对象中的特有数据要定义成非静态存在于堆内存中。

3、什么时候定义静态函数呢?

当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。

静态代码块:

格式:

static

{

静态代码块中的语句。

}

特点:随着类的加载而执行,执行一次。并优先于主函数。用于给类进行初始化。

对象的初始化过程:

1、把类名.class文件加载到内存中。

2、执行该类中的static代码块,如果有得话,给该类进行初始化。

3、在堆内存中开辟空间,分配内存地址。给对象

4、在堆内存中建立对象的特有属性。并进行默认初始化。

5、对属性进行显示初始化。

6、对对象进行构造代码块初始化。

7、对对象进行对应构造函数初始化。

8、将内存地址赋给栈内存中的对象名变量。

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: