首页 > 其他分享 >mt_Day5:static与继承

mt_Day5:static与继承

时间:2023-01-20 23:33:54浏览次数:43  
标签:String 子类 Day5 mt static 父类 public name

static静态关键字

1.static成员变量

  • static + 成员变量:该变量在内存中只存储一份,可以被共享访问、修改
  • 静态成员变量的访问
public class User {
    /**
     * 例子:在线人数定义为静态成员变量
     */
    public static int onlineNumber=50;
    
    //实例成员变量
    private String name;
    private int age;
}
public class staticFieldDemo1 {
    public static void main(String[] args) {
        //1.用类名访问静态成员变量,推荐
        //User.onlineNumber
        System.out.println(User.onlineNumber);

        //2.用对象访问静态成员变量,不推荐
        User u=new User();
        System.out.println(u.onlineNumber);
    }
}

2.static成员变量的内存

存在堆内存

3.成员方法分类

  • 静态成员方法(无static修饰,归属于类),建议类名访问,也可以用对象访问
  • 实例成员方法(有static修饰,归属于对象),只能用对象触发访问

4.static成员方法内存

存在方法区

5.static访问注意事项

  • 静态方法只能访问静态成员,不能直接访问实例成员(可以创建对象间接访问实例成员)
  • 实例方法可以访问静态成员,也可以访问实例成员
  • 静态方法中不能出现this关键字(因为this是当前对象地址,静态方法可能是不由对象调用的)

工具类

无需创建对象,内部都是一些静态方法,每个方法完成一个功能

一次编写,处处可用,提高代码的重用性

//例子:生成验证码的重复类
public class util {
    /**
     * 工具类无需创建对象,所以将其构造器私有化
     */
    private util(){
    }
    //静态方法
    public static String creatCode(int n){
        String code="";
        String data="abcdefghijklmnopqrstyvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" +
                "1234567890";
        Random r=new Random();
        for (int i = 0; i < n; i++) {
            int index=r.nextInt(data.length());
            code+=data.charAt(index);
        }
        return code;
    }
}

代码块

  • 类的5大成分之一(成员变量、构造器、方法、代码块、内部类),定义在类中方法外
  • 在Java类中,用{}括起来的代码称为代码块

静态代码块:

  • 格式:static{}
  • 特点:用static关键字修饰,随着类的加载而加载,自动触发,只执行一次
  • 使用场景:在类加载时,做一些静态数据初始化操作,以便后续使用
public class staticCodeDemo1 {
    //静态资源,如城市名,一副扑克牌
    public static String city;
    public static ArrayList<String> cards=new ArrayList<>();
    //静态代码块
    static {
        //比main方法优先调用
        //作用:初始化静态资源
        System.out.println("静态代码块被执行了");
        city="北京";
    };
    public static void main(String[] args) {
        System.out.println("main方法被执行");
        System.out.println(city);
    }
}
/*
静态代码块被执行了
main方法被执行
北京
*/

构造(实例)代码块:(很少用)

  • 格式:{}
  • 特点:每次创建对象,调用构造器前,都会执行一次{}中的代码,在构造器执行前执行(顺序:父构造,实例代码块,子构造)
  • 使用场景:初始化实例资源
public class staticCodeDemo2 {
    private String name;
    staticCodeDemo2(){
        System.out.println("无参构造器被触发执行");
        name="张三";
    }
    //实例代码块
    {
        System.out.println("实例代码块被触发执行");
    }
    public static void main(String[] args) {
        staticCodeDemo2 a=new staticCodeDemo2();
        System.out.println(a.name);
    }
}
/**
 * 实例代码块被触发执行
 * 无参构造器被触发执行
 * 张三
 */

静态代码块案例:

扑克游戏需要一份扑克牌

  • 存储54张牌类对象的集合,静态的集合指挥家在一份
  • 系统启动同时准备好54张牌的数据,可用静态代码块完成
public class staticCodeTest3 {
    /**
     * 定义一个静态集合,因为当前房间只需要一副扑克牌
     */
    public static ArrayList<String> cards=new ArrayList<>();

    /**
     *main方法执行前,放入54张牌
     * 如果放在main中,若main调用很多次,static内容也会被执行多次,但在静态代码块只执行一次
     */
    static{
        //点数
        String[] sizes={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        //花色
        String[] colors={"♥","♠","♦","♣"};
        //组合
        for (int i = 0; i < sizes.length; i++) {
            for (int j = 0; j < colors.length; j++) {
                String card=sizes[i]+colors[j];
                cards.add(card);
            }
        }
        cards.add("大

标签:String,子类,Day5,mt,static,父类,public,name
From: https://www.cnblogs.com/mt-nika/p/17063393.html

相关文章