不多说,直接上干货!

定义类其实就是在定义类中的成员
成员:成员变量<-->属性,成员函数<-->行为。

  局部变量在方法内部声明,并且只能在方法内部使用,在外层的方法被调用时被分配内存,请求在方法执行完毕后自动释放内存而消亡,在使用局部变量的时候必须先对其进行初初始化。它是在方法体中定义的变量以及方法的参数,只在定义它的方法内有效。成员变量违背人为初始化,系统将自动根据其所属类型进行初始化,基本数据类型变量量系统赋值0,引用型变量赋值null。

  成员变量与局部变量就好比正式工与临时工,成员变量就是正式员工,一直存在,与公司同生同灭,局部变量就是临时工,公司请临时工来做一点事情,做完,临时工就没有了,被销毁了

  static静态变量是所有对象共有的变量,它可以在不创建对象的情况下,直接被引用普通变量只有在创建了类的对象后才能被引用。局部变量与成员变量是非静态变量,调用之前必须动态创建,不能直接调用。非静态成员变量是在定义后,电脑随机给一个地址,当程序运行结束时,地址收回。而静态成员变量的不收回,而且一但给了地址它,这个地址就是它的了,不管程序结不结束,它在等待有个语句来释放它,或者关了电脑也就没了。

  全局变量也叫成员变量,是指在类中定义的变量;它在整个类中都有效,又可分为类变量和实例变量类变量又叫静态变量,用static修饰 它可以直接用类名调用,也可以用对象调用 ,而且所有对象的同一个类变量都是共享同一块内存空间的。实例变量不用static修饰,它只能通过对象调用,而且所有对象的同一个实例变量是共享不同的内存空间的。

成员变量和局部变量的区别:

1、成员变量定义在类中,整个类中都可以访问。
   局部变量定义在函数,语句,局部代码块中,只在所属的区域有效。

2、成员变量存在于堆内存的对象中。
  局部变量存在于栈内存的方法中。

3、成员变量随着对象的创建而存在,随着对象的消失而消失。
  局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。

4 、成员变量都有默认初始化值。
  局部变量没有默认初始化值。

  

看代码:

class Person{
String name;//姓名,这是一个成员变量
static String country = "中国";//国籍,这是一个静态变量 public void printInfo() {
System.out.println(name+":"+country);
}
}

  上面的代码中我们可以看到变量name是一个成员变量,而country是一个静态变量,用static关键字修饰。

1、两个变量的生命周期不同:

  成员变量:随着对象的创建而存在,随着对象的被回收而释放。

  静态变量:随着类的加载而存在,随着类的消失而消失。

那么类什么时候消失呢?一般情况下,虚拟机结束了,类就结束了,当然这只是说一般情况下。

2、两个变量的调用方式不同:

  我们来看一个上面代码的测试:

class StaticTest{
public static void main(String[] args){
Person p = new Person();
p.name = "小强";
String name = Person.name;
System.out.println(p.country+"--"+Person.country);
}
}

  我们可以看到直接用类名来调用成员变量就会出现“无法从静态上下文中访问非静态变量”的错误。

当我们把这名话注释之后再来运行:

class StaticTest{
public static void main(String[] args){
Person p = new Person();
p.name = "小强";
//String name = Person.name;
System.out.println(p.country+"--"+Person.country);
}
}

  结果,是

程序正常运行并合法访问,所以我们可以总结出下面的区别:

  成员变量:只能被对象调用。

  静态变量:既可被对象调用,也可被类调用。上一节我们就已经学习了static修饰的成员可以直接用类名调用。

3、两个变量的别名不同:

  成员变量:又称为实例变量。

  静态变量:又称为类变量。

4、两个变量的存储位置不同:

  成员变量:存储在堆内存中的对象中,所以也叫对象的特有数据。

  静态变量:存储在方法区(共享数据区)的静态区中,所以也叫类的共享数据。

牛客网Java刷题知识点之全局变量(又称成员变量,分为类变量和实例变量)、局部变量、静态变量(又称为类变量)的更多相关文章

  1. 牛客网Java刷题知识点之为什么HashMap和HashSet区别

    不多说,直接上干货! HashMap  和  HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collection框架的 ...

  2. 牛客网Java刷题知识点之为什么HashMap不支持线程的同步,不是线程安全的?如何实现HashMap的同步?

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

  3. 牛客网Java刷题知识点之Map的两种取值方式keySet和entrySet、HashMap 、Hashtable、TreeMap、LinkedHashMap、ConcurrentHashMap 、WeakHashMap

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

  4. 牛客网Java刷题知识点之ArrayList 、LinkedList 、Vector 的底层实现和区别

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

  5. 牛客网Java刷题知识点之垃圾回收算法过程、哪些内存需要回收、被标记需要清除对象的自我救赎、对象将根据存活的时间被分为:年轻代、年老代(Old Generation)、永久代、垃圾回收器的分类

    不多说,直接上干货! 首先,大家要搞清楚,java里的内存是怎么分配的.详细见 牛客网Java刷题知识点之内存的划分(寄存器.本地方法区.方法区.栈内存和堆内存) 哪些内存需要回收 其实,一般是对堆内 ...

  6. 牛客网Java刷题知识点之HashMap的实现原理、HashMap的存储结构、HashMap在JDK1.6、JDK1.7、JDK1.8之间的差异以及带来的性能影响

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  7. 牛客网Java刷题知识点之UDP协议是否支持HTTP和HTTPS协议?为什么?TCP协议支持吗?

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  8. 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

  9. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

随机推荐

  1. VS Code:快捷方式

    转于:vscode: Visual Studio Code 常用快捷键 博主:魚魚 更多操作参见官网:https://code.visualstudio.com/docs/getstarted/key ...

  2. 【转】 Pro Android学习笔记(七七):服务(2):Local Service

    目录(?)[-] Local service代码 调用Local ServiceLocal Service client代码 AndroidManifestxml定义Serviceacitivty的l ...

  3. RESTEasy常用注解

    一.@Path,标注资源类或方法的相对路径          Path参数的形式有三种:          1.固定值          2.纯正则表达式          3.固定值和正则表达式的混 ...

  4. rufus-scheduler定时任务示例代码

    require 'rubygems' require 'rufus/scheduler' scheduler = Rufus::Scheduler.start_new scheduler.in '20 ...

  5. 十六、xx.xx.xx格式版本号大小比较

    DELIMITER $$ USE `deshangshidai`$$ DROP FUNCTION IF EXISTS `STRCMP_MY_VERSION`$$ CREATE DEFINER=`roo ...

  6. 洛谷-跑步-NOI导刊2010提高

    新牛到部队, CG 要求它们每天早上搞晨跑,从A农场跑到B农场.从A农场到B农场中有n-2个路口,分别标上号,A农场为1号, B农场为n号,路口分别为 2 ..n -1 号,从A农场到B农场有很多条路 ...

  7. 18_andriod常用布局&内容回顾

    线性布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:androi ...

  8. Ubuntu W: GPG 错误:下列签名无效: BADSIG 84DBCE2DCEC45805 Launchpad PPA fo

    Ubuntu12.04  安装R语言的时候出现的报错. 研究了两个晚上,解决办法如下,跟参考贴有点出入: ############################################### ...

  9. 【PHP】Composer使用简介,composer install 和 update 区别

    1.composer是php的依赖包管理工具 2.符合PSR-0/1/2/3/4 规范 3.composer安装推荐使用国内镜像 4.composer require/install/update 区 ...

  10. IDEA拷贝git上的最新项目资源

    File->new ->project version control->git-> 进入项目git对应的网址,选择第一个backstop,复制url: 输入git用户名和密码 ...