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

黑马程序员_面向对象_封装

2014-04-29 20:30 127 查看
----------- android培训java培训、期待与您交流!------------

1、类与对象之间的关系:
类:是对事物的描述。 就是将对象中共性的内容 不断抽取出来的一个抽象描述。
对象:是该类事物具体的实体
new 对象new的是字节码文件对象,在源代码可以没有person类,但是必须有person类的字节码文件
实际使用的是person的字节码文件装载进内存并用他产生了一个堆内存实体

对象生命周期的开始
对象生命周期开始时,需要为对象分配内存(在内存运行时数据区的堆区中为对象分配内存),并且初始化它的实例变量;

对象生命周期结束
Java虚拟机的垃圾回收线程回收对象的内存,一般只要Java程序中没有变量引用某个对象,该对象的生命周期结束,因此可以通过控制变量的生命周期来控制对象的生命周期。

所谓的面向对象就是说:看到实体,对实体进行描述,创建实体对象,使用实体。

2、匿名对象
show(new Person());//匿名对象,可以作为实际参数进行传递。
匿名对象另一个使用:当对对象的方法仅进行一次调用的时候,可以简化成匿名对象完成。

3、封装
通常将类中的成员变量私有化。对外提供方法对其进行访问。提供的目的是对成员数据进行控制,
让其具备可控性。
定义setXXX getXXX方法对成员变量进行访问。
注意:私有仅仅是封装的表现形式之一。任何一种形式,只要隐藏细节,对外暴露访问方式,这些都称之为封装
私有只能修饰成员。私有就是不能直接访问

4、构造函数
在对象创建时就被调用了。
作用:对对象进行初始化。
如果一个类中没有定义过构造函数。编译器在编译时,就给该类添加一个默认的构造函数。
一旦在类中明确了自定义的构造时,该默认构造函数就没有了。
当一个类中有多个构造函数时,它们是以重载形式体现的。

类中的默认构造函数是带权限的,权限和类是一致的

不同包中如果父类没有写任何权限是默认的话,子类也访问不到

任何一个对象无论是数据还是行为,只要是一初始化存在的时候就具备的话,就把代码都定义在构造函数中

如果构造器中的参数过多,在调用时有可能造成参数传递错误,参数颠倒等错误。

这时候可以使用无参构造器创建对象,用JavaBean中的set/get方法设置参数。

第三种模式,builder模式

public class NutritionFacts {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;

public static class Builder {
// Required parameters
private final int servingSize;
private final int servings;

// Optional parameters - initialized to default values
private int calories = 0;
private int fat = 0;
private int carbohydrate = 0;
private int sodium = 0;

public Builder(int servingSize, int servings) {
this.servingSize = servingSize;
this.servings = servings;
}

public Builder calories(int val)
{ calories = val; return this; }
public Builder fat(int val)
{ fat = val; return this; }
public Builder carbohydrate(int val)
{ carbohydrate = val; return this; }
public Builder sodium(int val)
{ sodium = val; return this; }

public NutritionFacts build() {
return new NutritionFacts(this);
}
}

private NutritionFacts(Builder builder) {
servingSize = builder.servingSize;
servings = builder.servings;
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}

public static void main(String[] args) {

4000
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).
calories(100).sodium(35).carbohydrate(27).build();
}
}

构造函数和一般函数的区别?
构造函数用于给对象初始化。初始化动作只执行一次。
而一般函数可以被执行多次。

5、 成员变量和局部变量的区别:
1, 定义的位置。
局部变量定义在函数中,语句内。
成员变量定义在类中。
2, 内存中的位置。
局部变量存储在栈内存中。
成员变量存储在堆内存中。
3, 初始化值。
局部变量没有默认初始化值,必须赋值才可以使用。
成员变量有默认初始化值。
4, 生命周期。
局部变量一旦作用区域结束,就立刻释放。
成员变量也称为实例(对象)变量,随着对象的出现而出现。随着对象的被回收而释放。

6、this的使用
this:代表的是对象。其实就一个对象的引用。
它代表哪个对象呢?
哪个对象调用了this所在的函数,this就代表哪个对象。

this:代表的是本类型对象的的引用。

static方法中不可以书写this。因为static先加载优先于对象。 

this的使用之一:当成员变量和局部变量同名时,可以用this来区分。
this的使用之二:使用this(参数列表)的方式就可以实现构造函数之间的调用。
注意:构造函数之间调用时,this语句只能定义在构造函数的第一行。因为初始化动作必须先执行。
当功能内部使用到了本类对象时,用this表示。

所有对象成员要被使用,必须先有成员,所有成员要运行,前面必须跟对象,当对象不明确的时候,前面要加this.
一般方法的运行都是通过对象.调用的形式来完成的

class Person
{
private int age;
Person(int age)
{
this.age = age;
}
/*
定义一个功能。用于比较。两个人是否是同龄人。
明确1:结果:boolean
明确2:参数: 一个,Person
当功能内部使用到了本类对象时,用this表示。
*/
public boolean compare(Person p)
{
return this.age == p.age;
}
}
class ThisDemo
{
public static void main(String[] args)
{
System.out.println("Hello World!");
Person p1 = new Person(23);
Person p2 = new Person(35);
p1.compare(p2);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: