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 ...
随机推荐
- mysql之ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'解决方法
LAMPP安装完成之后,mysql -u root -p连不上,报这个错误: ERROR 2002 (HY000): Can't connect to local MySQL server throu ...
- Django admin管理
admin的配置 admin是django强大功能之一,它能共从数据库中读取数据,呈现在页面中,进行管理.默认情况下,它的功能已经非常强大,如果你不需要复杂的功能,它已经够用,但是有时候,一些特殊的功 ...
- jquery的$.each()
each()方法能使DOM循环结构简洁,不容易出错.each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组.多维数组.DOM, JSON 等等在javaScript开发过程中使用$ ...
- hdu 1024 dp滚动数组
#include <cstdio> #include <iostream> #include <algorithm> #include <queue> ...
- 使用dulilib DirectUI库(一)
1.在创建的窗口类里面 需要继承CWindowWnd.INotifyUI 对于CWindowWnd里面的方法: 实现;,重载virtualUINTGetClassStyle()const;返回窗口的风 ...
- c# String.IndexOf 方法 string查找字符串
c# String.IndexOf 方法 (value, [startIndex], [count]) 报告指定字符在此实例中的第一个匹配项的索引.搜索从指定字符位置开始,并检查指定数量的字符位置. ...
- [笔记][Java7并发编程实战手冊]3.8 并发任务间的数据交换Exchanger
[笔记][Java7并发编程实战手冊]系列文件夹 简单介绍 Exchanger 是一个同步辅助类.用于两个并发线程之间在一个同步点进行数据交换. 同意两个线程在某一个点进行数据交换. 本章exchan ...
- 使用poll处理任意数目个客户的单进程程序
将http://www.cnblogs.com/nufangrensheng/p/3590002.html中的select改用poll. int main(int argc, char **argv) ...
- Androidclient性能參数监控
背景: 在做androidclient測试的时候.有时候须要监控cpu/mem/电量消耗/界面载入时间/流量等等指标. 于是俺们就上下求索,网友告诉我两个方案:AnotherMonitor和Emmag ...
- java 资源文件的读取
Java将配置文件当作一种资源(resource)来处理,并且提供了两个类来读取这些资源,一个是Class类,另一个是ClassLoader类. gradle 项目 项目目录结构 用Class类加载 ...