谈一谈static
【方便在没有创建对象的情况下进行调用】
一些代码
public class Main {
static int value = 33;
public static void main(String[] args) throws Exception{
//new Main()是生成的对象
new Main().printValue();
}
private void printValue(){
int value = 3;
//this只得就是Main类的对象
System.out.println(this.value);
}
}
结果:33
- this是指当前对象,当前对象是new Main()生成的对象,它的value是33;
- value为3的是局部变量,和this无关
//2.发现Test类继承于Base类,找Base类
public class Test extends Base{
//4.再类加载子类,执行static代码块
static{
System.out.println("test static");
}
//7.
public Test(){
System.out.println("test constructor");
}
public static void main(String[] args) {
//1.首先找到Test类
//5.先调用父类的构造器,然后再调用自身的构造器
new Test();
}
}
//3.找到Base类,类加载(看看有没有static代码块)
class Base{
//4.执行static块
static{
System.out.println("base static");
}
//6.
public Base(){
System.out.println("base constructor");
}
}
结果:
base static
test static
base constructor
test constructor
public class Test {
//6.生成对象的时候,必须先初始化父类的成员变量
Person person = new Person("Test");
//2.执行static
static{
System.out.println("test static");
}
//8.父类的构造器
public Test() {
System.out.println("test constructor");
}
//1.在Test类中,首先加载Test
public static void main(String[] args) {
//3.调用MyClass()类
new MyClass();
}
}
class Person{
//7.类加载,执行static代码块
static{
System.out.println("person static");
}
//9.父类成员变量
public Person(String str) {
System.out.println("person "+str);
}
}
//4.发现继承于Test类(此时Test类加载好了)
class MyClass extends Test {
Person person = new Person("MyClass");
//5.执行static代码块
static{
System.out.println("myclass static");
}
//10.子类的构造器
public MyClass() {
System.out.println("myclass constructor");
}
}
public class Test {
//1.
static{
System.out.println("test static 1");
}
public static void main(String[] args) {
}
//2.
static{
System.out.println("test static 2");
}
}