Java中static静态与非静态的区别

先前看到一个技术大牛写了一个关于静态成员与非静态成员,静态方法和非静态方法的各自区别,觉得挺好的,在这里写一个小程序来说明这些区别。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

package com.liaojianya.chapter5;

/**

 * This program will demonstrate the use of static method.

 * @author LIAO JIANYA

 *

 */

public class StaticTest

{

    public static void main(String[] args)

    {

        System.out.println("用对象调用非静态方法");

        MyObject obj = new MyObject();

        obj.print1();

        System.out.println("用类调用静态方法");

        MyObject.print2();

        

    }

}

class MyObject

{

    private static String str1 = "staticProperty";

    private String str2 = "nonstaticProperty";

    

    public MyObject()

    {

        

    }

    

    public void print1()

    {

        System.out.println(str1);//非静态方法可以访问静态域

        System.out.println(str2);//非静态方法可以访问非静态域

        print2();//非静态方法可以访问静态方法

    }

    

    public static void print2()

    {

        System.out.println(str1);//静态方法可以访问静态域

//      System.out.println(str2);  //静态方法不可以访问非静态域

//      print1();//静态方法不可以访问非静态方法

    }

}

  

 输出结果:
用对象调用非静态方法
staticProperty
nonstaticProperty
staticProperty
用类调用静态方法
staticProperty

该注释部分如果去掉注释符号,就会两个报错:

第一个注释去掉后引起的错误1:

Cannot make a static reference to the non-static field str2

第二个注释去掉后引起的错误2:

Cannot make a static reference to the non-static method print1() from the type MyObject

结论:静态的方法不能访问非静态的成员变量;静态的方法同样不能访问非静态的方法。

其实就是一句话:静态的不能访问非静态的,而非静态的可以访问静态的并且可以访问非静态的。

同时:静态的方法是可以通过类名来直接调用,无需对象调用,从而减少了实例化的开销。

时间: 2024-10-23 20:59:49

Java中static静态与非静态的区别的相关文章

java静态与非静态区别

这里的静态,指以static关键字修饰的,包括类,方法,块,字段. 非静态,指没有用static 修饰的. 静态有一些特点: 1.全局唯一,任何一次的修改都是全局性的影响 2.只加载一次,优先于非静态 3.使用方式上不依赖于实例对象. 4.生命周期属于类级别,从JVM 加载开始到JVM卸载结束. 可参考 :http://blog.csdn.net/zhandoushi1982/article/details/8453522/. 关于静态内部类(嵌套类)和非静态内部类的区别,可参考: http:/

C#中的静态和非静态

C#中的类和类成员都是默认为非静态,只有加上"static"关键字的才是非静态 两者用起来其实都非常简单.虽然调用方式不同,但其最终的机制都是一样的. 主要区别在于非静态依靠对象来调用,静态利用类来调用,即静态属于整个类,并不属于某一实例. 静态内部只能调用已经确定的变量,即静态内部只能调用静态和已经实例化之后的成员. 非静态就所有都可以调用 具体看下面的代码 /// <summary> /// 非静态类 在这儿我们把它所有成员都定以为非静态 /// </summar

随笔⑨ java中的变量 --- 类变量(静态变量),final变量,成员变量,局部变量

java中的变量 --- 类变量(静态变量),final变量,成员变量,局部变量 ① 类变量(也叫静态变量)是类中独立于方法之外的变量,用static 修饰,静态变量随着类的加载而加载. ② final变量:用final关键字修饰,不能被修改.与static一起用可表示常量. ③ 成员变量(也叫"实例变量"."域"):也是类中独立于方法之外的变量,不过没有static修饰.可以不进行初始化,Java会自动进行初始化,如果是引用类型默认初始化为null,如果是基本类型

java中static作用详解

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类

java中static的使用

我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,有时候,我们希望该类的所有成员共享一个成员.这时可以用static来修饰. Java中static作为修饰符,可以用来修饰变量.方法.代码块. 1.静态方法 被static修饰的变量成为静态变量,又可以成为静态成员或类成员.它属于整个类所有,而不是某个对象所有,被类的所有对象共享.类变量在类加载的时候初始化分配空间,而且只被初始化一次,直到该类被卸载时才将资源回收. 静态成员可以使用类名直接访问,也可以使用对象进行访问.在程序中任何

静态与非静态的使用与区别

静态变量.静态方法.静态代码块.非静态变量及非静态方法的简单介绍 转载自:http://xixinfei.iteye.com/blog/1256085 静态变量 静态变量是类中的一种特殊变量,他在运行是可以说是从属于类,也就是说由该类定义生成的所有对象共用同一个静态变量,内存中只有一个版本.这对于要求在程序运行过程中,只有一个对象副本存于内存非常重要,如在实现单例模式时,为了实现只有一个类对象存于内存中,我们把内对象定义为一个静态变量:为了确保这个执行过程中,只有一个Connection对象村与

[java基础]java中static关键字

1.static概念 static是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在. 这样做有什么意义呢? 在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用sta

Java中static、final用法小结(转)

一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变.其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中.这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值. 当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的

java中static关键字总结

Java中,static关键字一般情况下有四种用法: 用来修饰一个变量. 用来修饰一个方法. 用来修饰一个内部类. 用来修饰一段代码块. 1 public class Student{ 2 String name; 3 static int count;//static修饰的变量 4 static{//static修饰的代码块 5 count=0; 6 } 7 public static void playGame(){//static修饰的方法 8 System.out.println("我爱

Java中static、final用法小结

一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变.其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中.这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值. 当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的