static,静态的意思,是一个关键字,用于声明静态成员。静态成员是与类关联而不是与类的实例关联的成员。这意味着无论创建多少个类的实例,静态成员只有一份副本。
应用场景:
案例:
packagejavaopp_d1demo;
publicclassTeacher{
publicstaticintnum;
publicTeacher(){
num++;//每new一个Teacher对象,num++;省略了Teacher.
}
}
text类:
packagejavaopp_d1demo;
publicclassText{
publicstaticvoidmain(String[]args){
Teachert1=newTeacher();
Teachert2=newTeacher();
System.out.println(Teacher.num);
}
}
解释:a.类变量:该类中所有成员都共享的,在内存中只有一份,用于表示该类中所有成员只需
要一个的成员变量
b.实例变量:该类中的每一的对象都有一个,用于储存每个对象的不同特点,比如age,score等
packagejavaopp_d1demo;
publicclassStudent{
//创建一个类变量
publicstaticStringname;
//创建实例变量
intage;
}
packagejavaopp_d1demo;
publicclassText{
publicstaticvoidmain(String[]args){
Students1=newStudent();
Students2=newStudent();
//类变量的访问:类名.类变量(推荐)
//对象.类变量(不推荐)
Student.name="李华";
s1.name="李浩";
System.out.println(s2.name);//打印出来的是李浩。因为类变量只有一份
System.out.println(Student.name);
//实例变量的访问只可以用对象。实例变量
s1.age=24;
s2.age=20;
System.out.println(s1.age);
System.out.println(s2.age);//两个对象的age属性互不影响
}
}
代码:
publicclassStudent{
//新建一个类方法
publicstaticvoidprintHello(){
System.out.println("helloWorld");
System.out.println("helloWorld");
}
//新建一个实例方法
publicvoidprintHello1(){
System.out.println("hello1");
}
}
packagejava_opp_d2demo;
publicclasstext{
publicstaticvoidmain(String[]args){
Students1=newStudent();
//类方法的使用可以类名.类方法;也可以对象.类方法
Student.printHello();
s1.printHello();//语法不报错,但是不推荐
//实例方法的使用对象.实例方法
s1.printHello1();
}
}
案例:生成n位验证码
importjava.util.Random;
publicclasscreateCode{
publicstaticStringcode(intn){
Stringdate="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
Stringcodes="";
Randomr=newRandom();
for(inti=0;i
charch=date.charAt(r.nextInt(62));
codes+=ch;
}
returncodes;
}
}
packagejava_opp_d3demo;
publicclasstext{
publicstaticvoidmain(String[]args){
System.out.println(createCode.code(5));
}
}
将构造器私有,可以避免创建对象再调用方法所浪费的内存,不创建对象也能完成要求
代码:
packagejava_opp_d4demo;
publicclassstudent{
//创建静态代码块
static{
System.out.println("静态代码块执行了~~");
}
//创建实例代码块
{
System.out.println("实例代码块执行了~~");
}
publicstudent(){
System.out.println("无参构造器执行了");
}
publicstudent(Stringname){
System.out.println("有参构造器执行了");
}
}
packagejava_opp_d4demo;
publicclasstext1{
publicstaticvoidmain(String[]args){
students1=newstudent();
students2=newstudent("");
//静态代码块只执行了一次
//实例代码块会在构造器之前执行
}
}
运行结果:
1.饿汉单例设计模式(对象提前创建好)
代码:
publicclassA{
//2.定义类变量记录类的一个对象
privatestaticAa=newA();
//1.将类的构造器私有
privateA(){
}
//3.定义一个类方法,返回对象
publicstaticAgetOb(){
returna;
}
}
2.懒汉单例设计模式(用的时候才创建)
packagejavaSingleEx;
publicclassB{
//2.定义类变量记录类的一个对象
privatestaticBb;
//1.将类的构造器私有
privateB(){
}
//3.定义一个类方法,返回对象
publicstaticBgetOb(){
if(b==null){
b=newB();
}
returnb;
}
}
text类
packagejavaSingleEx;
publicclasstext{
publicstaticvoidmain(String[]args){
//Aa=newA();会报错因为私有了构造器,不允许再创建新对象
//A类中只有一个对象
Aa1=A.getOb();
Aa2=A.getOb();
System.out.println(a1==a2);//判断a1a2地址是否相同(指向同一个对象)
Bb1=B.getOb();
Bb2=B.getOb();
System.out.println(b1==b2);
}
}