一、静态变量与实例变量的区别(对于常量和变量而言):
1. 局部变量:
局部变量是类的方法中的变量;
2. 实例变量:
实例变量也是类中独立于方法之外的变量,不过没有static修饰,也叫 对象变量
3. 类变量(静态变量):
类变量是类中独立于方法之外的变量,用static 修饰,也叫 静态变量
package static_study; /** * Created by Taoyongpan on 2017/5/3. */ public class Test { static String ss ;//类变量、静态变量 String s;//实例变量 public static void main(String[] args) { String is ;//局部变量 } }
4.实例变量与静态变量的区别:
静态变量也叫类变量,这种变量前加了static修饰符。可以直接用类名调用,也可以用对象调用,而且所
有对象的同一个类变量 都是共享同一块内存空间。
实例变量也叫对象变量,这种变量没有加static修饰符。只能通过对象调用, 而且所有对象的同一个实例
变量是共享不同的内存空间的。
静态变量是所有对象共有的,某一个对象将它的值改变了,其他对象再去获取它的值,得到的是改变后
的值;
实例变量则是每一个对象私有的,某一个对象将它的值改变了,不影响其他对象取值的结果,其他对象
仍会得到实例变量一开始就被赋予的值。
package static_study; /** * Created by Taoyongpan on 2017/5/3. */ public class Test02 { static int a = 0; int b = 0; } class test03{ public static void main(String[] args){ Test02 t1 = new Test02(); Test02 t2 = new Test02(); t1.a = 2; t1.b = 3; System.out.println(t2.a);//输出结果是2,静态变量是针对所有对象的,所以a1改变a,a2的a也改变 System.out.println(t2.b);//输出结果是0,实例只改变自身的,所以a1对象的b改变,不影响对象a2的b变量 } }
解释(一) : 在创建实例对象的时候,内存中会为每一个实例对象的每一个非静态成员变量开辟一段内
存空间,用来存储这个对象所有的非静态成员变量值。即使两个不同的实例对象是属于同一个类,它们的同
名非静态成员变量在内存中占用的空间是不同的。
静态成员变量有所不同。所有的实例对象都共用一个静态变量,内存中只有同一处空间存放这个静态变
量值的。因此,如果一个对象把静态变量值改了,另外一个对象再取静态变量值就是改过之后的值了。
解释(二):类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态
变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命
周期。
而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于
堆区中,其生命周期取决于实例的生命周期。
二、静态方法和非静态方法的区别(对于方法而言):
● 生命周期(Lifecycle):
静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭。
非静态方法(Non-Static Method)又叫实例化方法,属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当实例对象被JVM 回收之后,也跟着消失。
● 在内存中存储位置
静态方法和静态变量创建后始终使用同一块内存,是连续的。
非静态方法会存在于内存的多个地方,是离散的。
● 效率
静态方法的使用效率比非静态方法的效率高。
● 线程安全
静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发(Concurrence)的问题。
非静态方法是针对确定的一个对象的,所以不会存在线程安全的问题。
● 使用范围
静态方法:⒈ 有静态属性的类,一般会定义静态方法。⒉ 没有属性的类,一般会定义静态方法。⒊ 如果一个方法与他所在类的实例对象无关,那么它就应该是静态的。静态方法可以被继承但是不能被覆盖。
● 总计
如果静态方法在系统中定义太多,会占用大量的资源,最后造成内存溢出,所以静态方法不能滥用。如果从线程安全、性能、兼容性上来看,选用实例化方法为宜。
三、静态工厂和构造器(对于类而言):
.主要优点:
①静态工厂方法与构造器不同的第一大优势在于,他们有名称。
②静态工厂方法与构造器不同的第二大优势在于,不必每次调用他们的时候都创建一个新对象。
③静态工厂方法与构造器不同的第三大优势在于,他们可以返回类型的任何子类型的对象。
④静态工厂方法与构造器不同的第四大优势在于,在创建参数化类型实例的 时候,他们使代码变得更加简洁。
.主要缺点:
①类如果不含共有的或者受保护的构造器,就不能被子类化;
②他们与 其他的静态方法实际上没有任何区别。
相关推荐
本文将深入探讨Java中的静态块与静态方法,解析它们的区别、联系以及执行顺序,帮助读者更全面地理解`static`关键字在Java中的运用。 ### 静态方法 静态方法是通过`static`关键字声明的,它属于类而不属于类的任何...
2. **访问限制**:静态方法可以访问类的静态变量和静态方法,但不能直接访问非静态(实例)变量和方法,因为它们与特定的对象实例相关联。 3. **无this引用**:在静态方法内部,无法使用`this`关键字,因为它指向...
静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用 this 和 super 关键字,不能直接访问所属类的实例变量和实例方法。静态方法是类内部的一类特殊方法,只有在需要时才将对应的方法声明...
4. 用 private 修饰的 static 成员变量和成员方法,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用),但是不能在其他类中通过类名来直接引用,这一点很...
Java 中的 static 关键字是用于声明类的成员变量和成员方法的,它可以使得变量和方法属于类本身,而不属于某个对象。静态变量也称为类变量,静态方法也称为类方法。静态变量和静态方法可以直接通过类名调用,不需要...
在Java编程语言中,`static`关键字是一个非常重要的修饰符,它有多种用途,涉及到类、对象以及变量和方法的生命周期。本视频教程详细讲解了`static`关键字在Java中的应用及其背后的原理。 首先,我们要理解`static`...
在 Java 编程语言中,final 和 static 是两个非常重要的关键字,它们可以用来修饰类、方法、变量等,了解它们的使用方法和限制非常重要。本文将详细总结 final 和 static 的使用方法和限制。 一、final 关键字 ...
它允许我们创建与类关联而非特定实例关联的数据成员和方法。本文将详细介绍`static`属性的基本概念、静态成员变量、静态方法以及相关的应用场景。 #### 二、静态成员变量 静态成员变量也被称为类变量或静态属性,...
2. `static`方法:静态方法与类关联,而不是类的实例。它们不能访问非静态成员,因为它们在没有对象的情况下被调用。静态方法通常用于工具类或实用函数,如计算、排序等。 3. `static`嵌套类(内部类):这些类是类...
这意味着在静态方法内部,无法使用`this`或`super`关键字,也无法直接访问类的实例变量和实例方法,原因在于静态方法并不依赖于任何具体实例的存在。静态方法通常用于执行与类本身相关、而不依赖于任何特定实例状态...
在设计类和接口时,明智地使用`final`和`static`可以帮助实现更好的设计模式,例如单例模式(`static`与私有构造函数结合)和不可变对象(`final`类和属性)。在日常编程中,应根据需求合理选择和应用这两个关键字。
final 关键字是 Java 中的一种访问修饰符,用于修饰类、方法和变量,以确保它们不能被修改或继承。下面是 final 关键字的详细解释: 1. final 类 final 类不能被继承,也就是说,final 类不能有子类。final 类中的...
总结,`static`关键字在Java中用于声明类方法和类变量,它们与对象实例无关,由类共享。同时,`static`方法和变量在类加载时初始化。继承和重写是面向对象编程的关键特性,允许子类扩展和定制父类的行为,多态性则...
在Java编程语言中,`static`关键字用于定义类级别的成员,包括变量和方法。这些成员并不依赖于类的实例,而是直接与类关联。以下是关于Java中如何使用`static`变量和方法的详细解释: 1. **静态变量(Static ...
Java 1.8对接口有两个方面的增强:接口中可以添加使用default或者static修饰的方法 增加default方法:又叫做接口扩展方法,即在不破坏java现有实现架构的情况下能往接口里增加新方法, default关键字可以给接口添加...
普通导入的作用是将一个类或包导入到当前类中,以便可以使用该类或包中的成员变量和方法。例如,我们可以使用import语句来导入java.lang.Integer类,然后使用Integer.MAX_VALUE常量。 静态导入和普通导入的区别 ...
`static`在Java中用于声明类变量或静态方法,这些变量和方法不需要创建对象就能被访问。它们是与类关联的,而不是与类的任何特定实例关联。这意味着无论创建了多少个类的实例,静态变量只有一份拷贝,所有实例共享这...
在Java编程语言中,`static`关键字用于定义类级别的成员,包括变量和方法。静态成员不依赖于类的实例,而是直接与类相关联。这意味着它们在类加载时被初始化,并且所有类的实例都可以共享这些静态成员。下面将详细...