java学习day07

woefulmoon 发布于 26 天前 Java


今天的学习内容非常丰富,涉及类中的代码块、内部类、匿名内部类、Lambda 表达式、String、ArrayList、GUI 编程以及事件处理。

一、类中的成分:代码块

1. 静态代码块

静态代码块用

1
static

修饰,属于类,在类加载时自动执行一次,通常用于初始化静态变量。

示例代码:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class CodeDemo1 {
    public static String schoolName;
    public static String[] cards = new String[54];

    // 静态代码块
    static {
        System.out.println("===静态代码块执行了===");
        schoolName = "黑马程序员";
        cards[0] = "A";
        cards[1] = "2";
        cards[2] = "3";
    }

    public static void main(String[] args) {
        System.out.println("===main方法执行了===");
        System.out.println("schoolName = " + schoolName);
        System.out.println(Arrays.toString(cards));
    }
}

运行结果:


1
2
3
4
===静态代码块执行了===
===main方法执行了===
schoolName = 黑马程序员
[A, 2, 3, null, null, ..., null]

说明:

  • 静态代码块优先于
    1
    main

    方法执行,用于初始化静态资源。

2. 实例代码块

实例代码块没有

1
static

修饰,属于对象,每次创建对象时都会执行一次,用于初始化实例资源。

示例代码:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class CodeDemo2 {
    private String name;
    private String[] direction = new String[4];

    // 实例代码块
    {
        System.out.println("=========实例代码块执行了=========");
        name = "itheima";
        direction[0] = "北";
        direction[1] = "南";
        direction[2] = "东";
        direction[3] = "西";
    }

    public static void main(String[] args) {
        System.out.println("=======main方法执行了==========");
        new CodeDemo2();
        new CodeDemo2();
        new CodeDemo2();
    }
}

运行结果:


1
2
3
4
=======main方法执行了==========
=========实例代码块执行了=========
=========实例代码块执行了=========
=========实例代码块执行了=========

说明:

  • 实例代码块在每次创建对象时都会执行,优先于构造方法。

二、内部类

1. 成员内部类

成员内部类是定义在类中的类,可以访问外部类的成员。

示例代码:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Outer {
    private String name = "外部类";

    // 成员内部类
    class Inner {
        public void show() {
            System.out.println("访问外部类的 name:" + name);
        }
    }

    public static void main(String[] args) {
        Outer outer = new Outer();
        Outer.Inner inner = outer.new Inner();
        inner.show();
    }
}

运行结果:


1
访问外部类的 name:外部类

2. 静态内部类

静态内部类用

1
static

修饰,只能访问外部类的静态成员。

示例代码:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Outer {
    private static String name = "外部类";

    // 静态内部类
    static class Inner {
        public void show() {
            System.out.println("访问外部类的 name:" + name);
        }
    }

    public static void main(String[] args) {
        Outer.Inner inner = new Outer.Inner();
        inner.show();
    }
}

运行结果:


1
访问外部类的 name:外部类

3. 局部内部类

局部内部类定义在方法中,作用域仅限于该方法。

示例代码:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Outer {
    public void method() {
        class Inner {
            public void show() {
                System.out.println("局部内部类");
            }
        }

        Inner inner = new Inner();
        inner.show();
    }

    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.method();
    }
}

运行结果:


1
局部内部类

4. 匿名内部类

匿名内部类是一种没有名字的内部类,通常用于简化代码。

示例代码:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public abstract class Animal {
    public abstract void cry();
}

public class Test {
    public static void main(String[] args) {
        // 使用匿名内部类
        Animal a = new Animal() {
            @Override
            public void cry() {
                System.out.println("喵喵喵-----!!~~");
            }
        };
        a.cry();
    }
}

运行结果:


1
喵喵喵-----!!~~

三、GUI 编程与事件处理

1. 创建 GUI 窗口

使用

1
JFrame

创建一个简单的窗口。

示例代码:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import javax.swing.*;

public class JFrameDemo1 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("登录窗口");
        jf.setSize(400, 300);
        jf.setLocationRelativeTo(null);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        jf.add(panel);

        JButton btn = new JButton("登录");
        panel.add(btn);

        jf.setVisible(true);
    }
}

2. 事件处理

通过

1
ActionListener

监听按钮点击事件。

示例代码:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Test {
    public static void main(String[] args) {
        JFrame jf = new JFrame("登录窗口");
        jf.setSize(400, 300);
        jf.setLocationRelativeTo(null);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        jf.add(panel);

        JButton btn = new JButton("登录");
        panel.add(btn);

        // 添加事件监听器
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(jf, "登录成功!");
            }
        });

        jf.setVisible(true);
    }
}

四、总结

今天主要学习了类中的代码块、内部类、匿名内部类、GUI 编程以及事件处理。通过这些知识点,我们可以更好地组织代码,编写出简洁高效的 Java 程序。接下来,我会继续深入学习 Java 的更多高级特性,欢迎大家持续关注!