• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
安绍峰
独学而无友,则孤陋而寡闻。
博客园    首页    新随笔    联系   管理    订阅  订阅
第3周 3.1 Java基础语法

单元 2 Java 语言基础


2.1 Java 程序结构


2.1.1 包(package)

1. 包的作用

  • 管理类:防止命名冲突,避免命名冲突
  • 控制访问:通过访问控制权限来控制对类、接口、字段、方法的访问
  • 组织类:对类进行分类管理

2. 包的声明(创建)

  • 声明包:package 包名;

  • 导入包:import 包名; 或 import 包名.*;,··* 表示导入包中的所有类,如:import java.util.*; 导入 java.util 包中的所有类

    另外,也可以使用 import static 导入类的静态成员,>如:

    import static java.lang.Math.*;
    

    //说明: 导入 java.lang.Math 类中的所有静态成员

    还可以在程序中直接使用 java.lang 包中的类,如:

    System.out.println("Hello World!");
    

    因为 java.lang 包是 Java 的核心包,默认导入

  • 注意:包名应该全部小写,如 java.lang,java.util,com.baidu

3. 包的命名规则()

  • 全部小写字母:如 java.lang
  • 域名倒置:如 com.baidu
  • 类名:如 com.baidu.util.DateUtil
  • 扩展阅读:
    阿里巴巴 JAVA 开发手册
    史上最全的 Java 命名规范参考!
    Java 包(package)的作用、命名规范,以及包命名注意事项

3. Java 中常用的标准包

  1. java.lang:包含 Java 语言的核心类,如 String、Math、System 和 Thread,无需显式导入,自动导入
  2. java.util:包含 Java 工具类库,如集合框架、日期时间类和随机数生成器
  3. java. io:包含 Java 输入/输出类库,如文件读写、网络通信等
  4. java. net:包含 Java 网络编程类库,如 URL、Socket 等
  5. java.sql:包含 Java 数据库编程类库,如 JDBC 接口
  6. java.awt:包含 Java 图形用户界面编程类库,如窗口、按钮、文本框等
查看更多标准库
  1. javax.swing:包含 Java 图形用户界面编程类库,如窗口、按钮、文本框等,是 AWT 的扩展
  2. java.nio:包含 Java 非阻塞 I/O 类库,如缓冲区、通道等
  3. java.lang.reflect:包含 Java 反射机制类库,如 Class、Method、Field 等
  4. java.security:包含 Java 安全类库,如加密、签名等
  5. java.rmi:包含 Java 远程方法调用类库,如 RMI 接口
  6. java.rmi.registry:包含 Java 远程方法调用注册表类库,如 Registry、LocateRegistry 等
  7. java.rmi.server:包含 Java 远程方法调用服务器类库,如 UnicastRemoteObject、Skeleton 等
  8. java.text:包含 Java 文本处理类库,如日期时间格式化、数字格式化等
  9. java.time:包含 Java 日期时间类库,如 LocalDate、LocalTime、LocalDateTime 等
  10. java.util.concurrent:包含 Java 并发编程类库,如线程池、锁等
  11. java.util.logging:包含 Java 日志类库,如 Logger、Handler 等
  12. java.util.prefs:包含 Java 首选项类库,如 Preferences 等
  13. java.util.regex:包含 Java 正则表达式类库,如 Pattern、Matcher 等
  14. java.util.zip:包含 Java 压缩类库,如 ZipInputStream、ZipOutputStream 等
  15. javax.crypto:包含 Java 加密类库,如 Cipher、SecretKey 等
  16. javax.imageio:包含 Java 图像 I/O 类库,如 ImageIO、ImageReader 等
  17. javax.jws:包含 Java Web 服务类库,如@WebService、@WebMethod 等
  18. javax.management:包含 Java 管理类库,如 MBean、MBeanServer 等
  19. javax.naming:包含 Java 命名与目录接口类库,如 Context、InitialContext 等

2.1.2 主函数及其参数

1. 主函数

主函数是 Java 程序的入口点,格式如下:

public static void main(String[] args)

2. main 方法中的参数

args是一个字符串数组,用于接收命令行参数。在运行程序时,可以通过命令行传递参数给主函数。例如,假设有一个名为HelloWorld.java的 Java 程序,可以在命令行中运行以下命令:

java HelloWorld arg1 arg2 arg3

其中,arg1、arg2和arg3是传递给主函数的参数。在程序中,可以通过args数组来访问这些参数。例如,可以使用以下代码来打印出传递给主函数的所有参数:

for (String arg : args) {
    System.out.println(arg);
}

2.1.3 代码块

代码块是一组由大括号{}包围的语句。代码块可以用于定义一个作用域,其中声明的变量只在代码块内可见。代码块可以嵌套使用,即一个代码块可以包含另一个代码块。

代码块可以分为:普通代码块、静态代码块、构造代码块和同步代码块。下面进行前 3 种讲解:

1. 普通代码块

普通代码块是定义在方法体内的代码块,可以包含任意数量的语句。普通代码块可以用于定义一个作用域,其中声明的变量只在代码块内可见。例如:

public class HelloWorld {
    public static void main(String[] args) {
        {
            int x = 10;
            System.out.println(x);
        }
        // x 在这里不可见
    }
}

在上面的例子中,x变量只在第一个代码块内可见。

2. 静态代码块

静态代码块是定义在类中的代码块,使用static关键字修饰。静态代码块在类加载时执行,并且只执行一次。静态代码块可以用于初始化静态变量或执行其他静态初始化操作。例如:

public class HelloWorld {

    static int x;

    static {
        x = 10;
        System.out.println("静态代码块执行");
    }

    public static void main(String[] args) {
        System.out.println(x);
    }
}

在上面的例子中,静态代码块在类加载时执行,并初始化静态变量x。

3. 构造代码块

构造代码块是定义在类中的代码块,没有static关键字修饰。构造代码块在每次创建对象时都会执行,并且先于构造函数执行。构造代码块可以用于初始化实例变量或执行其他初始化操作。例如:

public class HelloWorld {

    int x;

    {
        x = 10;
        System.out.println("构造代码块执行");
    }

    public HelloWorld() {
        System.out.println("构造函数执行");
    }

    public static void main(String[] args) {
        HelloWorld obj = new HelloWorld();
        System.out.println(obj.x);
    }
}

在上面的例子中,构造代码块在每次创建对象时都会执行,并初始化实例变量x。

更多代码块,了解即可

4. 同步代码块

同步代码块是定义在方法体内的代码块,使用synchronized关键字修饰。同步代码块可以用于保证在多线程环境下,同一时刻只有一个线程可以执行代码块中的代码。例如:

public class HelloWorld {

    private int x = 0;

    public synchronized void increment() {
        x++;
    }
}

在上面的例子中,increment方法使用了synchronized关键字修饰,保证了在多线程环境下,同一时刻只有一个线程可以执行该方法中的代码。

5. try-with-resources 语句

try-with-resources 语句是 Java 7 引入的一种语法,用于自动关闭实现了AutoCloseable接口的资源。例如:

public class HelloWorld {

    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
            String line = br.readLine();
            System.out.println(line);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上面的例子中,BufferedReader对象在 try-with-resources 语句中创建,并在语句结束时自动关闭。

6. lambda 表达式

lambda 表达式是 Java 8 引入的一种语法,用于简化匿名内部类的编写。例如:

public class HelloWorld {

    public static void main(String[] args) {
        List<String> list = Arrays.asList("a", "b", "c");
        list.forEach(s -> System.out.println(s));
    }
}

在上面的例子中,forEach方法接受一个 lambda 表达式作为参数,用于对列表中的每个元素执行操作。

7. Stream API

Stream API 是 Java 8 引入的一种语法,用于处理集合数据。例如:

public class HelloWorld {

    public static void main(String[] args) {
        List<String> list = Arrays.asList("a", "b", "c");
        list.stream()
            .filter(s -> s.startsWith("a"))
            .forEach(System.out::println);
    }
}

在上面的例子中,stream方法将列表转换为流,filter方法对流中的元素进行过滤,forEach方法对流中的每个元素执行操作。

8. Optional

Optional 是 Java 8 引入的一种容器类,用于表示可能为空的对象。例如:

public class HelloWorld {

    public static void main(String[] args) {
        Optional<String> optional = Optional.of("Hello");
        optional.ifPresent(System.out::println);
    }
}

在上面的例子中,Optional.of方法创建一个包含指定值的 Optional 对象,ifPresent方法在 Optional 对象包含值时执行操作。

9. 接口默认方法

接口默认方法是在 Java 8 中引入的一种语法,允许在接口中定义默认方法。例如:

public interface MyInterface {
    default void myMethod() {
        System.out.println("Hello");
    }
}

在上面的例子中,myMethod方法是一个默认方法,可以在实现该接口的类中直接调用。

10. 方法引用

方法引用是 Java 8 引入的一种语法,用于简化 lambda 表达式的写法。例如:

public class HelloWorld {

    public static void main(String[] args) {
        List<String> list = Arrays.asList("a", "b", "c");
        list.forEach(System.out::println);
    }
}

在上面的例子中,System.out::println是一个方法引用,用于调用System.out对象的println方法。


独学而无友,则孤陋而寡闻。
posted on 2024-09-21 17:19  安绍峰  阅读(177)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3