java关于方法的几个知识点

来源:互联网 发布:js div背景颜色 编辑:程序博客网 时间:2024/05/22 03:14

java创建方法的注意事项:
1.方法的局部变量的名字如果和成员变量相同,那么这个方法就隐藏了成员变量。例如

class tom{    int x = 10,y;    void fangfa(){        x = 5;        y = x + this.x;    }}

此时,y得到的应该是15,this.x指代的是成员变量的x。
2.成员变量有默认值0,然而局部变量是没有默认值0,如果局部变量没有定义,那么将会报错,例如:

class init{    int x;    void(){    int y;    x = y + x;    }}

此时,该方法是会报错的。
3.队成员变量的操作只能在方法中进行,不能在类中进行,例如:

class A{    int a = 0;    int b = 5; }

此时是合法的。

class A{    int a;    int b;    a = 0;    b= 7;}

此时是非法的,必须要写一个方法,在里面可以对a,b进行数据的赋值;

下面介绍构造方法;
构造方法是一个类中的一种比较特殊的方法,当程序用类创建对象时需要使用它的构造方法。可以是一个,也可以是多个。如果类中没有写构造方法,那么系统会默认该类只有一个构造方法,并且该构造方法是无参数的,没有语句,即一个空的构造方法需要声明的是,构造方法名字必须与它所在类的名字完全相同,并且没有类型,那么什么是类型呢?比如说int,void,float之类,下面举个例子吧:

class A{    A(){    int a = 0;    }    A(int x){    int a = 0;    }       int A(){    int a = 0;    }    int A(int x){    int a = 0;    }}

这四个方法中,A()和A(int x)这两个方法是构造方法,而int A()和int A(int x)这两个方法不是构造方法。
下面介绍关于 实例变量和类变量、类方法和实例方法

类体中包括成员变量和局部变量,而成员变量又可以细分为实例变量和类变量,在声明成员变量的时候,用static给予修饰的称作类变量,否则称作实例变量。(类变量也称为static变量,静态变量)
那么,类变量和实例变量有什么区别呢?
我们知道,一个类通过使用new运算符可以创建多个不同的对象,这些对象将被分配不同的成员变量,说的更精确写就是:分配给不通对象实例变量咱有不同的内存空间,改变其中一个对象的实例变量不会影响其他对象的实例变量。
然而,如果类中有类变量,当使用new运算符创建多个不同的对象时,分配给这些对象的这个类变量占有相同的一出内存,改变其中一个对象的这个类变量,那么将会影响到其他对于下部分的这个类变量,也就算说不同的对象共享类变量。
既然这样,那么我要要怎么访问类变量呢?
不仅仅可以通过某个对象访问,也可以直接通过类名访问。而实例变量不同,只能用某个对象访问。
对象调用实例方法
当类的字节码文件被加载到内存是,类的实例方法不会被分配到入口地址,只有该类创建对象后,类中的实例方法才分配入口地址。从而实例方法可以被创建的任何对象调用执行。这里需要注意的是,当我们创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址。也就是说,方法的入口地址被所有的对象共享,当所有的对象不存在时,方法的入口地址才会被取消。
实例方法中不仅可以操作实例变量,也可以操作类变量,当对象调用实例方法时,该方法中出现的实例变量就是分配给该对象的实例变量,该方法中出现的类变量也是分配给该对象的变量,只不过这个变量和所有其他的对象共享而已。
类名调用类方法
对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址,从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用,类方法的入口地址知道程序退出了才会被取消。需要注意的是实例方法不能通过类名调用,只能由对象调用。
和实例方法不同的是,类方法不可以操作实例变量,这是因为在类创建对象之前,实例成员变量还没有分配内存。
关于设计类方法的原则
对于static方法,不必创建对象就可以用类名直接调用它(创建对象会导致类中的实例变量被分配到内存空间中)。如果一个方法不需要操作类中的任何实例变量,就可以满足程序的需要的话,就可以考虑将这样的方法设计为一个static方法。

关于this关键字

this是Java的一个关键字,表示某个对象。this可以出先在实例方法和构造方法中。但是不可以出现在类方法中。(跟内存有关)
This关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。
举个例子:
在实例方法中使用this

class A(){    int x;    static int y;    void f(){        this.x = 100;        A.y = 200;      } }

这个例子中,A类中是实例方法中f出现了this,This就代表使用f当前对象。所以“This.x”就表示当前对象的变量x,当对象调用f方法时,将100赋值给该对象的实例成员变量x。

1 0
原创粉丝点击