文档章节

java中的实例成员与类成员

berg-dm
 berg-dm
发布于 2015/10/12 22:54
字数 1163
阅读 304
收藏 0

码上生花,ECharts 作品展示赛正式启动!>>>

  1.     首先, 类的目的是抽象出一类事物共有的属性和行为,并用一定的语法格式来描述所抽象出的属性和行为。也即是说,类是一种用于创建具体实例(对象)的数据类型。

  2.   类体中包括成员变量的声明和方法的定义,而成员变量又可细分为实例变量和类变量。在什么成员变量时,用关键字static给予修饰的称作类变量,否则称作实例变量,同样,方法类型前面不加关键字static修饰的方法是实例方法,否则则是类方法 , 例如:

public class Demo{
    int x;  // 实例变量 
    static int y;//类变量

    float max(float m , float n ){ //实例方法 
        .... 
    }  
    static float min(float m , float n ){ //类方法 
        .... 
    } 
}

    3. 明白实例变量和类变量的区别

        1)   不同对象的实例变量互不相同:

                一个类通过使用new运算符可以创建多个不同的对象,而这些对象将分配不同的成员变量,即分配给不同的对象的实例变量占有不同的内存空间。改变其中一个对象的实例变量不会影响其他的对象的变量。

        2)  所有对象共享类变量

                当类中存在类变量,当创建多个不同对象时,分配给这些对象的这个类变量占有相同的一处内存。改变其中一个会影响其他, 即说对象共享类变量。

        3)  通过类名直接访问类变量    

                当java程序运行时,类的字节码文件被加载到内存,如果该类没有创建对象,类中的实例变量不会被分配内存。但是,类中的类变量,在该类被加载到内存时,就分配了相应的内存空间。如果该类创建对象,那么不同的对象的实例变量互不相同,即分配不同的内存空间,而类变量不在重新分配内存,所有的对象共享类变量,即所有的对象的类变量是相同的一处内存空间。

 

    4.  实例方法和类方法的区别

    1)  对象调用实例方法

          当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,只有该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。  的那个创建第一个对象时,类中的实例方法就分配了入口地址,当在创建对象是,不在分配入口地址。即方法的入口地址被所有对象共享,当所有的对象都不存在时,方法的入口地址才会被取消。

            实例方法中不仅可以操作实例变量,也可以操作类变量。

    2)   类名调用方法

            对于类方法,在该类被加载到内存时,就分配了相应的入口地址,从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。类方法的入口地址知道程序退出才被取消。需要注意的是,实例方法不能通过类名调用,只能有对象调用。

和实例方法不同的是,类方法不可以操作实例变量,这是因为在类创建对象之前,实例成员变量还没有分配内存。

 /**
 * @author 牧羊的伯格女皇 
 * date: 2015-10-12 
 */
public class Lader { 
    private double upper; //上底
    private double height;  //高
    
    public static double bottom; // 下底  类变量 
    
    public double getUpper() {
        return upper;
    }
    public void setUpper(double upper) {
        this.upper = upper;
    }
    public double getHeight() {
        return height;
    }
    public void setHeight(double height) { 
        this.height = height;
    }
 
    public static double getBottom() {  //类方法 
        return bottom;
    }
    public static void setBottom(double bottom) {  //  类方法 
        Lader.bottom = bottom;
    }
    //求面积:
    public double laderarea(){     
        return (bottom+upper)*height/2;
    }
}



/**

 * TestLader.java

 * */

public class TestLader {
    public static void main(String[] args) {
        Lader laderOne = new Lader();
        Lader laderTwo = new Lader();
         
        Lader.bottom = 10;  //Lader的字节码被加载到内存,通过类名直接访问类变量
        System.out.println("通过类名直接访问类变量的值是:   " + Lader.bottom );   //  10
 
        laderOne.setHeight(10);
        laderOne.setUpper(10);
        double areaOne = laderOne.laderarea();
        System.out.println("通过类名直接调用执行类方法得到梯形One下底的值:  "+Lader.getBottom()); // 10
        System.out.println("求得梯形One面积为:  " + areaOne  + "\n" );  // 100

        laderTwo.setHeight(20);     
        laderTwo.setUpper(20);
        Lader.setBottom(20);  // 通过对象调用执行类方法  
        System.out.println("通过对象调用执行类方法得到的梯形Two下底的值:  "  + Lader.getBottom() );//20
        double areaTwo = laderTwo.laderarea();
        System.out.println("求得梯形Two面积为:  " + areaTwo  );   //400  
     }

}

 

 

 

 

 

 

© 著作权归作者所有

berg-dm
粉丝 28
博文 98
码字总数 88970
作品 0
深圳
程序员
私信 提问
加载中
请先登录后再评论。
java的static与C#的static的异同

static static同样可以用在类、方法、变量上面,但是在java和C#中所表示的意思完全不同,我个人的总结是C#中的静态和非静态是有一个明显的分界的,静态的是属于类级别的,而非静态的是属于实...

osc_eokjcpem
2018/05/11
4
0
Java关键字--static

在Java中,将关键字static分为三部分进行讨论,分别为Java静态变量、Java静态方法、Java静态类 Java Static Variables Java instance variables are given separate memory for storage. If ...

CBDoctor
2015/01/10
0
0
java 关键字final static native详解

java 关键字native static final详解 一、final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类,非抽象类成员方法和变量。 final类不能被...

osc_un9pvkc0
2018/03/15
11
0
Java类继承关系中的初始化顺序

Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释。 非继承关系中的初始化顺序 对于非继承关系,主类...

osc_dh0xu7zu
2018/01/07
11
0
java中static的作用详解

java中static关键字表示静态的意思,主要用于以下三点,static成员变量,static成员方法和static块。在类中如果定义了static类型的对象(变量或者方法),在java虚拟机(JVM)加载类时,该对...

osc_ewuhkqyk
2018/02/11
6
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka快速入门(九)——C客户端

Kafka快速入门(九)——C客户端 一、Librdkafka简介 1、librdkafka简介 librdkafka是C语言实现的Apache Kafka的高性能客户端,提供C++接口。librdkafka专为现代硬件而设计,尝试将内存复制保...

osc_b0i5ef6e
20分钟前
11
0
某二手交易平台大数据平台从 0 到 1 演进与实践

在人口流量红利不再,获客成本越来越高的时代,精益创业、MVP 的概念已经深入人心,精细化运营也是大势所趋,而这些背后本质上都依赖数据化运营,那如何根据现有业务,快速从 0 开始打造一个...

osc_1qix3fyb
21分钟前
10
0
一个屌丝程序猿的人生(一百一十二)

  “喂,林萧。”   电话的另一头想起了欧阳晓的声音,听上去似乎有些冷淡,让林萧不由得心中一紧。   “是我,你在干嘛?”林萧试探的问了一句。   “没干什么,有什么事吗?”   ...

osc_c1kk059r
23分钟前
19
0
flask + pyecharts 搭建新冠肺炎疫情数据可视化交互分析平台:包含疫情数据获取、态势感知、预测分析、舆情监测等任务

该项目是浙江大学地理空间数据库课程作业8:空间分析中,使用 flask + pyecharts 搭建的简单新冠肺炎疫情数据可视化交互分析平台,包含疫情数据获取、态势感知、预测分析、舆情监测等任务 包...

osc_qheq8wav
24分钟前
18
0
如何在Joomla管理面板中访问文件并进行编辑

在本教程中,我们将向您展示如何从站点管理员面板中编辑Joomla模板文件。 1.登录到Joomla管理员面板后,您需要导航至扩展 > 模板部分。 2.在下一个窗口中,再次从左侧列表中选择模板,然后单...

osc_sumf8h95
26分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部