(08)Java学习笔记——面向对象02——关键字this static

来源:互联网 发布:教学实训软件 编辑:程序博客网 时间:2024/04/30 22:24

this

当成员变量和局部变量重名,可以用关键字this来区分。

this:代表当前对象(本类对象)。(哪个对象调用this所在的函数,this就代表哪个对象)

this必须放在函数里。


class  ConsTest02{public static void main(String[] args) {Person p = new Person();//创建第一个对象,调用相应的初始化构造函数p.speak();Person p1 = new Person("东东");//创建第二个对象,调用相应的初始化构造函数p1.speak();p1.setName("花花");//可以重复调用Person类中一般函数p1.speak();Person p2 = new Person("小黑",3);//创建第三个对象,调用相应的初始化构造函数p2.speak();}}class Person//定义一个描述人属性的类{private String name;//将属性私有private int age;//将属性私有Person ()//提供公共借口方法{name = "baby";age = 1;}Person (String name)//相同的函数名,但是不同的参数类型或者参数个数{this.name = name;//当成员变量与局部变量重名,用this关键字来区分。this代表当前对象。}Person (String name,int age)//相同的函数名,但是不同的参数类型或者参数个数{this.name = name;//当成员变量与局部变量重名,用this关键字来区分。this代表当前对象。this.age = age;}public void setName(String name)//一般方法,可重复调用多次,进行不同的参数赋值{this.name = name;}public void speak()//创建一个函数描述动作{System.out.println(name+"...."+age);}}

构造函数可以调用构造函数。(可以用this来调用构造函数) this();      注意:只能定义在构造函数的第一行,因为初始化动作要先执行。

构造函数可以调用一般方法。

一般方法不能调用构造函数。


————————————————————————————————————

static (静态)关键字 (共享数据,修饰的是多个对象相同的成员变量)

被static修饰的成员能被所有对象共享。成为共享数据。除了可以被对象使用。还可以被类名调用,格式:(类名 静态成员)


static关键字的特点:(可以修饰成员变量,还可以修饰成员方法)

a/ 随着类的加载而加载

b/ 优先于对象存在

c/ 被类的所有对象所共享。(如果某个成员变量(或方法)是被所有对象共享的,那么就定义为静态的

d/ 可以通过类名调用。也可以通过对象名调用。

推荐使用类名调用。静态修饰的内容一般我们成其为:与类相关的,类成员。


static关键字的注意事项:

a/ 在静态方法中没有this关键字。(因为静态随着类的加载而加载,比对象先存在,无法访问后来的对象)

b/ 静态方法只能访问静态的成员变量和静态的成员方法。(非静态既可以访问静态,又可以访问非静态)

c/ 主函数是静态的


范例:

class StaticTest {public static void main(String[] args) {Person p = new Person();System.out.println(p.country);//static修饰的成员,可以被对象调用System.out.println(Person.country);//static修饰的成员,可以被类名调用}}class Person{String name;static String country = "CN";//被static修饰的数据能被所有对象共享}

上面代码中:

String  name; //成员变量,实例变量

static  String  country  =  "CN";  //静态变量


成员变量和静态变量的区别:

1/成员变量属于对象,成员变量随着对象的创建而存在,随着对象的被回收而释放。

静态变量属于类,静态变量随着类的加载而存在,随着类的消失而消失。


2/调用方式不同

成员变量只能被对象调用。

静态变量可以被对象调用,还可以被类名调用。


3/成员变量——实例变量

静态变量——类变量


4/成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。

静态变量数据存储在方法区(共享数据区)的静态区中,所以也叫对象的共享数据。


什么时候使用static静态?

1/静态变量

当分析对象中所具备的成员变量的值都是相同的。这时这个成员就可以被静态修饰。

只要数据在对象中都是不同的,那就是对象的特有数据,必须存储在对象中,是非静态的。

如果是相同的数据,对象不需要做修改,只需要使用,不需要存储在对象中,


2/静态函数

函数是否用静态修饰,就参考一点,就是该函数功能是否有访问到对象中的特有数据。如果访问特有数据,则不能静态。

从源代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是非静态的。

如果不需要,就可以将该功能定义成静态的。


——————————————————————————————————————————————

静态代码块

随着类的加载而加载,并执行,且只执行一次。

用于给类进行初始化。


class  StaticTest01{public static void main(String[] args) {StaticCode.show();//类名.本类方法}}class StaticCode{static int num;static//静态代码块,给类进行初始化{num = 10;}static void show(){System.out.println(num);}}


——————————————————————————————————————————————————

main 主函数

public static void main(String[ ] args)

主函数格式是固定的,被jvm所识别和调用。


public  权限必须是最大的。

static    虚拟机调用主函数时不需要对象。直接用主函数所属类名调用即可。

void     主函数没有具体的返回值。

main   函数名,不是关键字。一个jvm识别的固定名字。

String[ ] args   主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型。










0 0
原创粉丝点击