静态代码块:
静态代码块什么时候执行,是由当前类被加载进内存的时候,什么时候当前类被加载进内存?
答:例如 描述好了Student对象,当 new Student(); 的时候,第一步:是把Student类加载进内存,第二步/或者是后续的工作才是 实例化操作处理等;
描述Student对象/实体:
package android.java.oop05;
public class Student {
private int id = 01;
private String name = "谢宁";
private int age = 90;
private String englishName = "xie lin";
/**
* 静态代码块:当前Student类,被加载进内存时 就会执行此静态代码块里面的主体{}
* 可以说是最先执行的,可以在这里做一些静态成员的初始化工作
*/
static {
System.out.println("静态代码块:当前Student类,被加载进内存时 就会执行此静态代码块里面的主体{}");
System.out.println("");
}
/**
* 构造函数是专门给对象实例化用的:
* new Student(); ---> public Student(){}
* ...
*
* 就算不写构造函数 也会默认有一个无参构造函数;
* 一旦写了 无参构造函数/有参构造函数 后 默认隐式的那个构造函数就不见了
*/
public Student() {
System.out.println("无参构造函数,我被new Student()实例化了");
showAllValue();
return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
}
/**
* 构造函数是专门给对象实例化用的:
* new Student(9); ---> public Student(int value){}
* ...
*
* 就算不写构造函数 也会默认有一个无参构造函数;
* 一旦写了 无参构造函数/有参构造函数 后 默认隐式的那个构造函数就不见了
*/
public Student(int value) {
System.out.println("有参构造函数,我被new Student(int类型的值)实例化了 value:" + value);
showAllValue();
return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
}
/**
* 构造函数是专门给对象实例化用的:
* new Student("刘俊", true); ---> public Student(String value1, boolean value2){}
* ...
*
* 就算不写构造函数 也会默认有一个无参构造函数;
* 一旦写了 无参构造函数/有参构造函数 后 默认隐式的那个构造函数就不见了
*/
public Student(String name, boolean isSuccess) {
System.out.println("无参构造函数,我被new Student(String类型的值, boolean类型的值)实例化了 name:" + name + " isSuccess:" + isSuccess);
showAllValue();
return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
}
// 打印所有的成员变量值
private void showAllValue() {
System.out.println("id:" + id);
System.out.println("name:" + name);
System.out.println("age:" + age);
System.out.println("englishName:" + englishName);
System.out.println("");
return; // 此方法默认就有这样一句return;隐式的,是可以让方法弹栈/结束;
}
}
main测试方法:
package android.java.oop05;
public class Demo01 {
public static void main(String [] args) {
// new Student(); ---> public Student(){}
Student student1 = new Student();
// new Student(9); ---> public Student(int value){}
Student student2 = new Student(908909);
// new Student("刘俊", true); ---> public Student(String value1, boolean value2){}
Student student3 = new Student("王刚蛋", true);
}
}
执行结果:
局部代码块:
package android.java.oop05;
public class Demo02 {
public static void main(String[] args) {
int age = 99;
double money = 10098903.9;
// ...
/**
* 局部代码块:可以简单的理解为:
* 1.不能调用的方法,不能执行的方法
* 1.没有方法名的方法,没有返回值得方法
* 1.可以放置在方法里面的方法
* 局部代码块在真实开放过程中,用的比较少,但它的作用有:
* 1.写在局部代码块中的属性,外界无法访问;
* 2.可以对复杂/混乱的代码,进校包裹,可读性很强;
*/
{
double superMoney = 999999999999.00;
}
/**
* 此时如果想访问superMoney,就访问不了,因为superMoney放置在了局部代码块中
*/
// superMoney
}
}