类中的属性成为成员变量。
定义在函数中的变量称为局部变量。
成员变量和局部变量的区别?
1,作用范围。
成员变量:定义在类中,作用于整个类。
局部变量:只在它所属的局部大括号中有效。比如函数上的参数,函数中的变量,语句中的变量。
public void function(int x)
{
int y = 0;
for(int z=0; z<3; x++)
{
}
}
x,y,z都是局部变量。
当循环结束时,z在内存中释放。
当function函数执行完毕,x和y在内存中释放。
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();调用构造函数时,必须定义在构造函数的第一行,因为初始化动作要先执行。
用这两种调用方法,进行两种函数的区分。
this:this需要定义在函数中,是蓓蕾对象的引用。那么它到底引用哪个对象呢?哪个对象调用this所在的函数,this就引用哪个对象
this的应用:
1,当定义功能时,功能内部需要用到本类对象时,就用this表示。
2,当成员变量和局部变量同名的时候,用this来区分。
3,当构造函数之间进行调用的时候,可以使用this语句。
要求:
1,看到代码中的this只要表示的是什么。
2,在自己开发可以使用this。
任何成员被访问使用,必须要被调用。如果是非静态成员,必须要被对象调用。在本类中调用是使用的是this。如果是静态成员,必须要被类名调用。只不过这两个在书写时,可以省略。静态变量在静态区中也会进行默认初始化。
静态修饰的特点:
static是一个修饰符,用于修饰成员(成员变量和成员函数)。
1,静态成员随着类的加载而加载。
2,静态成员优先于对象存在。
3,静态成员被所有对象所共享
4,静态成员多了一种调用方式,可以被类名直接调用。
静态使用的注意事项。
1,静态方法只能访问静态成员。
非静态方法既可以访问静态又可以访问非静态。
2,静态方法中不可以定义this,super关键字。
因为this代表是对象。而静态存在时,有可能没有对象。所以静态方法运行时,this是没有任何对象代表的。
简单说,先进内存的数据不可以访问后进内存的数据,可是后进内存数据可以访问先进内存的数据。
3,主函数是静态的。
静态:
好处:静态成员多了一种调用方式。可以直接被类名调用 格式 :类名.静态成员。也可以被对象调用。
弊端:静态方法只能访问静态成员,出现了访问局限性。
静态修饰的数据对象共享的数据,存放在方法区的静态区中。
非静态的数据,是每一个对象特有数据。存放在对象的所属的堆内存中。
当成员变量被静态修饰后。和非静态成员变量的区别:
1,静态变量也称为类变量,也就是直接可以被类名调用的变量。这个变量是所属于类的。
非静态变量成为成员变量,或者实例变量,是被对象调用的,是所属具体对象的。
2,静态变量随着类的加载而加载,也意味着随着类的消失而消失。生命周期最长。
实例变量,随着对象的创建而加载,随着对象的消失而消失。按照对象的生命周期而存在。
3,静态变量存储在方法区的静态区中。
实例变量存在于对象所属的堆内存中。
4,静态变量数据,被所有对象所共享。
实例变量是对象中的特有数据。
什么时候使用static呢?
成员变量:
什么时候被静态修饰呢?
当该成员变量所存储的数据,每一个对象都是一样的,这时没有必要把该数据存储到每一个对象中,
只要让所有对象共享该数据即可,这是成员就需要被static修饰。
当数据需要被对象共享时,就使用static修饰。
这样可以对共享的数据节约内存。
成员函数:
当成员函数内并没有访问对象中的特有数据时,就将该方法定义成静态的。
简单说:该函数如果访问了成员变量,该函数就是非静态的。
该函数没有访问过成员变量,或者访问过静态的成员变量,那么为了程序的严谨性,将该方法定义成静态的。
因为该方法不需要对象存在,既可以使用。
发现虽然这个工具类可以使用。
但是,其中的每一个功能都没有对该类的对象的特有数据进行访问,
那么这些功能,就不需要对象调用。
除了对象调用方式外,还有一个类名调用方式。
所以可以将这些功能都定义成static的。
这个类中的功能都被静态化后,只要使用类名调用即可。
但是其他程序在使用该类时,因为该类中有一个默认的构造函数,
所以其他程序还可以建立该类对象,
而该类并不需要对象就可以使用类中的成员。所以这个对象建立是没有意义的。
为了提高程序的严谨性。应该强制不让其他程序建立该类对象。
当该类中的属性或者行为都是静态的时候,该类创建对象是非常没有意义的。
所以就要强制不让其他程序建立对象,也就是将该类的构造函数私有化。
这样,你即使建立了该类对象,也没有办法初始化。
静态代码块在程序中的执行顺序:
1,类一加载就执行静态代码块
2,函数的默认初始化,和显示初始化
3,执行构造代码块
4,执行构造函数