题记:其实类的加载顺序没有什么,但是就是容易忘,过几天就不记得了,我相信点进来的你要么是不想自己验证,要么就是也忘了直接问的度娘要结果。我来记录一下以防以后在忘了!
一、单独类的加载顺序(以父类来为例子)
父类静态语句块1
父类静态语句块3
父类静态语句块2
父类非静态语句块1
父类非静态语句块2
父类构造函数
一般非静态方法!
一般静态方法!
总结:
- 静态代码块最先加载,加载顺序和代码的书写顺序有关从上往下以此执行。
- 第二是非静态代码块,加载顺序也是自上而下以此执行。
- 第三是构造代码块
- 一般方法是最后且他的输出顺序是你调用的顺序,这个和创建没有关系,你怎么调用就怎么显示!
下边是示例代码:
public class FuJava1 {
//静态语句块
static {
System.out.println("父类静态语句块1");
}
//静态语句块
static {
System.out.println("父类静态语句块3");
}
//静态语句块
static {
System.out.println("父类静态语句块2");
}
//非静态语句块
{
System.out.println("父类非静态语句块1");
}
//非静态语句块
{
System.out.println("父类非静态语句块2");
}
//非静态方法
public void notStaticMethod() {
System.out.println("父类非静态方法");
return;
}
//静态方法
public static void staticMethod() {
System.out.println("父类静态方法");
return;
}
//无参构造函数
public FuJava1() {
System.out.println("父类构造函数");
}
//一般静态方法
public static void normalMethod(){
System.out.println("一般静态方法!");
}
//一般非静态方法
public void normalMethod1(){
System.out.println("一般非静态方法!");
}
public static void main(String args[]) {
FuJava1 fuJava1=new FuJava1();
fuJava1.normalMethod1();
normalMethod();
}
}
二、是继承的加载顺序
父类静态语句块1
父类静态语句块2
父类静态语句块3
子类静态语句块1
子类静态语句块2
子类静态语句块3
父类非静态语句块1
父类非静态语句块2
父类构造函数
子类非静态语句块1
子类非静态语句块2
子类构造函数
这个直接上代码了,没什么好解释的!
FuJava2的代码:
package top.wj.fuzi;
public class FuJava2 {
//静态语句块
static {
System.out.println("父类静态语句块1");
}
//静态语句块
static {
System.out.println("父类静态语句块2");
}
//静态语句块
static {
System.out.println("父类静态语句块3");
}
//非静态语句块
{
System.out.println("父类非静态语句块1");
}
//非静态语句块
{
System.out.println("父类非静态语句块2");
}
//非静态方法
public void bDisplay() {
System.out.println("父类非静态方法");
return;
}
//静态方法
public static void bTest() {
System.out.println("父类静态方法");
return;
}
//构造函数
public FuJava2() {
System.out.println("父类构造函数");
}
public static void main(String args[]) {
ZiJava2 ziJava2 = new ZiJava2();
}
}
ZiJava2的代码:
package top.wj.fuzi;
public class ZiJava2 extends FuJava2 {
public static String lcyhh() {
System.out.println("子类静态变量");
return "静态变量";
}
//静态语句块
static {
System.out.println("子类静态语句块1");
}
//静态语句块
static {
System.out.println("子类静态语句块2");
}
//静态语句块
static {
System.out.println("子类静态语句块3");
}
//非静态语句块
{
System.out.println("子类非静态语句块1");
}
//非静态语句块
{
System.out.println("子类非静态语句块2");
}
//非静态方法
public void bDisplay() {
System.out.println("子类非静态方法");
return;
}
//静态方法
public static void bTest() {
System.out.println("子类静态方法");
return;
}
//构造函数
public ZiJava2() {
System.out.println("子类构造函数");
}
}
三、参数的值打印
父类静态变量i=null
父类静态语句块1静态变量
父类静态语句块2
父类静态语句块3
子类静态变量
子类静态语句块1静态变量
子类静态语句块2
子类静态语句块3
aa==0
aa==11
父类非静态变量
父类非静态语句块1
父类非静态语句块2
父类构造函数
bb==3
子类非静态变量
子类非静态语句块1
子类非静态语句块2
子类构造函数
总结:
这个是添加了变量的赋值
FuJava3的代码:
package top.wj.fuzi;
public class FuJava3 {
int aa;
//静态变量
static String i = lcy();
public static String lcy() {
System.out.println("父类静态变量i=" + i);
return "静态变量";
}
//静态语句块
static {
System.out.println("父类静态语句块1" + i);
}
//静态语句块
static {
System.out.println("父类静态语句块2");
}
//静态语句块
static {
System.out.println("父类静态语句块3");
}
//非静态变量
String j=pplcy();
public String pplcy() {
System.out.println("aa==" + aa);
aa = 11;
System.out.println("aa==" + aa);
System.out.println("父类非静态变量");
return "父类非静态变量";
}
//非静态语句块
{
System.out.println("父类非静态语句块1");
}
//非静态语句块
{
System.out.println("父类非静态语句块2");
}
//非静态方法
public void bDisplay() {
System.out.println("父类非静态方法");
return;
}
//静态方法
public static void bTest() {
System.out.println("父类静态方法");
return;
}
//构造函数
public FuJava3() {
System.out.println("父类构造函数");
}
public static void main(String args[]) {
ZiJava3 ziJava3=new ZiJava3();
}
}
ZiJava3的代码:
package top.wj.fuzi;
public class ZiJava3 extends FuJava3 {
int bb;
//静态变量
static String a = lcyhh();
public static String lcyhh() {
System.out.println("子类静态变量");
return "静态变量";
}
//静态语句块
static {
System.out.println("子类静态语句块1"+a);
}
//静态语句块
static {
System.out.println("子类静态语句块2");
}
//静态语句块
static {
System.out.println("子类静态语句块3");
}
//非静态语句块
{
System.out.println("子类非静态语句块1");
}
//非静态变量
String b = ppplcy();
public String ppplcy() {
bb = 3;
System.out.println("bb==" + bb);
System.out.println("子类非静态变量");
return "子类非静态变量";
}
//非静态语句块
{
System.out.println("子类非静态语句块2");
}
//非静态方法
public void bDisplay() {
System.out.println("子类非静态方法");
return;
}
//静态方法
public static void bTest() {
System.out.println("子类静态方法");
return;
}
//构造函数
public ZiJava3() {
System.out.println("子类构造函数");
}
}