static:
static表示静态,是java中的一个修饰符,可以修饰成员方法,成员变量
被static修饰的成员变量,叫做静态变量
特点:
1.被该类所有对象共享
2.不属于对象,属于类
3.随着类的加载而加载,优先于对象存在
调用方式:
1.类名调用(推荐)
2.对象名调用
举个例子
创造一个学生类,变量有校长,在一个学校的学生都共用一个校长吧?
所以可以定义校长为static String name;
被static修饰的成员变量,叫做静态变量
特点:
多用在测试类和工具类中
Javabean类中很少会用
调用方式:
类名调用
对象名调用
这里提到了工具类回顾一下三种类
Javabean类:用来描述一类事物的类
测试类:检查其他类是否是写正确,带有main方法的
工具类:不是用来描述一类事物的,而是帮助我们做一些事的
在这里介绍一下方法类
有三个特点:
1.类名见名知意
2.私有化构造方法,(不创造对象,因为只是个方法,之调用其中的方法)
3.方法定义为静态(都可以用)
package pdsu_zjh;
import java.util.StringJoiner;
public class CeShi {
private CeShi() {
// TODO Auto-generated constructor stub
}
public static String printarr(int[] arr) {
StringBuilder sd=new StringBuilder( );
sd.append("[");
for(int i=0;i<arr.length;i++)
{
if(i ==arr.length-1)sd.append(arr[i]);
else sd.append(arr[i]).append(",");
}
sd.append("]");
return sd.toString();
}
}
这是个方法类,可以看到构造方法用private修饰不能创建对象,不过能用方法
这样用
package pdsu_zjh;
import java.util.Random;
public class Youxi {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[]= {1,2,3};
String aString=CeShi.printarr(arr);
System.out.println(aString);
}
}
static注意事项
- 静态方法只能访问静态变量和静态方法
- 非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法
- 静态方法中没有this关键字
- 在创建类的时候随着类的加载而加载的,他会在方法去创建一个空间存储static
解释
静态方法只能访问静态变量和静态方法:
可以看作静态的就是共享的,共享的谁都能用,不过创建的对象的属于私有的,能用共享的,不过共享的不能用私有的。
静态方法中没有this关键字:因为this是指的某个对象的成员变量是私有的,
package pdsu_zjh;
import java.util.StringJoiner;
public class CeShi {
String nameString;//成员变量名字
static String teacherString;//静态变量:老师名字
private CeShi() {//空参构造
// TODO Auto-generated constructor stub
}
public CeShi(String nameString) {//在这里我是自动生成的有参构造,没有teacherString的原因是,静态变量是随着类加载而加载的。比对象先出现
super();
this.nameString = nameString;
}
public void show(/*CeShi this*/) {/*这里括号内有CeShi的原因是系统默认用的就是这个,你如果创造了一个对象C1,那么C1.show();默认就是用的C1的show方法,里面输出的也就是C1的变量,this也是方法调用着的地址所以就相当于有this*/
System.out.println(nameString);//输出的是方法调用者的nameString.
}
public static String printarr(int[] arr) {/*静态方法在里面不能有成员变量因为成员变量是私有的,不过静态方法能调用静态变量*/
StringBuilder sd=new StringBuilder( );
sd.append("[");
for(int i=0;i<arr.length;i++)
{
if(i ==arr.length-1)sd.append(arr[i]);
else sd.append(arr[i]).append(",");
}
sd.append("]");
return sd.toString();
}
}