JAVA面向对象之静态

面向对象最核心的套路是:设计对象来处理数据,解决问题!!!

静态

静态在面向对象编程中是很常见的关键字"static".,可以用来修饰成员变量,也可以修饰成员方法

1.1 static修饰成员变量

Java中的成员变量按照有无static修饰,分为两种:类变量、实例变量

由于静态变量是属于类的,只需要通过类名就可以调用:类名.静态变量

实例变量是属于对象的,需要通过对象才能调用:对象.实例变量

类变量:属于类,在内存中只有一份,用类名调用

实例变量:属于对象,每一个对象都有一份,用对象调用

1.2 static修饰成员方法

成员方法根据有无static也分为两类:类方法、实例方法

有static修饰的方法,是属于类的,称为类方法;调用时直接用类名调用即可。

无static修饰的方法,是属于对象的,称为实例方法;调用时,需要使用对象调用。

public class Test {
    public static void main(String[] args) {
        //创建两个对象
        //通过类名.访问成员变量,没有创建
        System.out.println(Users.count);

        //通过类名. 访问成员变量,创建1个
        Users users = new Users("张三");
        System.out.println(users.count);

        //通过类名. 访问成员变量,创建2个
        Users users1 = new Users("李四");
        System.out.println(users.count);

        //创建对象名,访问实例变量对象变量
        System.out.println(users.username);
        System.out.println(users1.username);
    }
}

public class Users {
    public String username;  //实例对象

    public static int count;  //类变量

    public Users(String username){
        this.username = username;
        count ++;
    }

}

1.3 工具类

如果一个类中的方法全都是静态的,那么这个类中的方法就全都可以被类名直接调用,由于调用起来非常方便,就像一个工具一下,所以把这样的类就叫做工具类。

  • 写一个生成验证码的工具类

public class MyUtils{
    public static String createCode(int n){
        //1.定义一个字符串,用来记录产生的验证码
        String code = "";
        
        //2.验证码是由所有的大写字母、小写字母或者数字字符组成
        //这里先把所有的字符写成一个字符串,一会从字符串中随机找字符
        String data = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKMNOPQRSTUVWXYZ";
        
        //3.循环n次,产生n个索引,再通过索引获取字符
        Random r = new Random();
        for(int i=0; i<n; i++){
            int index = r.nextInt(data.length());
            char ch = data.charAt(index);
            //4.把获取到的字符,拼接到code验证码字符串上。
            code+=ch;
        }
        
        //最后返回code,code的值就是验证码
        return code;
    }
}
  • 接着可以在任何位置调用MyUtilscreateCOde()方法产生任意个数的验证码

//比如这是一个登录界面
public class LoginDemo{
    public static void main(String[] args){
        System.out.println(MyUtils.createCode());
    }
}
//比如这是一个注册界面
public class registerDemo{
    public static void main(String[] args){
        System.out.println(MyUtils.createCode());
    }
}

在补充一点,工具类里的方法全都是静态的,推荐用类名调用为了防止使用者用对象调用。我们可以把工具类的构造方法私有化。

public class MyUtils{
    //私有化构造方法:这样别人就不能使用构造方法new对象了
    private MyUtils(){
        
    }
    
    //类方法
    public static String createCode(int n){
       ...
    }
}

static应用(代码块)

代码块根据有无static修饰分为两种:静态代码块、实例代码块

静态代码块

关于静态代码块重点注意:静态代码块,随着类的加载而执行,而且只执行一次。

public class Test2 {
    private static int count;
    static String school = "黑马";

    //静态代码块:加载时执行,只执行一次,用于类变量的初始化
    static {
        count++;
        school = "大头";
    }

    public static void main(String[] args) {
        System.out.println(count); //1
        System.out.println(school); //大头
    }
}

实例代码块

public class Test {
    //实例变量
    int age;
    //实例代码块:执行在每一个构造方法之前
    {
        System.out.println("实例代码执行");
        age = 18;
        System.out.println("创建了对象" + this);
    }

    public Test(){
        System.out.println("无参数构造器执行");
    }

    public Test(String name){
        System.out.println("有参数构造器执行");
    }

    public static void main(String[] args) {
       Test t1 = new Test();
       Test t2 = new Test("张三");
        System.out.println(t1.age+"t1");
        System.out.println(t2.age+"t2");
    }
}
//实例代码执行
//创建了对象demo01_static_block.Test@6d311334
//无参数构造器执行
//实例代码执行
//创建了对象demo01_static_block.Test@682a0b20
//有参数构造器执行
//18t1
//18t2

对于实例代码块重点注意:实例代码块每次创建对象之前都会执行一次

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值