java学习之局部变量以及全局变量

全局变量

什么是全局变量?

全局变量就好比一个容器或者一个公用的东西一样,就类似外面公共场所的凳子一样,大家都可以使用这个凳子。

和他相反的局部变量是啥子东东呢?

局部变量就是局部的东西,如果全局变量是桌子,局部变量就类似于抽屉,只能在一小部分地方使用,很局限。全局是外面公共场所的凳子,则局部变量就像某个酒店的凳子一样,再酒店内部,只能去住酒店才能使用。

那么程序中是如何使用的呢?

程序语言中是在类的方法外声明的,毕竟要供大家都使用吧,所以全局变量必须放到最外面噻。而局部变量则必须放在方法内部,毕竟是局部的噻,只能受制于某部分方法。下面我们来看一下例子。

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;
    }
    
}

总结:全局声明其实只是可以公用一个指定类型的变量,而全局变量则是已经初始化并且分配了唯一的地址并且在任何地方都可以使用,局部变量则只能在方法内部使用,其它地方不能使用。全局变量是一个容器,而局部变量只能是容器里的一部分。

原文地址:https://www.cnblogs.com/Hackerman/p/7655157.html