无监督方法实现C Java Python 代码转换,出了bug,两种语言都要看吗

style="text-indent:2em;">本篇文章给大家谈谈Java:为什么这两段代码里的变量i有的需要初始化有的不需要呢,以及java不建议成员变量对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文目录

  1. 如何定义成员变量
  2. Java:为什么这两段代码里的变量i有的需要初始化有的不需要呢
  3. 在java中为什么不全部使用static方法
  4. java中,匿名内部类可以使用外部类的成员变量吗

如何定义成员变量

这个概念我在学习之初也有些迷惑,专门整理过这一份文档,希望对你有用。

java中就没有全局变量这个概念,只分为成员变量和局部变量。

成员变量:Static修饰成为类变量或静态变量,还有就是方法外的变量。生命周期与类相同。局部变量:就是方法中的变量。生命周期就是再次方法中。

但是,很多人学习都是先学习的C语言,C语言中存在全局变量这个概念,所以,大家对于Java中的成员变量有时候也称之为全局变量,同时也存在如下的一个约定俗成的小区别

使用static关键字进行声明的变量叫做全局变量

在函数外面定义的变量叫做成员变量

成员变量

成员变量定义在类中,在整个类中都可以被访问。

成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

成员变量有默认初始化值。

局部变量

局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。

局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。

局部变量没有默认初始化值

在使用变量时需要遵循的原则为:就近原则首先在局部范围找,有就使用;接着在成员位置找。

静态变量(也叫做类变量,类属性)

由static修饰的变量称为静态变量,其实质上就是一个全局变量。如果某个内容是被所有对象所共享,那么该内容就应该用静态修饰;没有被静态修饰的内容,其实是属于对象的特殊描述。

成员变量和静态变量的区别

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

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

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

2.调用方式不同

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

静态变量可以被对象调用,还可以被类名调用。

3.别名不同

成员变量也称为实例变量。

静态变量也称为类变量。

4.数据存储位置不同

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

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

Java:为什么这两段代码里的变量i有的需要初始化有的不需要呢

首先你的这个不是i没有初始化,而是你的total变量没有初始化,线程是一个类,那个total是成员变量不用初始化,main方法中的那个total是局部变量,必须初始化。所以main中的total+=i;会报错你是不是没有理解什么是局部变量和成员变量?

在java中为什么不全部使用static方法

如果全部使用了static方法,那么静态的方法只能访问静态的成员。那么整个类都只有静态成员和静态方法,这就意味着对象消失了。就不存在继承和多态了,也就颠覆了整个面向对象程序设计的世界。

static修饰的静态成员变量和静态成员方法,都是存在数据共享区的,即data内存中,而非static修饰的对象是建立的heap堆内存中的,这样面向对象的数据封装也就不存在了,藉此面向对象的封装,继承和多态三大核心全部被打破。

这也就意味着你由面向对象编程退化回了面向过程编程。

这样你扭出来的对象是不能复用的。

所以你要思考什么时候使用static修饰成员,什么时候使用static修饰方法,这样做才不至于脱裤子放屁。当属于同一类的所有对象出现共享数据时,就需要将存储这个共享数据的成员用static修饰。当功能内部没有访问到非静态成员时,需要访问对象特有的数据,那么该功能才定义为静态,这时候才使用static。

补充一句,Java在有了spring之后,配置类能够解决共享数据的问题,再没有使用过static方法,貌似忘了这个关键字也没有解决不了的问题。

java中,匿名内部类可以使用外部类的成员变量吗

就是说这个匿名内部类你只能在你写的位置用而且只能用这一次因为它没有名字所以你根本没法调用它。所以说----对象只有一个吧。

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!

深入理解Java对象的创建过程 类的初始化与实例化