题记:以前总是对不会的东西逃避,但是不会早晚有一天还是会找到你,今天以此笔记做记!
分析两种情况的加载顺序,一种:单独类的加载顺序。二:子类继承父类的加载顺序
一:单独类的加载顺序
- 静态变量、静态代码块(从上到下的顺序加载)
- 类的非静态变量,非静态块(从上到下的顺序加载)
- 构造函数
二:子类继承父类的加载顺序
- 父类静态变量、父类静态代码块(从上到下的顺序加载)
- 子类静态变量、子类静态代码块(从上到下的顺序加载)
- 父类的非静态变量、父类的非静态代码块(从上到下的顺序加载)
- 父类的构造方法
- 子类的非静态变量、子类的非静态代码块(从上到下的顺序加载)
- 子类的构造方法
说明:
- 静态方法、非静态方法只有在调用的时候才会执行,不调用不会执行,静态方法是类的方法,非静态方法需要对象调用。
- 变量赋值问题,Java中局部变量需要显式赋值后才能使用,成员变量也可直接显式赋值,但是如果没有给初始值,当加载声明的变量时这个时候是默认值,默认值列表如下:
Boolean false
Char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
测试代码如下:
package top.wj.test;
public class FuClass {
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 FuClass(){
System.out.println("父类构造函数");
}
public static void main (String args[]) {
FuClass a=new FuClass();
// a.bDisplay();
// a.bTest();
}
}
二、子类继承父类的加载方式
如果单独的看懂了,子类继承父类的和上边一样直接给出代码
package top.wj.test;
public class ZiClass extends FuClass{
int bb;
//静态变量
static String a=lcyhh();
public static String lcyhh()
{
System.out.println("子类静态变量");
return "静态变量";
}
//静态语句块
static {
System.out.println("子类静态语句块1");
}
//静态语句块
static {
System.out.println("子类静态语句块2");
}
//静态语句块
static{
System.out.println("子类静态语句块3");
}
//非静态变量
String b=ppplcy();
public String ppplcy()
{
bb=3;
System.out.println("bb=="+bb);
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 ZiClass() {
System.out.println("子类构造函数");
}
}