我们已经知道类体中的方法分为实例方法和类方法两种,用static修饰的是类方法。二者有什么区别呢?当一个类创建了一个对象后,这个对象就可以调用该类的方法。
当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,当该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。需要注意的是,当我们创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址,也就是说,方法的入口地址被所有的对象共享,当所有的对象都不存在时,方法的入口地址才被取消。
对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址。从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。类方法的入口地址直到程序退出才被取消。
类方法在类的字节码加载到内存时就分配了入口地址,因此,Java语言允许通过类名直接调用类方法,而实例方法不能通过类名调用。在讲述类的时候我们强调过,在Java语言中,类中的类方法不可以操作实例变量,也不可以调用实例方法,这是因为在类创建对象之前,实例成员变量还没有分配内存,而且实例方法也没有入口地址。
java里类变量和实例变量的区别
类体的定义包括成员变量的定义和方法的定义,并且成员变量又分为实例变量和类变量,用static修饰的变量是类变量。那么类变量和实例变量有什么区别呢?
我们已经知道:一个类通过使用new运算符可以创建多个不同的对象,这些对象将被分配不同的内存空间,说得准确些就是:不同的对象的实例变量将被分配不同的内存空间,如果类中的成员变量有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其它对象的这个类变量。也就是说对象共享类变量。
我们知道,当Java程序执行时,类的字节码文件被加载到内存,如果该类没有创建对象,类的实例成员变量不会被分配内存。但是,类中的类变量,在该类被加载到内存时,就分配了相应的内存空间。如果该类创建对象,那么不同对象的实例变量互不相同,即分配不同的内存空间,而类变量不再重新分配内存,所有的对象共享类变量,即所有的对象的类变量是相同的一处内存空间,类变量的内存空间直到程序退出运行,才释放所占有的内存。Java语言允许通过类名直接访问类变量。
laderOne的上底:18.0
laderOne的下底:60.0
=========
laderTwo的上底:9.0
laderTwo的下底:60.0
参考:http://blog.sina.com.cn/s/blog_68c1864b01010noe.html
分享到:
相关推荐
### 类变量与实例变量 ...类变量和实例变量虽然都是用来表示对象状态的信息,但它们的生命周期、存储位置以及访问方式都有所不同。正确地理解和使用这两种变量能够帮助开发者更高效地设计和实现面向对象的程序。
依赖关系是指两个类之间的使用关系,组合关系是指一个类包含另外一个类,继承关系是指一个类继承另外一个类的属性和方法。 在 Java 中,类可以分为预定义类和自定义类。预定义类是 Java 语言中已经定义好的类,如 ...
- **Static**:静态的,用于声明静态变量和方法。 变量的声明可以分为可访问修饰符、静态、常量和 volatile: 1. **可访问修饰符**(如 public, private, protected)决定了变量的可见范围。 2. **Static**:声明...
Java 类变量和方法是编程语言Java的核心组成部分,它们定义了类的行为和属性。在这个文档中,我们将深入探讨这些概念。 首先,我们来看类的修饰符。在Java中,类可以被`public`、`abstract`或`final`修饰。`public`...
下面我们将通过一个实例来展示局部变量和实例变量的区别,并总结 java 变量命名的几个典型问题。 首先,让我们来看一下局部变量和实例变量的区别。局部变量是指在方法内部定义的变量,它的作用域仅限于该方法内部。...
### Java实例变量、类变量、局部变量详解 #### 一、实例变量(对象变量、类成员变量) 实例变量,也称为对象变量或类成员变量,是定义在类中的非静态变量。它们没有使用`static`关键字修饰,并且是类的一个组成...
在Java编程语言中,继承是一种面向对象编程的重要特性,它允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。这有助于代码重用,减少冗余,并实现多态性。在这个特定的程序中,我们看到了一个关于...
Java中的变量有三种类型:局部变量、成员变量(包括实例变量和静态变量)和全局变量。 1. **局部变量**:在方法、构造器或块内部定义的变量,仅在该范围有效。 2. **实例变量**:属于类的每个对象实例,每个实例都...
在Java编程语言中,类的成员变量分为两种类型:实例变量和类变量(或静态变量)。实例变量是每个对象独有的,而类变量是所有对象共享的。本文将深入探讨这两种变量的区别以及如何在实际编程中使用它们。 首先,实例...
在实际编程中,要根据需求合理选择使用实例方法还是类方法,以及何时应该使用类变量来存储数据。同时,合理利用Java的访问修饰符(public, private, protected, default)控制类方法和类变量的访问范围,以保证代码...
JAVA静态方法和非静态方法的区别和实例 静态方法和非静态方法是 Java 编程语言中两个基本概念,它们在编程实践中扮演着重要角色。了解它们的区别和使用场景对于编写高效、可维护的代码至关重要。 什么是静态方法?...
这里的 today 变量存储的是对 MyDate 对象的引用,并且可以通过 today 变量访问 MyDate 对象的成员变量和方法。 在 Java 中,引用类型的变量可以通过赋值操作来改变其指向的对象,例如 MyDate a, b; a = new MyDate...
理解这两者的区别和用法对于编写高效、清晰的Java代码至关重要。 **成员变量** 成员变量是定义在类的主体部分,而不是方法、构造器或初始化块内的变量。它们属于类的实例,因此,每个类的实例都有自己的一份成员...
1. **类的定义**:如何创建一个类,包括定义属性和方法。 2. **对象的创建**:使用new关键字和构造函数来实例化对象。 3. **访问控制**:理解public、private、protected等访问修饰符的作用。 4. **数据封装**:如何...
在Java编程语言中,类作为成员变量是一种常见的设计模式,它允许我们将一个对象实例嵌套在另一个类的内部,以此来实现数据封装和模块化。这种做法有助于组织代码,提高可读性和可维护性。下面将详细介绍如何在Java中...
在Java中,我们可以用两个`double`类型的实例变量来表示这两个部分。 ```java public class Complex { private double realPart; // 实部 private double imagPart; // 虚部 // 构造函数 public Complex...
在设计类和方法时,应根据它们是否需要访问实例变量以及是否与特定对象实例相关来决定使用静态还是实例方法。合理的使用静态方法和实例方法可以提高代码的可读性、可维护性和性能。在实际编程中,要根据具体需求灵活...
在Java编程语言中,静态变量和实例变量是两种不同类型的成员变量,它们在内存中的分配、生命周期、以及使用方式上有着显著的区别。本篇文章将详细探讨这两种变量的差异。 1. 内存分配: - 静态变量:静态变量是...
Java 中的静态变量、静态方法、静态块和静态类 Java 中的静态变量、静态方法、静态块和静态类是 Java 编程语言的四个重要概念,它们之间存在着紧密的关系。下面将对这四个概念进行详细的介绍。 一、静态变量...
Java编程语言中有三种主要的变量类型:成员变量(也称为实例变量)、类变量(也称为静态变量)和局部变量。理解这些变量之间的区别是学习Java基础的重要部分,这对于编写高效、可维护的代码至关重要。 1. 成员变量...