Java 类的定义及static关键字

3 static关键字

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

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

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

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

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

例如:某某想要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("中国农业银行");
       //获取card2对象的值
       String name2 = card2.getName();
       long cardId2 = card2.getCardId();
       String phone2 = card2.getPhone();
       String bankName2 = card2.getBankName();
       System.out.println(name2+"--"+cardId2+"--"+phone2+"--"+bankName2);
  }
}
5 变量的作用域

成员变量:定义在类中的变量统称为成员变量,可以在整个类中使用,都有默认值

int-0 boolean-false double-0.0 引用类型-null

局部变量:定义在方法中的统称为局部变量,只能在当前的方法中使用,都需要初始化

posted @ 2020-06-03 22:22  梦想0高度  阅读(776)  评论(0编辑  收藏  举报