Java学习-static关键字

static,静态的意思,是一个关键字,用于声明静态成员。静态成员是与类关联而不是与类的实例关联的成员。这意味着无论创建多少个类的实例,静态成员只有一份副本。

应用场景:

案例:

Java学习-static关键字_第1张图片

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);

}

}

Java学习-static关键字_第2张图片

解释: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属性互不影响

}

}

Java学习-static关键字_第3张图片

Java学习-static关键字_第4张图片

代码:

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位验证码

Java学习-static关键字_第5张图片

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));

}

}

Java学习-static关键字_第6张图片

Java学习-static关键字_第7张图片

将构造器私有,可以避免创建对象再调用方法所浪费的内存,不创建对象也能完成要求

Java学习-static关键字_第8张图片

Java学习-static关键字_第9张图片

代码:

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("");

//静态代码块只执行了一次

//实例代码块会在构造器之前执行

}

}

运行结果:

Java学习-static关键字_第10张图片

 

Java学习-static关键字_第11张图片

Java学习-static关键字_第12张图片

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);

}

}

  • 单例设计模式
  • 代码块
  • 使用static的注意事项:
  • 类方法的使用场景
  • Java学习-static关键字_第13张图片
  • 类方法和实例方法的使用
  • Java学习-static关键字_第14张图片
  • 类变量和实例变量的执行原理
  • 代码示例:
  • static是什么?

你可能感兴趣的:(java,java)