全局变量

什么是全局变量?

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

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

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

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

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

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

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

java学习之局部变量以及全局变量的更多相关文章

  1. python学习-24 局部变量与全局变量

    局部变量与全局变量 1.没有缩进的变量,为全局变量 name = 'jphn' 在子程序里定义的变量,局部变量 2. name = 'jphn' #全局变量 def a(): name='andy' ...

  2. 【转】Java多线程操作局部变量与全局变量

    原文网址:http://blog.csdn.net/undoner/article/details/12849661 在这篇文章里,我们首先阐述什么是同步,不同步有什么问题,然后讨论可以采取哪些措施控 ...

  3. Java多线程操作局部变量与全局变量

    在这篇文章里,我们首先阐述什么是同步,不同步有什么问题,然后讨论可以采取哪些措施控制同步,接下来我们会仿照回顾网络通信时那样,构建一个服务器端的"线程池",JDK为我们提供了一个很 ...

  4. Python小白学习之路(十一)—【局部变量和全局变量】【关键字global】【关键字nonlocal】

    写在前面: 几乎有一周没有更新学习笔记了吧 上周一周身体都不怎么舒服 然后还得写开题报告 然后还得看文献 天天就是写写写写写写~~~~~~改改改改改改~~~~~~~~~ 今天又开始学习了 希望之前的没 ...

  5. SQLServer局部变量和全局变量介绍05-29学习笔记

    变量 数据在内存中存储可以变化的量叫变量.为了在内存中存储信息,用户必须指定存储信息的单元,并为了该存储单元命名, 以方便获取信息,这就是变量的功能.Transact-SQL可以使用两种变量,一种是局 ...

  6. Lua的五种变量类型、局部变量、全局变量、lua运算符、流程控制if语句_学习笔记02

    Lua的五种变量类型.局部变量.全局变量 .lua运算符 .流程控制if语句 Lua代码的注释方式: --当行注释 --[[    多行注释    ]]-- Lua的5种变量类型: 1.null 表示 ...

  7. Python学习【第9篇】:python中的局部变量与全局变量

    1.全局变量 全局变量定义后可被下面所有函数进行调用 例子: name = "xiao"def chang_name(): print("chang_name" ...

  8. java基础---局部变量和全局变量

    1.成员变量的概念: 成员变量就是属于类的变量,在类中,方法体外定义的变量 1)成员变量又分为两种: 类变量(又称静态变量) 实例变量(又称非静态变量) 类变量(静态变量)   :是被static所修 ...

  9. Java学习---基础知识学习

    2016-07-23  周六 利用键盘输入的时候需要抛出异常 ,直接快捷键 ctrl + 1 ;定义数组 int score[] = new int[4]  ;  只有4个数字BufferedRead ...

随机推荐

  1. 将Maven2项目转为MyEclipse项目

    现在项目中,大家开始用jetty.它不用像在MyEclipse中使用Tomcat那样要部署,也不用像在Tomcat中那样,要把应用都放到webapp文件夹下.jetty可以直接用你的项目的目录结构. ...

  2. SQL中truncate table和delete的区别

    truncate table table_name delete from table_name drop table table_name truncate table在功能上与不带where子句的 ...

  3. Install Python+Django+Nginx+UWSGI

    一.软件环境: CentOS6.6_64bit 需要用到的软件: [root@django tools]# ll 总用量 33336 -rw-r--r-- 1 root root 7497785 3月 ...

  4. 高性能CSS

    避免使用@import 有两种方式加载样式文件,一种是link元素,另一种是CSS 2.1加入@import.而在外部的CSS文件中使用@import会使得页面在加载时增加额外的延迟.虽然规则允许在样 ...

  5. 修改Nginx与Apache配置参数解决http状态码:413上传文件大小限制问题

    一.修改Nginx上传文件大小限制 我们使用ngnix做web server的时候,nginx对上传文件的大小有限制,默认是1M. 当超过大小的时候会报413(too large)错误.这个时候我们要 ...

  6. [转] windows下sublime2 安装破解(key可用)

    转: http://jingyan.baidu.com/article/ff4116259b057c12e48237b8.html Sublime Text 2安装汉化破解.插件包安装教程 | 浏览: ...

  7. Word TOC域的使用说明

    TOC域的使用说明: 域代码:TOC(目录)域 { TOC [Switches ] } 建立一个目录.TOC 域根据标题级别.指定样式或由 TC(目录项)域指定的项目来收集目录项.在使用“插入”菜单中 ...

  8. (LeetCode 53)Maximum Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  9. 利用Nginx搭建http和rtmp协议的流媒体服务器[转]

    利用nginx搭建http和rtmp协议的流媒体服务器 实验目的:让Nginx支持flv和mp4格式文件,同时支持Rtmp协议:同时打开rtmp的hls功能资料:HTTPLive Streaming( ...

  10. windows curl ssl版本号编译

    编译curl-ssl版本号碰到非常多坑,这里记录一下.亲手測试,注意版本号号!! ! !. 1.下载  curl-7.43.0  libssh2-1.3.0  openssl-1.0.0s   Act ...