全局變量
什么是全局變量?
全局變量就好比一個容器或者一個公用的東西一樣,就類似外面公共場所的凳子一樣,大家都可以使用這個凳子。
和他相反的局部變量是啥子東東呢?
局部變量就是局部的東西,如果全局變量是桌子,局部變量就類似於抽屜,只能在一小部分地方使用,很局限。全局是外面公共場所的凳子,則局部變量就像某個酒店的凳子一樣,再酒店內部,只能去住酒店才能使用。
那么程序中是如何使用的呢?
程序語言中是在類的方法外聲明的,畢竟要供大家都使用吧,所以全局變量必須放到最外面噻。而局部變量則必須放在方法內部,畢竟是局部的噻,只能受制於某部分方法。下面我們來看一下例子。
class cart1 { List ls=new ArrayList();//全局變量 Product1 s; public void addProduct(Product1 p) { ls.add(p); } public void ss() { System.out.println(s); //s.setId(0); //s.setName("ss"); //l.add(s); } public List getProduct() { return ls; } List l=null ; public void getProdect(int id,String name,float price) { s=new Product1();//全局變量,這也不是在方法內嗎? l=new ArrayList();//全局變量,這不也在方法內嗎?
List x=new ArrayList();//這才是局部變量
s.setId(id); s.setName(name); s.setPrice(price); l.add(s); System.out.println(s); System.out.println(l); } public List getProduct1() { return l; } }
上面所說的局部變量是在方法內的也不完全對,應該是在方法內申明並初始化的才是局部變量。而在方法外申明,在方法內使用也是全局變量,在方法外聲明也是全局變量。方法外申明只是可以供大家使用,但是沒有初始化和實例化,變量內容為空,如果某個地方需要使用還必須初始化或者實例化。這里就不得不說一下這個全局申明。
全局申明什么是啥子鬼?
全局聲明就是一個沒有初始化或者實例化的東東,說白了就是一個空的東西或者空的容器,只是說明一下這個東西代表了什么玩意,意思就是告訴程序我以后只能是字符串或者是整形或者什么對象,實際上是沒有東西的,是為空的。到了具體的程序使用的時候你想怎么用你拿去用,但是要自己在實例化或者初始化。說了那么多,我們還是看例子吧
import java.util.ArrayList; import java.util.List; public class Cart { public static void main(String[] args) { // TODO Auto-generated method stub Product1 p= new Product1(); p.setId(1); p.setName("test"); p.setAmount(10.0f); cart1 c =new cart1(); Product1 p1= new Product1(); p1.setId(2); p1.setName("test1"); p1.setAmount(20.0f); c.addProduct(p); c.addProduct(p1); List l=new ArrayList(); l=c.getProduct(); // for(int i=0;i<l.size();i++) // System.out.println(((Product1)l.get(i)).getId()); cart1 s=new cart1(); s.getProdect(1, "2", 2.0f); s.getProdect(2, "222", 2.0f); //s.ss(); List ll=s.getProduct1(); for(int i=0;i<ll.size();i++) System.out.println(((Product1)ll.get(i)).getId()); } } class cart1 { List ls=new ArrayList(); Product1 s; public void addProduct(Product1 p) { ls.add(p); } public void ss() { System.out.println(s); //s.setId(0); //s.setName("ss"); //l.add(s); } public List getProduct() { return ls; } List l=null ; public void getProdect(int id,String name,float price) { s=new Product1(); l=new ArrayList(); s.setId(id); s.setName(name); s.setPrice(price); l.add(s); System.out.println(s);/輸出不同的對象 System.out.println(l);/每個對象使用各自的List } public List getProduct1() { return l; } }
下面我們換一種方式,換為全局聲明
class cart1 { List ls=new ArrayList(); Product1 s; public void addProduct(Product1 p) { ls.add(p); } public void ss() { System.out.println(s); //s.setId(0); //s.setName("ss"); //l.add(s); } public List getProduct() { return ls; } List l=new ArrayList() ; public void getProdect(int id,String name,float price) { s=new Product1(); s.setId(id); s.setName(name); s.setPrice(price); l.add(s); System.out.println(s);//輸出不同對象 System.out.println(l);//輸出兩個對象的集合 } public List getProduct1() { return l; } }
再看一種情況
import java.util.ArrayList; import java.util.List; public class Cart { public static void main(String[] args) { // TODO Auto-generated method stub Product1 p= new Product1(); p.setId(1); p.setName("test"); p.setAmount(10.0f); cart1 c =new cart1(); Product1 p1= new Product1(); p1.setId(2); p1.setName("test1"); p1.setAmount(20.0f); c.addProduct(p); c.addProduct(p1); List l=new ArrayList(); l=c.getProduct(); // for(int i=0;i<l.size();i++) // System.out.println(((Product1)l.get(i)).getId()); cart1 s=new cart1(); s.getProdect(1, "2", 2.0f); s.getProdect(2, "222", 2.0f); //s.ss(); List ll=s.getProduct1(); for(int i=0;i<ll.size();i++) System.out.println(((Product1)ll.get(i)).getId()); } } class cart1 { List ls=new ArrayList(); Product1 s=new Product1(); public void addProduct(Product1 p) { ls.add(p); } public void ss() { System.out.println(s); //s.setId(0); //s.setName("ss"); //l.add(s); } public List getProduct() { return ls; } List l=new ArrayList() ; public void getProdect(int id,String name,float price) { s.setId(id); s.setName(name); s.setPrice(price); l.add(s); System.out.println(s);//打印的只有一個對象地址 System.out.println(l);//打印兩個相同地址對象的集合 } public List getProduct1() { return l; } }
總結:全局聲明其實只是可以公用一個指定類型的變量,而全局變量則是已經初始化並且分配了唯一的地址並且在任何地方都可以使用,局部變量則只能在方法內部使用,其它地方不能使用。全局變量是一個容器,而局部變量只能是容器里的一部分。