首先我们来认识一下static关键字表示什么:static关键字表示静态的意思,更加通俗的解释就是static修饰属性或者方法它表示类的属性或者方法,而前面所学的都表示对象的熟悉感或者方法。下面我们将从两个方面来介绍static关键字。
一、static属性
static属性也叫类属性,对于咱们前面所学属性表示对象的属性。它们两者之对于间最本质的区别在于存储空间的位置不同了。对于我们没有被static修饰的属性,它的存放是在堆内存的。而对于被static修饰过的类属性,它的存放实在全局数据区,是所有对象共享的。
下面我们将通过代码解释它们的区别:
//(1):非静态属性
// public class Jintai{
// private int num;
// private String color;
// public static void main(String[] args){
// //在静态方法中调用非静态属性需要通过创建这个非静态属性所在的类的对象来调用
// Jintai t1=new Jintai();
// t1.num=30;
// t1.color="read";
// System.out.println("这是普通属性的值:"+"num="+t1.num+",color="+t1.color);
// }
// }
//(2):静态属性
public class Jintai{
private static int num;
private static String color;
public static void main(String[] args){
//在静态方法中调用静态属性,可以直接写属性名进行访问,也可以写:类名.属性名进行访问
Jintai.num=30; //num=30;
Jintai.color="red";//color="red";
System.out.println("这是普通属性的值:"+"num="+Jintai.num+",color="+Jintai.color);
}
}
从以上的代码段我们可以总结出:
(1)静态属性为了防止出现歧义,所以我们访问静态属性统一采用:类名.属性名。
(2)要访问非静态属性我们需要通过实例化对象,然后通过对象访问属性。
(3)一般static属性用在那种表示公共的属性。
二、static方法(类方法)
从上面静态属性类推我们可以推出静态的都是属于类的,属于类的需要通过类名来访问。
下面我们通过代码来看静态方法和非静态方法的区别:
// //非静态方法:
// public class Jintai{
// private int num;
// private String color;
// public void getJintai(){
// System.out.println("这是非静态方法!");
// }
// public String printJintai(){
// return "num="+this.num+" color="+this.color;
// }
// public static void main(String[] args){
// //在静态方法中调用非静态方法需要通过创建对象来调用。
// Jintai t1=new Jintai();
// t1.getJintai();
// System.out.println(t1.printJintai());
// }
// }
//静态方法:
public class Jintai{
private static int num;
private static String color;
public static void getJintai(){
System.out.println("这是静态方法!");
}
public static String printJintai(){
//在静态方法中访问非静态属性要通过类名访问
return "num="+Jintai.num+" color="+Jintai.color;
}
public static void main(String[] args){
//在静态方法中调用静态方法,直接通过类名访问
Jintai.getJintai();
System.out.println(Jintai.printJintai());
}
}
从上面的静态方法和非静态方法的使用我们可以看到:当一个方法是非静态方法时即为普通方法,要调用这个普通方法我们需要对创建对象来访问非静态方法;当一个方法是静态方法时,可以直接通过类名访问。
注意:对于静态方法和非静态方法访问之间的关系
(1)在静态方法中不可以访问非静态方法和非静态属性,如果要访问都需要创建对应的对象来进行访问。在静态方法中可以访问及港台方法的属性和静态方法的变量,就像访问普通函数一样;
(2)在非静态方法中可以访问非静态的属性和非静态的方法;可以通过类名直接访问静态方法和静态属性;
(3)使用static的目的:有些方法不想受到类的限制,想要不通过创建对象直接调用,这时就用static去修饰它。