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;
} }
总结:全局声明其实只是可以公用一个指定类型的变量,而全局变量则是已经初始化并且分配了唯一的地址并且在任何地方都可以使用,局部变量则只能在方法内部使用,其它地方不能使用。全局变量是一个容器,而局部变量只能是容器里的一部分。
java学习之局部变量以及全局变量的更多相关文章
- python学习-24 局部变量与全局变量
局部变量与全局变量 1.没有缩进的变量,为全局变量 name = 'jphn' 在子程序里定义的变量,局部变量 2. name = 'jphn' #全局变量 def a(): name='andy' ...
- 【转】Java多线程操作局部变量与全局变量
原文网址:http://blog.csdn.net/undoner/article/details/12849661 在这篇文章里,我们首先阐述什么是同步,不同步有什么问题,然后讨论可以采取哪些措施控 ...
- Java多线程操作局部变量与全局变量
在这篇文章里,我们首先阐述什么是同步,不同步有什么问题,然后讨论可以采取哪些措施控制同步,接下来我们会仿照回顾网络通信时那样,构建一个服务器端的"线程池",JDK为我们提供了一个很 ...
- Python小白学习之路(十一)—【局部变量和全局变量】【关键字global】【关键字nonlocal】
写在前面: 几乎有一周没有更新学习笔记了吧 上周一周身体都不怎么舒服 然后还得写开题报告 然后还得看文献 天天就是写写写写写写~~~~~~改改改改改改~~~~~~~~~ 今天又开始学习了 希望之前的没 ...
- SQLServer局部变量和全局变量介绍05-29学习笔记
变量 数据在内存中存储可以变化的量叫变量.为了在内存中存储信息,用户必须指定存储信息的单元,并为了该存储单元命名, 以方便获取信息,这就是变量的功能.Transact-SQL可以使用两种变量,一种是局 ...
- Lua的五种变量类型、局部变量、全局变量、lua运算符、流程控制if语句_学习笔记02
Lua的五种变量类型.局部变量.全局变量 .lua运算符 .流程控制if语句 Lua代码的注释方式: --当行注释 --[[ 多行注释 ]]-- Lua的5种变量类型: 1.null 表示 ...
- Python学习【第9篇】:python中的局部变量与全局变量
1.全局变量 全局变量定义后可被下面所有函数进行调用 例子: name = "xiao"def chang_name(): print("chang_name" ...
- java基础---局部变量和全局变量
1.成员变量的概念: 成员变量就是属于类的变量,在类中,方法体外定义的变量 1)成员变量又分为两种: 类变量(又称静态变量) 实例变量(又称非静态变量) 类变量(静态变量) :是被static所修 ...
- Java学习---基础知识学习
2016-07-23 周六 利用键盘输入的时候需要抛出异常 ,直接快捷键 ctrl + 1 ;定义数组 int score[] = new int[4] ; 只有4个数字BufferedRead ...
随机推荐
- JOIN与EXISTS(子查询)的效率研究
使用MySQL提供的Sample数据库Sakila 现将profiling打开,用来一会查看sql执行时间 set profiling=1; exists 子查询与 join联接效率的对比,功能:查看 ...
- 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)
设计模式学习--迭代器模式(Iterator Pattern) 概述 ——————————————————————————————————————————————————— 迭代器模式提供一种方法顺序 ...
- 使用YUI+Ant 实现JS CSS压缩
今天研究了一下YUI yahoo开源框架,感觉很猛啊. 于是乎我做了一个YUI的ant实现,网上好多关于bat的实现,我就另辟蹊径,出个关于这个的ant实现,嘿嘿独一无二的文章,如果转载的话,其注明作 ...
- mysql 索引长度的限制
myisam表,单列索引,最大长度不能超过 1000 bytes: innodb表,单列索引,最大长度不能超过 767 bytes: utf8 编码时 一个字符占三个字节 varchar 型能建 ...
- 突破自我的Docker1.12
如今,Docker 和容器将要改变世界,早已不是什么秘密了.对于一些深度用户,这种改变已经发生了.不过你造吗?和很多其他改变世界的事物一样,这些事物在彻底改变世界之前总是缺少点什么.但现在什么都不缺了 ...
- (剑指Offer)面试题50:树中两个结点的最低公共祖先
题目: 求树中两个结点的最低公共祖先 思路: 考虑一下几种情况: 1.该树为二叉搜索树 二叉搜索树是排序树,位于左子树点的结点都比父结点小,而位于右子树的结点都比父结点大,只需要从树的根结点开始和两个 ...
- 通过Intel XDK编写跨平台app(一)
Intel XDK 是一个新的跨平台手机应用开发工具.它努力把整个开发流程变的简单,尽可能把所有的平台都封装到一个包中,通过收集各种开发工具来使你的开发变的简单. 在这篇文章中,我将会向你介绍什么是I ...
- 解决Linux平台下VMware出现"No 3d support is available from the host"或"Hardware graphics acceleration is not available" 错误
错误日志: No 3d support is available from the host Hardware graphics acceleration is not available 解决方法: ...
- 算法笔记_155:算法提高 概率计算(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 生成n个∈[a,b]的随机整数,输出它们的和为x的概率. 输入格式 一行输入四个整数依次为n,a,b,x,用空格分隔. 输出格式 输出一行 ...
- 利用JqGrid结合ashx显示列表之一
最近项目决定运用JqGrid列表控件显示相关数据,以前接触比较多还是easyui和Ext.Net的列表控件,文章简单写的小实例进行一个总结: 1:引入相关的JS及CSS文件,JqGrid目前可以利用J ...