面向对象高级——static

static

 类变量的应用场景

    

public class Test2 {
    public static void main(String[] args) {
        User u1 = new User();
        User u2 = new User();
        User u3 = new User();
        User u4 = new User();

        System.out.println(User.number);
    }
}

public class User {
    //类变量
      public  static  int number;

    public User() {
         // User.number++;
        //注意:在同一个类中,访问自己类的类变量,才可以省略类名不写
           number++;
    }
}

 static修饰成员的方法

      

public class Student {
     double score;
      public  static void  printHelloWord()
      {
          //类方法
          System.out.println("Hello World");
          System.out.println("Hello World");
      }
        //实例方法(对象的方法)
         public  void  printPass()
         {
             System.out.println("成绩,"+
                     ( score >= 60 ?"及格":"不及格"));
         }
}

public class Test {
    public static void main(String[] args) {
        //类方法的用法
          //类名.类方法
         Student .printHelloWord();
         //对象.类方法 不推荐
        Student s = new Student();
        s.printHelloWord();

        //2,实例方法的用法(只能用对象用)
          s.printPass();

    }
}

static修饰成员变量的应用场景

public class MyUtil {


       private  MyUtil()
       {//将工具类构造器私有

       }

        public  static  String  creatCode( int n)
        {  //2,定义2个变量一个是记住最终产生的随机验证码,一个是记住可能用到的全部字符
            String code ="";
            String data="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

            Random r=  new Random();
            //3,定义一个循环产生每位随机字符
            for (int i = 0; i <n ; i++) {
                //4,随机一个字符范围内的索引
                int indix= r.nextInt(data.length());
                //根据索引去全部字符提取该字符
                code +=data.charAt(indix);
            }
            //6,再循环外面返回code
            return code;
        }
    }

public class LoginDemo {
    public static void main(String[] args) {
        System.out.println(MyUtil.creatCode(4));
    }
}

static的注意事项 

 

3,关于this,this是指拿到当前对象。类方法中无对象所以不能使用。 

static的应用知识

代码块

静态代码块 与实例代码块

先执行静态代码块 

public class Student {
            static  int number =80;
            static String schoolName;
         //静态代码块
          static {
             System.out.println("静态代码块执行了————");
             schoolName = "黑马";

          }

          //实例代码块
          {
              System.out.println("实例代码块执行了---");
          }

            public Student() {
                System.out.println("无参数构造器---");
            }
            public  Student (String name )
            {
                System.out.println("有参数构造器----");
            }
}
public class Test {
    public static void main(String[] args) {
        System.out.println(Student.number);
        System.out.println(Student.number);
        System.out.println(Student.number);

        System.out.println(Student.schoolName);//黑马
        System.out.println("-------------------------");

        Student s1 =new Student();
        Student s2 =new Student("张三");


    }

单例设计模式 

public class A {
    //单例类
      //2,定义一个类变量记住类的一个对象
    private static A a = new A();


    //1,必须私有类的构造器
    private A() {
    }

    //3.定义一个类方法返回类的对象
    public  static A getObject()
    {
        return  a;
    }
}

 

 

public class A {
    //单例类
      //2,定义一个类变量记住类的一个对象
    private static A a;


    //1,必须私有类的构造器
    private A() {
    }

    //3.定义一个类方法,这个方法要保证第一次调用的时候才创建一个对象,后面调用时都会用这同一个对象返回
    public  static A getInstance()
    {
        if(a==null)
        {
            a= new A();

        }
        return a;
    }
}
public class Test1 {
    public static void main(String[] args) {
            A a1 =A.getInstance();//第一拿对象
            A a2= A.getInstance();
        System.out.println(a1 == a2);

    }
}

注:经常用单例对象就用 单例,不经常就用懒汉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值