Java中静态和非静态的区别

在网上看到的,感觉还不错,自己笔记下来,以后忘了方便看:


非静态方法是相对于静态方法来说的。静态方法使用static关键字来标示,非静态方法没有此关键字。

他们之间最大的区别在于它们生命周期的不同,静态方法属于全局方法,当静态方法第一次被访问的时候,就将常驻内存直到整个系统被销毁;

而非静态方法则与类有关,只有该方法所在的类被实例化之后,该方法才能被访问,类被销毁的同时方法也被销毁。

生命周期的不同决定了它们的调用方式的不同,静态方法使用(类名.方法名)来调用,而非静态方法则需要(new 类名().方法名)来调用。同时与之相关的就是,静态方法不能调用非静态方法和属性。在了解了它们生命周期的不同后,这一点也比较好理解,因为静态方法生命周期比非静态方法和属性长,当调用非静态方法和属性时就会产生非静态方法和属性已经被销毁的情况导致程序出错。
时间: 2024-10-13 08:11:35

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

Java 中 静态方法与非静态方法的区别

静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这种方式.也就是说,调用静态方法可以无需创建对象. 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法:实例方法则无此限制. 下面几个例子展示了这一区别. 1.调用静态方法示例. //-----------文件名hasStaticMethod.java,程

内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例

内部类访问外部类的变量必须是final吗? 如下:class A{int i = 3;public void shout(){ class B{public void shout1(){System.out.println(i);} }B b=new B();b.shout1();} public static void main(String [] args){A a=new A();a.shout();} }可正常输出3,证明可以访问类的变量i,但改为下面的方式:class A{public

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

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

20151024_001_C#基础知识(静态与非静态的区别,值类型和引用类型,堆和栈的区别,字符串的不可变性,命名空间)

1:我们把这些具有相同属性和相同方法的对象进行进一步的封装,抽象出来类这个概念. 类就是个模子,确定了对象应该具有的属性和方法. 对象是根据类创建出来的. 2:类:语法 [public] class 类名 { 字段; 属性; 方法; } 写好了一个类之后,我们需要创建这个类的对象,那么,我们管创建这个类的对象过程称之为类的实例化.使用关键字new 实例化类===创建类 this:表示当前这个类的对象. 类是不占内存的,而对象是占用内存的. 结构是面向过程的,类是面向对象的,之前没有面向对象的时候

java中的关键字static(静态变量)和final定义常量

1 package point; 2 3 class Point { 4 5 int x = 0; 6 int y = 0; 7 static int z = 100; // 定义静态变量z,类变量 8 static final double PI = 3.1415926;// final定义常量,它的值在运行时不能被改变 9 10 Point(int a, int b) { 11 //PI=3.1415926; 12 /* 13 * 当使用静态常量的时候,不能在构造函数中初始化, 因为静态时,

03.静态和非静态的区别

静态和非静态的区别 方法,字段,属性都可以被static修饰. (1).在非静态类中,即可有实例(非静态)成员,可以有静态成员. 静态成员和非静态成员在调用上有什么不一样呢? (1.1)非静态成员(实例成员)必须被实例化对象之后,的对象名来调用. 对象名.实例成员名; (1.2)静态成员必须被定义它的类的类名来调用. 类名.静态成员名;      //注意,如果要在定义静态方法的类的内部使用静态 方法,我们可以省略类名.直接写. (1.3).静态方法可以访问静态成员,但是静态方法不可以访问非静态

静态和非静态的区别

声明 静态类和非静态类 1.非静态类中:既可以定义静态字段.静态属性.静态方法,也可以定义非静态(实例成员)字段.非静态(实例成员)属性.非静态(实例成员)方法. 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 静态和非静态的区别 8 { 9 10 /** 11 *

C# 面向对象3 静态和非静态的区别

静态和非静态的区别 1.在非静态类中,既可以有实例成员(非静态成员),也可以有静态成员. 2.在调用实例成员的时候,需要使用对象名.实例成员; 在调用静态成员的时候,需要使用类名.静态成员名; 总结:静态成员必须使用类名去调用,而实例成员使用对象名去调用. 静态函数中,只能访问静态成员,不允许访问实例成员. 实例函数中,既可以使用静态成员,也可以使用实例成员. 静态类中只允许有静态成员,不允许出现实例成员. 静态类不需要实例化对象来调用,只需要类名来调用. 使用: 1.如果你想要你的类当做一个"

C#中的静态和非静态

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

C# 关于静态与非静态的那点小事

所谓静态与非静态,无非就是在声明的时候多用了一个"static". 那么静态与非静态有什么区别呢? 1.对于非静态的成员,包括方法,字段,属性.调用的时候需要用实例化的对象来调用.(new出来的.) 而对于静态成员,调用的时候则需要使用类名去调用. 这就引申出一个问题,可不可以用静态类来实例化对象呢?答案当然是否定的,因为,实例化对象的目的,就是要用实例化的对象来调用属性,方法或字段.对于静态的类来说,      是用类名来调用的,所以对于静态类来说,完全不需要实例化一个对象.也就无法