1.从代码层面理解:

静态的,就是被static修饰符修饰的内容,常见的有:静态变量(又称全局变量),静态方法,静态内部类,静态代码块(局部变量也是静态的,但不需static修饰)等。

2.从概念层面理解:

静态的内容(属性,方法*下文同步)基于类而存在,非静态的内容基于对象而存在。也就是说静态内容是一类事物(即基于该类的所有对象)的共有特征,而非静态内容每个对象的独有特征。

(类:通俗的理解,类似于“物以类聚”中的类,即有共同特征事物的概括,等同于类别。

   对象:类中每一个独立的个体。用new 创建的每一个对象,都是独立存在的。面向对象:就是通过不同对象间(属性,方法等)的协调配合解决问题的思想)

(1)静态内容一旦修改,所有对象都会被影响,修改非静态内容,只会影响当前对象。

class Dog{
    String  color;
    static String sound="汪汪";
}

其中,color为实例变量,sound为静态变量。color 只能被对象调用,sound 既可以被类调用,又可以被对象调用:

Java什么时候使用静态方法 java中什么是静态_开发语言

Java什么时候使用静态方法 java中什么是静态_jvm_02

Java什么时候使用静态方法 java中什么是静态_非静态_03

 

解析:基于类而存在的内容,就是这一类事物的特征,所以对于每个对象来说都是一样的,一旦这个特征更改了,每个对象也便全改变了。而生活中类中的特征,本就是这类事务共同点的总结,他是通过对象得来的,比如狗都会汪汪叫,所以,狗类的特征(静态属性、方法)可以有叫声:“汪汪”。而狗不会飞,所以狗类的特征里才没有"飞"。而每个对象可能各不相同的特征(实例)也就是刚刚说的基于对象而存在的特征。狗的颜色不是全不一样的,每个狗类中的对象毛色都有差异,当有某只狗染色了,改变的也只有它自己而已,对其他狗没有影响:

Java什么时候使用静态方法 java中什么是静态_Java什么时候使用静态方法_04

Java什么时候使用静态方法 java中什么是静态_Java什么时候使用静态方法_05

(2)静态方法中,无法调用非静态内容:例:

Java什么时候使用静态方法 java中什么是静态_开发语言_06

解析:类可以说是一中概括、一个概念、或者一个总结,对象才是客观存在的实体。自然不能通过一个概念去使用什么功能或者得到反馈。就好像门口的狗笼贴了一张标签“此处养狗”,但里面却是空的,当然听不到都叫声或者达不到看家护院的目的。所以静态方法调用非静态内容,这不符合逻辑。 

3.从底层理解:

静态的:即系统自动分配内存空间。(当遇到这类内容,不需要开发人员动手,系统就会自动分配空间,一般在栈空间和方法区)

动态的:即需要开发人员手动分配内存空间(一般在堆空间,new对象的过程,也是分配空间的过程)

***为什么静态方法中,无法调用非静态内容:

静态内容,系统已经自动分配空间了,但非静态的系统不会自动分配空间,连空间都没有,怎么找得到相关内容呢?就好比一个人叫你去他家找他,可他却是个流浪汉。