说说java 中 static 的基础知识和易混点
来源:互联网 发布:澳洲188a投资移民 知乎 编辑:程序博客网 时间:2024/05/16 19:12
我主要从以下两个方面来介绍:
一、在一个类中的static的用法;
二、在继承关系中static的用法。
一、在一个类中的static的用法:
众所周知,static 可以修饰的内容有:成员变量、方法、代码块{}、class。下面分别来说:
1.static修饰成员变量,该变量可以通过类名直接访问,也可以通过静态方法访问。
2.static修饰方法,该方法可以通过类名访问,也可以通过其他静态方法访问。
3.static修饰代码块,代码块中的内容会根据定义的先后顺序加载。注意这里不能定义成员变量,要想访问方法也只能方法静态方法。
4.static修饰class一般用于内部类。
这里多说两句,就是内部类的用法。要想定义一个内部类,有两种方式:利用外部类的对象new出来;直接定义出来。
static修饰的内部类两种方式,都可以。只不过用第二种方式的时候,需要import进来响应的内部类。
非static修饰的内部类,只能通过第一种方式获取该类的对象。
二、在继承关系中static的用法(与以上四点对应)。
1.对于变量就不多说了,如果定义了同名变量默认情况下是掉子类的变量,用this.变量名 返回的也是子类的变量值,用super.变量名 返回的就是父类的变量值。
2.对于static方法的继承,话就多了。static方法是不能被重写的。我这里所说的重写,不是简单的子类去覆盖父类的方法,而是指的是多态的重写。在不写override的前提下,子类 可以再写一个和父类相同的static方法,但是不支持多态。变量定义的哪个类型,就会掉哪个类型的方法。这个设计到JVM中多态的运行机制,这个我在后边的文章中再进行讲 解。
3.代码块是不能继承的,但是这里我想说的是,静态代码块,构造函数,非静态代码块在子父类中的调用顺序问题。具体参考下这篇 http://blog.csdn.net/liufangbaishi2014/article/details/52959653 调用顺序为父类静态代码段->子类静态代码段->父类非静态代码段->父类构造方法->子类非静态代码段->子类构造方法
4.我直接说下内部类的继承
被static修饰的内部类可以直接定义,也可以通过外部类.内部类名来定义,因为JVM对static修饰的内部类没有什么限制。
被非static修饰的内部类不能直接定义,需要通过外部类.内部类来定义,而且你会发现报错。请见下图:
public class Text { class TextIner{}}
上边是内部类的定义,以下是调用:
class TextImpemtNei extends Text.TextIner{}报错了。
为什么呢?
继承于内部类的类,要想构造出来必须先加载其父类,但是其父类是依赖于外部类的,换句话说,如果他的外部类不加载,这个内部类是不是加载的。因为对于JVM的类加载器来说,它并不认识TextIner这个内部类,只有类加载器把其外部类加载进来之后,才可以加载内部类。那么如果使在使用这个继承于内部类的类时,调用了该内部类的外部类的构造方法,不就能使该外部类加载进来了吗?解决办法,就是这样,用下面这种方式继承非静态内部类就不会报错:
class TextImpemtNei extends Text.TextIner{ public TextImpemtNei(Text wi) { wi.super(); } }
- 说说java 中 static 的基础知识和易混点
- C++的基础知识和易出错误
- 说说Java中的static
- Document/XML常见用法和易混点
- Java - static的注意点
- C#和SQLserver的小知识点,和易错点
- 【C#基础知识扫盲点】static静态构造函数的理解
- java基础知识-static关键字
- java基础知识—java中static修饰符
- Java static 的一两点使用
- 说说对java中接口的理解
- QT中常见的技巧和易错的地方
- C语言中参数和易犯的错误
- Java基础知识扫盲点
- java中static的作用
- Java中static的作用
- Java中static的作用
- Java中static的理解
- 51nod 1278 相离的圆
- 洛谷 P1136 迎接仪式
- 51nod 1279 扔盘子
- shell, 文字游戏,在一个文本文件中查找出每个单词的使用频率并排序
- stack栈的用法
- 说说java 中 static 的基础知识和易混点
- 51nod 1283 最小周长
- JDK容器并发IO经典blog
- (一)单例模式详解
- 替换字段文本中的标签内容
- 51nod 1284 2 3 5 7的倍数
- Codeforces Round #375 (Div. 2) D. Lakes in Berland
- 图像处理中不适定问题
- ACM常用术语-----算法常用术语英中对照