代码块(1)

Block.java  ↓

package t;

public class Block extends BlockFather {
    /*
     * 静态块
     */
    static {
        System.out.println(" [静态块]");
    }

    /*
     * 构造块
     */
    {
        System.out.println(" [构造块]");
    }

    /*
     * 构造函数
     */
    public Block() {
        System.out.println(" [构造函数]");
    }

    /*
     * 静态变量
     */
    public static String staticField1;

    // 重写父类静态属性
    public static int fStaticField2;

    /*
     * 静态方法
     */
    public static void staticMethod() {
        System.out.println(" [静态方法]");
    }

    /*
     * 普通变量
     */
    public String feild;

    /*
     * 普通方法
     */
    public void method() {
        System.out.println(" [普通方法]");
    }

    /*
     * main方法
     */
    public static void main(String[] args) {
        System.out.println(" [main方法]");
    }
}

BlockFather.java  ↓

package t;

public class BlockFather {
    /*
     * 静态块
     */
    static {
        System.out.println("f[静态块]");
    }

    /*
     * 构造块
     */
    {
        System.out.println("f[构造块]");
    }

    /*
     * 构造函数
     */
    public BlockFather() {
        System.out.println("f[构造函数]");
    }

    /*
     * fStaticField
     */
    public static int fStaticField1;
    public static int fStaticField2;

}

TestBlock.java  ↓

package t;

public class TestBlock {

    public static void main(String[] args){

        // 1. new
//        new Block();

//        f[静态块]
//         [静态块]
//        f[构造块]
//        f[构造函数]
//         [构造块]
//         [构造函数]

        // 2. new new
//        new Block();
//        new Block();

//        f[静态块]
//         [静态块]
//        f[构造块]
//        f[构造函数]
//         [构造块]
//         [构造函数]
//        f[构造块]
//        f[构造函数]
//         [构造块]
//         [构造函数]

        // 3.1 使用(读取或修改)静态属性(子类)
//        String s = Block.staticField1;

//        f[静态块]
//         [静态块]

        // 3.2 使用(读取或修改)静态属性(父类&未重写)
//        int i = Block.fStaticField1;

//        f[静态块]

        // 3.3 使用(读取或修改)静态属性(父类&重写)
//        int i = Block.fStaticField2;

//        f[静态块]
//         [静态块]

        // 4. 调用静态方法
//        Block.staticMethod();

//        f[静态块]
//         [静态块]
//         [静态方法]

        // 5. 反射使用静态属性(完全同3)
//        try {
//            Block.class.getField("staticField").get(null);
//        } catch (IllegalArgumentException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        } catch (IllegalAccessException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        } catch (NoSuchFieldException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        } catch (SecurityException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        }

        // 6. 反射使用静态方法(同4)

//        try {
//            Block.class.getMethod("staticMethod", null).invoke(null, null);
//        } catch (IllegalAccessException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        } catch (IllegalArgumentException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        } catch (InvocationTargetException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        } catch (NoSuchMethodException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        } catch (SecurityException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        }

        // 7. 直接运行一个main函数入口的类

//      f[静态块]
//      [静态块]
//      [main方法]

    }

}

ps:

构造块和构造方法只有new 时执行

时间: 2024-10-25 17:34:08

代码块(1)的相关文章

修饰符-包-内部类-代码块执行顺序

1.访问权限修饰符     从大到小的顺序为:public--protected--default--private     private--只能在同一类中使用;     default--不用写出来,默认不加.可以被同一包中的类使用     protected--可以被不同包的子类使用     public--可以被不同包的其它类使用 2.各种修饰符的修饰对象(可修饰哪些:类/接口/方法/属性)(多个修饰符连用是可以没有顺序的!)     1)访问权限修饰符:public/default--

iOS学习之代码块(Block)

代码块(Block) (1)主要作用:将一段代码保存起来,在需要的地方调用即可. (2)全局变量在代码块中的使用: 全局变量可以在代码块中使用,同时也可以被改变,代码片段如下: 1 int local = 1;//注意:全局变量 2 void (^block0)(void) = ^(void){ 3 local ++; 4 NSLog(@"local = %d",local); 5 }; 6 block0(); 7 NSLog(@"外部 local = %d",lo

[Java基础]代码块

1. 2.构造代码块 public class CBlock { public CBlock()//构造函数 { i=300;//构造函数中初始化 } public int i=100;//显示初始化变量 {//构造代码块 i=200;//构造代码块中初始化变量 } } 从以下几点理解以上代码: java编译器编译一个java源文件的时候,会把成员变量的声明语句提前至一个类的最前端. 成员变量的初始化工作其实都在在构造函数中执行的. 一旦经过java编译器编译后,那么构造代码块的代码块就会被移动

Java(静态)变量和(静态)代码块的执行顺序

本文讨论Java中(静态)变量.(静态)代码块的执行顺序 首先创建3个类: 1.Foo类,用于打印变量 public class Foo { public Foo(String word) { System.out.println(word); } } 2.Parent类 public class Parent { static Foo FOO = new Foo("Parent's static parameter"); Foo foo = new Foo("Parent'

Java中的4种代码块

一.普通代码块 直接在一个方法中出现的{}就称为普通代码块,例子程序如下: public class CodeDemo01{ public static void main(String[] args){ //普通代码块 { int x = 10; System.out.println("x=" + x); } int x = 100; System.out.println("x=" + x); } } 二.构造代码块 直接在类中定义的没有加static关键字的代码

java学习教程之代码块

学编程吧java学习教程之代码块发布了,欢迎通过xuebiancheng8.com来访问 java中的代码块包括下面几种: 1.普通代码块 2.构造代码块 3.静态代码块 1.普通代码块很简单看下面这个例子: public class Test{ public static void main(String args[]){ { //此处就是普通代码块,普通代码块中的代码按顺序执行 System.out.println("hello"); } } } 2.构造代码块 public cl

vscode自定义代码块

vscode中设置自定义代码块打开首选项,选择用户代码片段,打开后选择编程语言选中后打开文件,按照格式编辑内容 "Print to console log": { "prefix": "csl", "body": [ "console.log('$1')" ], "description": "log output to console" },

java中静态代码块的用法—— static用法详解

(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用比如main方法就必须是静态的 这是程序入口两者的区别就是:静态代码块是自动执行的;静态方法是被调用的时候才执行的. 静态方法(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就

JavaEE初始化时静态代码块加载问题

1.使用java.exe命令运行某个类的时java.exe Person2.创建一个类的对象时Person p=new Person();3.访问类中的静态成员变量(赋值/获取值)System.out.println(Person.className);4.访问了类中的静态成员方法Person.method();5.创建类的子类对象的时候Student s=new Student();6.使用反射方式来强制创建某个类或接口对应的java.lang.Class对象System.out.printl

Java中普通代码块,构造代码块,静态代码块区别及代码示例

//普通代码块:在方法或语句中出现的{}就称为普通代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--"先出现先执行"public class CodeBlock01{ public static void main(String[] args){ { int x=3; System.out.println("1,普通代码块内的变量x="+x); } int x=1; System.out.println("主方法内的变量x="