运维开发网

Java中的静态字段方法

运维开发网 https://www.qedev.com 2022-05-22 16:54 出处:网络
这篇文章主要介绍了Java中的静态字段和静态方法,文章围绕Java?静态方法展开详细内容,具有一定的参考价值,需要的小伙伴可以参考一下

这篇文章主要介绍了Java中的静态字段和静态方法,文章围绕Java?静态方法展开详细内容,具有一定的参考价值,需要的小伙伴可以参考一下

先看看下面的代码串:

public class Main {? ? public static void main(String[] args) {? ? ? ? System.out.println("Hello, WOrld!");? ? }}

我们的??主要??方法有标记??静电??那么修饰语呢??静电??这个修饰语是什么意思?


一、静态变量

如果一个字段被定义为静态的,那么每个类只有一个这样的字段。

我们先来看看没有静态静态遍历的类:

class Student {? int stuId;? String name;? String school = "HY No.1 High School";}

假设高中有1500名学生,现在上述代码的所有实例数据成员在每次创建一个对象时都会获得内存。

所有学生都有他们唯一的stuId和名字,在这种情况下这些实例数据成员是正确的。毕竟都是独一无二的。

然而,quot这里学校quot是所有对象的共同属性。如果没有声明为静态变量,也会占用多个内存。但是如果我们把它变成静态的,这个字段只会得到一次内存。


静态变量声明class Student {? int stuId; ?// 实例变量? String name;? static String school = "HY No.1 High School"; // 静态变量}

如果你声明一个变量为静态的,它被称为静态变量。

静态变量可以用来指代所有对象的共同属性(对每个对象来说不是唯一的),例如,雇员的公司名称,学生的学院名称等。静态变量只在类加载时在类区获得一次内存。


静态变量测试

测试:

package com.yuzhou1su.RelearnJava;class Student {? ? int stuId;?? ? String name;? ? static String school = "HY No.1 High School";??? ? Student(int id, String n) {? ? ? ? stuId = id;? ? ? ? name = n;? ? }? ? void display() {? ? ? ? System.out.println("Student id:" + stuId + ", Name:" + name + " is from " + school);? ? }}public class TestVariable {? ? public static void main(String[] args) {? ? ? ? // TODO Auto-generated method stub? ? ? ? Student s1 = new Student(001, "Karsa");? ? ? ? Student s2 = new Student(002, "Ellen");? ? ? ? s1.display();? ? ? ? s2.display();? ? }}

执行结果:

学号:1,姓名:Karsa来自HY一中
学号:2,姓名:Ellen来自HY一中

静态变量只获得一次内存,如果任何对象改变了它的值,它将保持它的值。

请看下面的代码:

package com.yuzhou1su.RelearnJava;public class StaticVariableCount {??? static int count = 0;??? StaticVariableCount() {? ? count++;? ? System.out.println(count);? }? public static void main(String[] args) {? ? // TODO Auto-generated method stub? ? StaticVariableCount svc1 = new StaticVariableCount();? ? StaticVariableCount svc2 = new StaticVariableCount();? ? StaticVariableCount svc3 = new StaticVariableCount();? ??? }}

测试结果:

1
2
3


二、静态方法

Java中的静态方法是属于一个类的方法,但不被认为是那个类的实例;相反,Java中的静态方法可以很容易地创建和实现,不需要任何实例调用。静态方法可以访问类中的任何数据成员,对数据成员执行任何操作,或者将任何数值作为输入,尽管要访问的成员变量应该具有类中的变量范围,并且方法只能是静态的。

public static void syntax_ex (String_name) {? ? Body of the program for execution.}public。该类的访问修饰语是public。static。方法的范围是静态的,这意味着所有的成员变量和返回类型都在静态的范围内。void。语法流程中的这个关键字表示在当前方法中没有处理任何返回类型。syntax_ex。类的名称,表示静态方法是当前定义的类的一部分,后面是字符串名称。body。它包括整个核心逻辑或业务逻辑(如果需要在静态模式下)。

如果您在任何方法上使用了静态关键字,它就被称为静态方法,

静态方法:

静态方法属于类,而不是属于类的对象。静态方法可以被调用而不需要创建一个类的实例。静态方法可以访问静态数据成员,并可以改变它的值。


静态方法测试

如果我们要改变学习名字的操作呢?您可以声明一个静态方法。

package com.yuzhou1su.RelearnJava;class Student {? ? int stuId;?? ? String name;? ? static String school = "HY No.1 High School";? ??? ? static void changeSchool() {? ? ? ? school = "HY No.5 High School";? ? }??? ? Student(int id, String n) {? ? ? ? stuId = id;? ? ? ? name = n;? ? }? ? void display() {? ? ? ? System.out.println("Student id:" + stuId + ", Name:" + name + " is from " + school);? ? }}public class TestVariable {? ? public static void main(String[] args) {? ? ? ? // TODO Auto-generated method stub? ? ? ??? ? ? ? Student.changeSchool();? ? ? ? Student s1 = new Student(001, "Karsa");? ? ? ? Student s2 = new Student(002, "Ellen");? ? ? ? s1.display();? ? ? ? s2.display();? ? }}

测试结果:

学号:1,姓名:Karsa来自HY五中
学号:2,姓名:Ellen来自HY五中


静态方法是如何工作的静态方法和实例方法是 Java 中的两种方法,它们在程序员中造成了一些混乱,但这仅仅是一种误解。静态方法和实例方法都有很大的区别。让我们看看静态方法在 Java 中是如何工作的。Java 中的静态方法是一种驻留在类中的方法,即使没有创建对象或没有进行实例化,也可以访问。在类的名称后面加上方法的名称并传递参数,就可以访问该类的任何实例。它可以被表示为??ClassName.methodName(arguments)?? 。此外,这些方法的组成有一个目标,即该方法应可与类中的所有成员变量和每个人的对象共享,其范围由修改器 ??static?? 定义。这些方法没有任何重载的能力;相反,它们可以在编译时使用编译器的静态绑定来重载,每当程序员需要在类的所有实例、对象或成员变量之间共享一个共同的代码片段时,静态方法就会成为救星,因为它通过创建一个共同的静态范围来为所有成员、对象和变量创造一种共享的规定。一个类的所有静态字段都可以使用静态字段作为一个类的静态方法的一部分进行访问。另外,静态方法也与内存分配功能有关,并且也是可以支持的。它将静态方法字段和变量的一部分与一些永久生成的堆存储在内存中,用于关联值。内存分配不支持对象作为静态方法堆的创建,或者方法本身不支持实例化。但接下来的问题是,静态方法是如何通过共享和创建所有成员的范围作为类的一部分来工作的。


为什么 Java Main 方法是静态方法

这是因为对象不需要调用静态方法。如果是非静态方法,JVM会先创建一个对象,然后调用??main()??方法,这导致了额外内存分配的问题。

main方法不对任何对象进行操作。事实上,程序启动时没有对象。的静态main方法将执行和构造程序所需的对象。


三、静态常量

很少使用静态变量,但经常使用静态常量。例如,在Math类中定义了一个静态常数:

public class Math {? public static final double PI = 3.14159265358979;}

然后在程序里,你可以用数学。PI来访问这个常数。


四、总结

Java中为什么需要静态变量?

答:每当我们希望一个类的所有对象都有一个公共属性时,我们就使用一个类级变量,也就是一个静态变量。

加载类时,该变量只在内存中加载一次。因为在Java中不是由object定义的,所以可以节省内存。

为什么在Java中创建静态变量不是一个好习惯?

答:静态变量对一个类的所有对象都是通用的。如果创建了一个新对象,就不需要测试静态变量的值。任何使用静态变量的代码都可以处于任何状态。它可以在新对象中,也可以在类级别。因此,静态变量的作用域在Java类中是开放的。

如果我们想更严格地控制范围,变量应该在对象创建级别创建。

同样,定义静态变量也不是一个好习惯,因为它们违背了面向对象编程的原则。

Java中静态方法的用途是什么?

答:Java提供了静态方法的功能来创建类级别的行为。静态方法对该类的所有对象都是通用的。我们不需要创建类的任何对象来调用静态方法。因此,它提供了不创建对象来调用它的便利。

方法还可以访问和修改静态数据成员。这也有助于维护类级别的行为和状态。

为什么在Java中main方法被标记为静态方法?

答:Java中的main方法被标记为static,所以JVM可以调用它来启动程序。如果main方法不是静态的,Java进程会调用哪个构造函数?

因此,在Java中将主方法标记为静态是一个众所周知的约定。但是,如果我们去除静电,它将是不明确的。Java进程可能不知道调用哪一类方法来启动程序。

因此,这种约定有助于Java进程识别类中程序的启动代码,该代码作为参数传递给Java进程。

我们在什么情况下使用静态块?

答:有时候,有一个类有静态成员变量。这些变量需要一些复杂的初始化。这时,静态块可以作为初始化复杂静态成员变量的工具。静态块甚至在main执行之前就被执行了。有时候,我们也可以用静态类方法替换静态块。

有没有可能不定义main()方法就执行一个程序?

答:不是,从Java 7开始,需要main()方法来执行程序。在Java的早期版本中,有一个解决方案可以用来执行静态块。但是现在这个差距缩小了。

当静态修饰符没有在主方法的签名中被提及时会发生什么?

答:根据Java规范,main方法必须标记为static。它只需要一个字符串数组的参数。

可以使用非静态方法编译程序。但是执行时会给出NoSuchMethodError。

Java中静态方法和实例方法的区别?

答:通常,您需要为不依赖于对象成员变量的类定义行为。这种行为是由静态方法捕获的。如果有一个行为依赖于一个对象成员变量,我们不会把它标记为静态,而是把它保持为一个实例方法。

要作为静态方法调用,我们不需要创建对象。我们只用类名来称呼它。但是要调用实例方法,我们需要先创建/获取一个对象。

不能通过静态方法访问实例变量。但是实例方法可以调用实例变量和静态变量。

这就是这篇关于Java中静态字段和静态方法的文章。关于Java静态方法的更多信息

0

精彩评论

暂无评论...
验证码 换一张
取 消