3 static关键字

意义:static修饰的变量叫静态变量,修饰的方法叫静态方法

重要概念:所谓的静态在java中指随着虚拟机的加载而加载的变量及方法,称之为静态变量或方法

(直白点讲就是static修饰的变量和方法会随着虚拟机的加载而加载)

编译的过程:启动虚拟机、加载java文件、验证规则、生成class(字节码)文件

注意点:双亲委托机制,ClassLoader加载class文件

JAVA静态类能不能NEW多次 java静态类定义_加载

例如:某某想要killXXX,奈何自身没有这个本事,so,找了组织C,C接了任务后发现自己做不了就委托给组织B,B接了后发现自己也做不了就又委托给了组织A,A完成后将结果反馈给B,B在反馈给C,C在反馈给某某(每个节点也可能自己去完成任务)

非静态的变量及方法的概念:未被static修饰的变量或方法称为非静态变量或方法,只有当创建对象的时候才会被加载进内存(如果未创建对象,那么非静态的变量或方法就不能调用[不存在于虚拟机所运行的内存中]),非静态的属性和方法只能通过对象调用

和静态之间的关系:不能静态方法中调用非静态的变量或方法,非静态方法中可以调用静态变量或方法

public class StaticDemo{
    //无法从静态上下文中引用非静态 变量 count
    int count = 2;
    public static void main(String[] args){
        int count = 1;
        System.out.println(a);
    }
}

static的作用:资源共享

public class ShareDemo{
    public static void main(String[] args){
        Ticket t1 = new Ticket();
        Ticket t2 = new Ticket();
        
        t1.sale();
        t2.sale();
    }
}

class Ticket{
    //static修饰的方法或变量随着类的加载而加载,程序每次运行时,类只加载一次,所以,静态变量和方法也只会加载一次
    public static int count = 20;
    
    public void sale(){
        count--;
        System.out.println(count);
    }
}

静态方法和变量的调用形式:

1、通过类名直接调用--建议

2、通过对象进行调用

public class TakeType{
    
    public static void main(String[] args){
        //对于静态的属性和方法既可以通过类名.调用也可以通过对象.调用
        TakeType.run();
        Item.show();
        Item item = new Item();
        item.show();
    }
    
    public static void run(){
        System.out.println("run");
    }
}

class Item{
    
    //商品名称
    public String itemName;
    //商品价格
    public double itemPrice;
    //商品生产地
    public String address;
    //生产商
    public String producter;
    
    public void setItemName(String newItemName){
        itemName = newItemName;
    }
    
    public String getItemName(){
        return itemName;
    }
    
    public void setItemPrice(double newItemPrice){
        itemPrice = newItemPrice;
    }
    
    public double getItemPrice(){
        return itemPrice;
    }
    
    public void setAddress(String newAddress){
        address = newAddress;
    }
    
    public String getAddress(){
        return address;
    }
    
    public void setProducter(String newProducter){
        producter = newProducter;
    }
    
    public String getProducter(){
        return producter;
    }
    
    //被吃
    public static void show(){
        System.out.println("展示商品功能");
    }
}
4 类的定义

概念:类就是用于描述某一类事物,相当于是一个模板

例如:印钱的那个母版,有一个版就可以印出好多钱

//银行卡
public class Card{
    //用户的姓名
    public String name;//null
    //卡号
    public long cardId;//0
    //客服电话
    public String phone;
    //银行名称
    public String bankName; 
}

注意:自己创建的类叫自定义类,那么该类的类名就是一个数据类型,称为引用数据类型

创建对象:数据类型(类名) 变量名 = new 数据类型();

public class Card{
    //用户的姓名
    public String name;//null
    //卡号
    public long cardId;//0
    //客服电话
    public String phone;
    //银行名称
    public String bankName; 

    //创建方法的目的是为了给属性进行赋值(每个对象的属性值都不同)
    //设置用户名
    public void setName(String newName){
        name = newName;
    }
    //获取用户名
    public String getName(){
        return name;
    }

    public void setCardId(long newCardId){
        cardId = newCardId;
    }

    public long getCardId(){
        return cardId;
    }

    public void setPhone(String newPhone){
        phone = newPhone;
    }

    public String getPhone(){
        return phone;
    }

    public void setBankName(String newBankName){
        bankName = newBankName;
    }

    public String getBankName(){
        return bankName;
    }
    public static void main(String[] args){
        /*System.out.println(new Card());//1
        System.out.println(new Card());//1*/
        //每个对象都有不同的值,值是通过用户设置的
        //1、创建对象 int count = 1;
        Card card = new Card();
        Card card2 = new Card();
        System.out.println(card);
        System.out.println(card2);
        System.out.println(card == card2);

        //2、通过对象调用方法设置值
        card.setName("小代");
        card.setCardId(123465789L);
        card.setPhone("15731321239");
        card.setBankName("中国银行");
        //3、获取card对象设置的值
        String name1 = card.getName();
        long cardId1 = card.getCardId();
        String phone1 = card.getPhone();
        String bankName1 = card.getBankName();
        System.out.println(name1+"--"+cardId1+"--"+phone1+"--"+bankName1);

        //给card2对象设置值
        card2.setName("小嘿");
        card2.setCardId(987147258L);
        card2.setPhone("134665465496");
        card2.setBankName(