静态代码块:
静态代码块什么时候执行,是由当前类被加载进内存的时候,什么时候当前类被加载进内存?
答:例如 描述好了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 } }