在类中使用static修饰的静态方法会随着类的定义而被分配和装载入内存中;而非静态方法属于对象的具体实例,只有在类的对象创建时在对象的内存中才有这个方法的代码段。
1
注意:非静态方法既可以访问静态数据成员 又可以访问非静态数据成员,而静态方法只能访问静态数据成员;
非静态方法既可以访问静态方法又可以访问非静态方法,而静态方法只能访问静态数据方法。
原因:因为静态方法和静态数据成员会随着类的定义而被分配和装载入内存中,而非静态方法和非静态数据成员只有在类的对象创建时在对象的内存中才有这个方法的代码段。
引用静态方法时,可以用类名.方法名或者对象名.方法名的形式。
对以上描述进行验证的代码示例(小树亲测):
import java.util.*;
public class TestStatic {
public static void main(String[]args){
System.out.println(S.getStatic());//使用类名加前缀访问静态方法
S s=new S();
System.out.println(s.getStatic());//使用实例化对象名访问静态方法
System.out.println(s.get());
}
public static class S
{
private static int a;
private int t=0;
//静态初始器:由static和{}组成,只在类装载的时候(第一次使用类的时候)执行一次,往往用来初始化静态变量。
static{
a=10;
}
//静态方法只能访问静态数据成员
public static int getStatic()
{
return a;
}
public int getT()
{
return t;
}
//非静态方法可以访问静态方法和非静态方法
public int get()
{
getT();
getStatic();
t=a;//非静态方法可以访问非静态数据成员和静态数据成员
return t;
}
}
}
总结:
(1)static修饰的静态方法会随着类的定义而被分配和装载入内存中,编译器只为整个类创建了一个静态变量的副本,也就是只分配一个内存空间,虽然可能有多个实例,但这些实例共享该内存,特别值得注意的是,任何一个对象对静态数据成员的修改,都会影响其它对象。
(2)静态不能引用非静态这一特性,是由于静态的会随着类的定义而被分配和装载入内存中这一关键点决定的;如果静态引用了非静态的,根本无法从内存中找到非静态的代码段,势必会出错,这种做法是Java虚拟机决不允许的。
静态同步块的门闩是类的字节码对象,非静态同步块的门闩是类的实例对象,相互不会阻塞
原文:https://blog.csdn.net/qq_28511781/article/details/71405945
相关推荐
### Java中的Static概念详解 ...通过上述分析,我们可以清楚地看到`static`关键字在Java中是如何被运用的,及其在变量、方法和代码块管理上的独特优势。理解这些概念,对于编写高效、可维护的Java代码至关重要。
Java 方法的定义和方法的重载 Overload Java 方法是 Java 编程语言的基本组成部分之一。方法是解决问题的多行代码的集合,给予一个名字,以便多次使用。方法的定义和方法的重载是 Java 编程语言的基础知识,本文将...
普通导入的作用是将一个类或包导入到当前类中,以便可以使用该类或包中的成员变量和方法。例如,我们可以使用import语句来导入java.lang.Integer类,然后使用Integer.MAX_VALUE常量。 静态导入和普通导入的区别 ...
Java 中的 `static` 关键字用于声明静态变量和静态方法,这些都是类级别的,与类的实例无关。静态方法可以在不创建对象的情况下被调用,它们通常用于工具类或者类的辅助方法。例如,Java 的 `Math` 类就提供了一系列...
Java8新特性之interface中的static方法和default方法 Java8中引入了interface中的static方法和default方法,这两个新特性极大地增强了interface的功能,方便了开发者在编程时的使用。本文将详细介绍这两个新特性,...
除了变量和方法外,`static`还可以用来修饰内部类。当内部类被声明为`static`时,它就变成了一个静态内部类。静态内部类的特点是不依赖于外部类的实例就可以创建自己的实例,同时它不能访问外部类的非静态成员。 ...
Java中的`static`关键字是编程中的一个重要概念,它在Java语言中扮演着多个角色,尤其在处理类和对象时起到关键作用。`static`关键字可以用来修饰成员变量、方法、代码块以及内部类,每种情况都有其特定的含义和用途...
- 它的静态成员和方法可以直接用类名调用,与普通类相似,非静态成员则需要通过类实例访问。 在实际开发中,`static`关键字和内部类的使用能够帮助我们更好地组织代码,提供封装性,并在处理某些特定问题时提供...
在Java编程语言中,构造方法和普通方法是两种不同的函数,它们各自有着特定的作用和特点。下面我们将详细探讨这两者之间的区别。 首先,我们来看**普通方法**。普通方法是类中定义的一段代码,用于执行特定的任务。...
了解这些概念对理解和编写Java程序至关重要,特别是在涉及类的继承、对象初始化和方法重写时。正确地使用构造方法和普通方法,以及理解`this`和`super`关键字,能够帮助我们编写更加高效、可维护的代码。
Java中的静态内部类(Static Class),也称为嵌套静态类,是Java语言提供的一种独特机制,它允许我们在一个外部类内部定义一个静态的类。这种类的声明前面带有`static`关键字,与普通的内部类(非静态内部类)有所...
一、模板类,里面包括:成员变量、静态变量、普通代码块、静态代码块、普通方法、静态方法、构造函数、静态内部类(包括:成员变量、静态变量、普通代码块、静态代码块、普通方法、静态方法、构造函数)。
- **Static**:静态的,用于声明静态变量和方法。 变量的声明可以分为可访问修饰符、静态、常量和 volatile: 1. **可访问修饰符**(如 public, private, protected)决定了变量的可见范围。 2. **Static**:声明...
Java编程语言的构造方法不同于普通方法之处有几点:构造方法名必须与类名相同,普通成员方法的方法名一般不能和类名相同;构造方法不能返回值,普通成员方法可以返回值;构造方法不能有以下非访问性质的修饰:...
首先,"static" 关键字在 Java 中主要负责声明类级别的变量和方法,而不是实例级别的。这意味着它们属于类本身,而不属于任何特定的对象实例。当我们定义一个 static 变量时,所有对象共享同一个变量的值;对于 ...
在Java多线程编程中,`Thread` 类的 `run()` 方法和 `start()` 方法扮演着不同的角色,它们之间的区别是理解并发执行的关键。 首先,`start()` 方法是真正启动新线程的方法。当你调用 `Thread` 对象的 `start()` ...
正确理解和应用`static`关键字对于开发高质量、可维护的Java应用程序至关重要。 #### 二、静态成员变量 **定义与声明:** 静态成员变量也被称为类变量,是指在类中定义时使用`static`修饰符的变量。此类变量不...
在Java面试中,`static`关键字是一个常见的考察点,因为它涉及到类和对象的生命周期、内存管理以及多线程安全等方面。下面我们将深入探讨`static`关键字的用途和特性。 首先,`static`关键字可以用来修饰: 1. ...
### 普通Java类获取Request的方法 在Java Web开发中,经常需要在非Servlet类(如普通Java类)中获取`HttpServletRequest`对象,以便访问请求中的参数、头信息等。通常情况下,`HttpServletRequest`对象是在Servlet...
方法定义包括返回类型、方法名、参数列表和方法体。例如: ```java public int add(int a, int b) { return a + b; } ``` 这里,`int`是返回类型,`add`是方法名,`(int a, int b)`是参数列表,方法体内的代码...