关闭

面向对象3

287人阅读 评论(0) 收藏 举报
分类:

类中的属性成为成员变量。

定义在函数中的变量称为局部变量。

成员变量和局部变量的区别?

1,作用范围。

成员变量:定义在类中,作用于整个类。

局部变量:只在它所属的局部大括号中有效。比如函数上的参数,函数中的变量,语句中的变量。

public void function(int x)

{

int y = 0;

for(int z=0; z<3; x++)

{

}

}

x,y,z都是局部变量。

当循环结束时,z在内存中释放。

function函数执行完毕,xy在内存中释放。

2,存储情况。

成员变量:存储在堆内存中,随着对象的存在而存在。

  当对象变成垃圾被回收时,该该对象中的成员变量会消失。

局部变量:存储在栈内存中,当方法被调用,或者语句被执行的时候,才存在。

  当方法运行完毕,或者语句运行完毕时,局部会被自动释放。

所以成员变量也称之为实例(对象)变量.

3,初始化情况。

成员变量:在堆内存中有默认初始化值。

局部变量:必须手动初始化后,才可以被使用。

匿名对象:没有名字的对象。

是定义对象的一种简化形式。

使用注意:

1,当对象对方法进行一次调用的时候,可以使用匿名对象对代码进行简化。

为什么只对方法,而不调用属性呢?因为匿名对象调用属性没意义。

如果对象要多成员进行多次调用,必须给对象起个名字。不能在使用匿名对象。

2,匿名对象可以实际参数进行传递。

当局部变量和成员变量重名时,为了以示区分。

可是用一个关键字完成。this

this:关键字代表是对象的引用。也就是this在指向一个对象。

指向哪个对象呢?

this:就代表所在函数所属对象的引用。

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

private : 是一个权限修饰符。

只能修饰成员(成员变量和成员函数)

私有的成员只在本类中有效。

当成员私有后,提高了安全性。但是访问权限降低了。

这时可以通过对外提供公有方法的形式对其进行访问。

这样的好处是,可以在方法中对成员变量的访问进行控制。

通常将成员变量私有化,并通过对外提供set 和 get方法对其进行设置和获取。

私有就是封装的一种体现形式。

注意:私有仅仅是封装的一种体现形式而已。

类:是对事物的描述。

对象:是该类事物实实在在存在的个体

类:就是一个组对象共性的属性和行为的抽象。

对象:其实就是一个用于封装的实体。

封装的原则:将不该对外提供的,都隐藏起来。提供公共的访问方法。

代码中具体体现原则:将类中的属性都私有化,对外提供公共的访问方式。

      好处:通过方法访问属性,可以实现对数据的可控。

   具体体现:将成员变量私有化,用private修饰。对外提供对应的set 和 get方法对器进行访问。比如age对应两个方法。void setAge(int a);int getAge();

构造函数是初始化对象。是对象建立时调用。

一般函数是给对象添加功能。是对象建立后调用。

为了区分这两个函数的调用。

this.方法();对象调用一般方法。

this.();调用构造方法。而且这个this();调用构造函数时,必须定义在构造函数的第一行,因为初始化动作要先执行。

用这两种调用方法,进行两种函数的区分。

thisthis需要定义在函数中,是蓓蕾对象的引用。那么它到底引用哪个对象呢?哪个对象调用this所在的函数,this就引用哪个对象

this的应用:

1,当定义功能时,功能内部需要用到本类对象时,就用this表示。

2,当成员变量和局部变量同名的时候,用this来区分。

3,当构造函数之间进行调用的时候,可以使用this语句。

要求:

1,看到代码中的this只要表示的是什么。

2,在自己开发可以使用this

任何成员被访问使用,必须要被调用。如果是非静态成员,必须要被对象调用。在本类中调用是使用的是this。如果是静态成员,必须要被类名调用。只不过这两个在书写时,可以省略。静态变量在静态区中也会进行默认初始化。

静态修饰的特点:

static是一个修饰符,用于修饰成员(成员变量和成员函数)

1,静态成员随着类的加载而加载。

2,静态成员优先于对象存在。

3,静态成员被所有对象所共享

4,静态成员多了一种调用方式,可以被类名直接调用。

静态使用的注意事项。

1,静态方法只能访问静态成员。

非静态方法既可以访问静态又可以访问非静态。

2,静态方法中不可以定义thissuper关键字。

因为this代表是对象。而静态存在时,有可能没有对象。所以静态方法运行时,this是没有任何对象代表的。

简单说,先进内存的数据不可以访问后进内存的数据,可是后进内存数据可以访问先进内存的数据。

3,主函数是静态的。

静态:

好处:静态成员多了一种调用方式。可以直接被类名调用 格式 :类名.静态成员。也可以被对象调用。

弊端:静态方法只能访问静态成员,出现了访问局限性。

静态修饰的数据对象共享的数据,存放在方法区的静态区中。

非静态的数据,是每一个对象特有数据。存放在对象的所属的堆内存中。

当成员变量被静态修饰后。和非静态成员变量的区别:

1,静态变量也称为类变量,也就是直接可以被类名调用的变量。这个变量是所属于类的。

   非静态变量成为成员变量,或者实例变量,是被对象调用的,是所属具体对象的。

  

2,静态变量随着类的加载而加载,也意味着随着类的消失而消失。生命周期最长。

   实例变量,随着对象的创建而加载,随着对象的消失而消失。按照对象的生命周期而存在。

3,静态变量存储在方法区的静态区中。

   实例变量存在于对象所属的堆内存中。 

4,静态变量数据,被所有对象所共享。

   实例变量是对象中的特有数据。

什么时候使用static呢?

成员变量:

什么时候被静态修饰呢?

当该成员变量所存储的数据,每一个对象都是一样的,这时没有必要把该数据存储到每一个对象中,

只要让所有对象共享该数据即可,这是成员就需要被static修饰。

当数据需要被对象共享时,就使用static修饰。

这样可以对共享的数据节约内存。

成员函数:

当成员函数内并没有访问对象中的特有数据时,就将该方法定义成静态的。

简单说:该函数如果访问了成员变量,该函数就是非静态的。

该函数没有访问过成员变量,或者访问过静态的成员变量,那么为了程序的严谨性,将该方法定义成静态的。

因为该方法不需要对象存在,既可以使用。

发现虽然这个工具类可以使用。

但是,其中的每一个功能都没有对该类的对象的特有数据进行访问,

那么这些功能,就不需要对象调用。

除了对象调用方式外,还有一个类名调用方式。

所以可以将这些功能都定义成static的。

这个类中的功能都被静态化后,只要使用类名调用即可。

但是其他程序在使用该类时,因为该类中有一个默认的构造函数,

所以其他程序还可以建立该类对象,

而该类并不需要对象就可以使用类中的成员。所以这个对象建立是没有意义的。

为了提高程序的严谨性。应该强制不让其他程序建立该类对象。

当该类中的属性或者行为都是静态的时候,该类创建对象是非常没有意义的。

所以就要强制不让其他程序建立对象,也就是将该类的构造函数私有化。

这样,你即使建立了该类对象,也没有办法初始化。 

静态代码块在程序中的执行顺序:

1,类一加载就执行静态代码块

2,函数的默认初始化,和显示初始化

3,执行构造代码块

4,执行构造函数

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:17604次
    • 积分:562
    • 等级:
    • 排名:千里之外
    • 原创:39篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条
    文章分类