1.被static修饰的内容被称为类内容 静态的
被static修饰的成员变量被称为类变量
被static修饰的成员方法被称为类方法
2.未使用static修饰的额内容被称为实例内容 非静态
未使用static修饰的成员变量被称为实例变量
未使用static修饰的成员方法被称为实例方法
在非静态中可以使用静态的页可以使用非静态的
在静态当中只能使用静态不能使用非静态的
使用static修饰之后数据变成共享的了,对象可以操作,类也可以进行操作,并且操作的是同一个数据
代码块
静态代码块`
static{
//随着类的加载而进行加载
//执行代码
}
实例代码块
{
//随着对象的创建而进行加载
}
类的加载顺序
父类的静态成员变量
父类的静态代码块
子类的静态成员变量
子类的静态代码块
父类当中的非静态成员变量
父类的实例代码块
子类的非静态变量
父类的构造函数
子类的实例代码块
子类的构造方法
1.静态变量
2.静态代码块
3.非静态变量
4.实例代码块
5.构造方法
//父类
package YH;
public class Fa {
public String name="zhangs";
public static String sex="男";
static {
System.out.println("父类的静态代码块");
}
{
System.out.println("父类的实例代码块");
}
public Fa() {
System.out.println("父类的构造方法");
}
}
//子类
package YH;
public class So extends Fa{
public String a;
public static String age="12";
static {
System.out.println("子类的静态代码块");
}
{
System.out.println("子类的实例代码块");
}
public So() {
System.out.println("子类的构造方法");
}
public static void main(String[] args) {
So s=new So();//实例代码块随着对象的创建而进行加载
}
}
我们知道静态代码块的加载是随着类的加载而执行,当执行main函数之前,StaticTest这个类被加载,而这个类又是继承自StaticDemo,因此会最先执行StaticDemo中的静态代码块,然后再执行StaticTest中的静态代码块,最后再执行main函数中的输出语句。
接下来我们再加上构造方法和非静态代码块,接下来的代码希望你能经常看看,那么静态代码块这块就足够了
package YH;
class StaticDemo{
//静态代码块
static {
System.out.println("父类的静态代码块");
}
//非静态代码块
{
System.out.println("父类的非静态代码块");
}
//构造方法
public StaticDemo() {
System.out.println("父类的构造方法");
}
}
public class StaticTest extends StaticDemo{
/**
* 静态代码块的特点
* 随着类的加载而执行,而且只执行一次
* 静态代码块执行顺序优先于main函数
*/
static {
System.out.println("子类的静态代码块");
}
{
System.out.println("子类的非静态代码块");
}
public StaticTest() {
System.out.println("子类的构造方法");
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
System.out.println("main函数");
new StaticTest();
}
}
你猜猜以上代码执行之后的输出结果是什么?我们来看最终的运行结果