static
- static关键字
方法与成员变量类似,也分为实例方法和类方法(又称静态方法)。带有static修饰符的方法称为类方法,不加static修饰符的方法称为实例方法。
实例方法时属于某个对象的方法,即每个对象的实例方法都有自己专用的内存空间。类方法时属于整个类的,他被该类的所有对象共享。
package Controller;
public class StaticDome {
private int x;
private static int y;
public static void setXY1(int newX,int newY){
//x = newX; //非法的,类方法只能访问类变量
y = newY; //合法的
// this.x=newX //非法的static方法中不能使用this关键字和super关键字
// 类方法只能访问类变量,不能访问实例变量,类方法在实例之前创造
};
public void setXY2(int newX,int newY){
x=newX;//合法
y=newY;//合法
};
public static void main(String[] args) {
StaticDome t1=new StaticDome();
StaticDome.setXY1(10,20);//合法
// StaticDome.setXY2(10,20);/非法,不能直接引用类的实例方法
t1.setXY1(10,20);
t1.setXY2(10,20);
}
}
通过上述方法我们可以得出如下结论:
- 类方法只能访问类变量,不能访问实例变量,而实例方法既可以访问类变量,也可以访问实例变量
- 可以直接通过类名调用类方法,而不能调用实例方法,而通过对象既可以调用类方法也可以调用实例方法。
this
- this关键字
可以看出this关键字不能出现在static定义的类方法中。Static方法是类方法,先于任何的实例(对象)存在。即Static方法在类加载时就已经存在了,但是对象是在创建时才在内存中生成。
而this指代的是当前的对象,在方法中定义使用的this关键字,它的值是当前对象的引用。也就是说你只能用它来调用属于当前对象的方法,或者使用this处理方法中成员变量和局部变量重名的情况.,而且,更为重要的是this和super都无法出现在static修饰的方法中。static修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象。如果使用的是类来调用而不是对象,则this就无法指向合适的对象.所以static修饰的方法中不能使用this。
构造方法
3.构造方法
定义:就是类构造对象时调用的方法,主要用来实例化对象。构造方法分为无参构造方法、有参构造方法。
概念:构方法是一种特殊的“成员方法”
1,构造方法作用:(1)构造出来一个类的实例 (2)对构造出来个一个类的实例(对象)初始化
2,构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有
3,主要完成对象的初始化工作,构造方法的调用是在创建一个对象时使用new操作进行的
4,类中必定有构造方法,若不写,系统自动添加无参构造方法。接口不允许被实例化,所以接口中没有构造方法
5,不能被static、final、synchronized、abstract和native修饰
6,构造方法在初始化对象时自动执行,一般不能显式地直接调用.
当同一个类存在多个构造方法时,java编译系统会自动按照初始化时最后面括号的参数个数以及参数类型来自动一一对应
完成构造函数的调用]
7,构造方法可以被重载。没有参数的构造方法称为默认构造方法,与一般的方法一样,构造方法可以进行任何活动
但是经常将他设计为进行各种初始化活动,比如初始化对象的属性
8,构造代码块:
(1)作用:给对象进行初始化,对象一建立就执行,而且优先于构造函数执行
(2)构造代码块和构造函数的区别:
构造代码块是给所有不同对象的共性进行统一初始化,构造函数是给对应的对象进行初始化
9,自定义类中,如果不写构造方法,java系统会默认添加一个无参的构造方法。
如果写了一个有参的构造方法,就一定要写无参构造方法。一般情况下,我们自定义的类都要手动给出无参构造方法。
constructor;构造函数。
构造方法需要注意
构造方法的方法名必须与类名一样。
构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
构造方法不能作用是完成对象的初始化工作,他能够把定义对象时的参数传递给对象的域。
构造方法不能由编程人员调用,而要系统调用。
构造方法可以重载,以参数的个数,类型,或排序顺序区分。