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(