static与non-static的区别。可以这样理解。
某个对象的特性分为类特性与实例特性。类特性是与类相关的。如
class Student{
static int numberOfStudent;
........
}
这里numberOfStudent是学生数。是与Student类相关的一个数据。
而实例特性是每个对象本身自己的特性。如:
class Student{
int number;
String name;
........
}
这里的number(学号),name(姓名)。是与每个对象自身相关的。
static与non-static是对立的。static应当(注意是应当)使用类名来引用。而non-static必须(是必须)使用对象实例名来引用。
static与non-static在引用数据成员方面的差别:因为static、non-static的数据相关性,static只能引用类的static数据成员;而non-static既可以引用类的static数据成员,也可以引用对象自身的数据。
static与non-static method在overload方面是一样的。
而static与non-static method在override方面则完全不同。static方法是与类相关的,不是通过this引用的,所以它不能被override。其引用在编译期就得确定。而non-static方法才有可能被override。
static与abstract,它们不能同时用于修饰一个方法。因为abstract的语义就是说这个方法是多态方法,需要subclass的实现。而static方法则是在本类中实现的,编译期绑定,不具有多态行为。
static与interface,interface中的method也不能是static的。理由同上。但其数据成员
are all static, no matter you mark it static or not 。
多态只限于方法,所以,无论static还是non-static的成员变量,引用的是哪个在编译期就已经确定。
[补充]
static与final。在C与C++中经常在函数与全局里面使用static变量。它的语义与Java里面static的语义已经不同。C与C++中 static的语义是,“其生命期不依赖于该函数作用域,而其作用域(可引用该变量的范围)仅限于该函数作用域。在函数第一次执行时被初始化,当函数返回时其值依然存在。”
而Java里面的static则如前所说,”将变量或者方法(注意这里可以修饰方法)与类绑定,指定与类相关”。
final在修饰变量时表示“变量不可变”,近似于C++里面的const。而其修饰方法时,指示实例方法不可被override。而static修饰的是类方法。其绑定机制指示其不可被override。
static与final可以同时修饰一个方法,这样并不会有语法错误。但是别这么用。在画蛇添足以外,还会让人怀疑你对Java语言的认识程度。
分享到:
相关推荐
深入理解C++11-C++11新特性解析与应用, 文件小而清晰,
non-static member function cannot be static(解决方案).md
$ npm install --save hoist-non-react-statics用法import hoistNonReactStatics from 'hoist-non-react-statics' ;hoistNonReactStatics ( targetComponent , sourceComponent ) ; 如果您不想悬挂特定的静态变量,...
RuntimeError: Legacy autograd function with non-static forward method is deprecated. Please use new-style autograd function with static forward method. (Example: ...
Static and dynamic random-access memories (SRAM and DRAM) are examples of volatile memories that can be accessed in nanosecond of speed, but the stored data will be lost when powered off. The flash ...
7. **静态与非静态(Static vs Non-Static)**: - 静态成员属于类,而非静态成员属于类的实例。"静态与非静态.cs"可能解释了何时使用静态类、静态方法和静态字段,以及它们与非静态成员的区别。 8. **打印三角形...
生命游戏,全称为Conway's Game of Life,是由英国数学家约翰·何顿·康威在1970年提出的一种模拟生物演化过程的抽象游戏。这个游戏在一个二维网格上进行,每个网格点代表一个细胞,根据其周围细胞的状态,遵循简单...
警告:主人是开发部门。 请使用v1.9分支。 clazy v1.10 clazy是一个编译器插件,允许clang理解Qt语义。 您会收到50多个与Qt相关的编译器警告,范围从不必要的内存分配到API的滥用,包括用于自动重构的修复程序。...
可以作用在类上和属性上,放在类上,会对所有的非静态(non-static)属性生成Getter/Setter方法,放在属性上,会对该属性生成Getter/Setter方法。并可以指定Getter/Setter方法的访问级别。 @EqualsAndHashCode ...
The problem of static state feedback linearization of switched non-linear systems is investigated. First, we consider the regular state feedback linearization. In this case, the single-input switched ...
在本项目中,我们探讨了如何使用Java图形用户界面(GUI)来实现经典的“细胞生命游戏”。这个模拟游戏由数学家约翰·康威在1970年提出,旨在研究简单规则下的复杂行为。让我们详细了解一下如何利用Java GUI技术来...
### 解决VC错误 在开发过程中,遇到编译器错误是常见的问题,特别是对于使用Microsoft Visual C++(简称VC)的开发者来说。本篇文章将详细探讨如何解决VC编译时出现的“解决VC错误”这一常见问题,并通过具体实例...
数据结构在航空客运订票系统中的应用 在航空客运订票系统中,数据结构起着至关重要的作用。它涉及到如何高效地存储、管理和检索乘客信息、航班信息、座位分布等大量数据。本课程设计旨在通过实际操作,让学生深入...
在本文中,我们将深入探讨如何在安卓平台上使用CaysnPrinter进行打印操作,这是一个专为Android设备设计的打印开发包。我们将主要关注标题为"Sample4_20160927"的示例代码,它展示了如何利用PrinterLibs for Android...
在PHP编程中,`Strict Standards`错误是一种标准警告,它表示你的代码不符合PHP的最新推荐实践,特别是关于变量引用的规定。...在你提供的标题和描述中,遇到的错误是“Strict Standards: Only variables should be ...
-shared --disable-static --disable-encoder=snow --disable-decoder=ac3 --disable- decoder=vorbis --disable-encoder=vorbis --disable-vhook --enable-ffplay --disabl e-ffserver --disable-mpegaudio-hp --...
public static void main(String[] args) { Person person = new Person("John", 30); Optional<Person> optional = Optional.ofNullable(person); if (optional.isPresent()) { System.out.println("Person ...
在IT行业中,封装是软件开发过程中的一个重要环节,特别是在嵌入式系统或DSP(数字信号处理器)编程中。封装能够确保代码的模块化,提高可重用性和维护性。这里,我们将深入探讨在封装过程中遇到的几个具体问题,并...