单元2 Java语言基础

news/2024/9/21 17:20:11/文章来源:https://www.cnblogs.com/bcd589/p/18424136

单元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.langjava.utilcom.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图形用户界面编程类库,如窗口、按钮、文本框等
  7. javax.swing:包含Java图形用户界面编程类库,如窗口、按钮、文本框等,是AWT的扩展
  8. java.nio:包含Java非阻塞I/O类库,如缓冲区、通道等
  9. java.lang.reflect:包含Java反射机制类库,如Class、Method、Field等
  10. java.security:包含Java安全类库,如加密、签名等
  11. java.rmi:包含Java远程方法调用类库,如RMI接口
  12. java.rmi.registry:包含Java远程方法调用注册表类库,如Registry、LocateRegistry等
  13. java.rmi.server:包含Java远程方法调用服务器类库,如UnicastRemoteObject、Skeleton等
  14. java.text:包含Java文本处理类库,如日期时间格式化、数字格式化等
  15. java.time:包含Java日期时间类库,如LocalDate、LocalTime、LocalDateTime等
  16. java.util.concurrent:包含Java并发编程类库,如线程池、锁等
  17. java.util.logging:包含Java日志类库,如Logger、Handler等
  18. java.util.prefs:包含Java首选项类库,如Preferences等
  19. java.util.regex:包含Java正则表达式类库,如Pattern、Matcher等
  20. java.util.zip:包含Java压缩类库,如ZipInputStream、ZipOutputStream等
  21. javax.crypto:包含Java加密类库,如Cipher、SecretKey等
  22. javax.imageio:包含Java图像I/O类库,如ImageIO、ImageReader等
  23. javax.jws:包含Java Web服务类库,如@WebService、@WebMethod等
  24. javax.management:包含Java管理类库,如MBean、MBeanServer等
  25. 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

其中,arg1arg2arg3是传递给主函数的参数。在程序中,可以通过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方法。


2.2 基本数据类型

2.2.1 基本数据类型

Java中的基本数据类型包括以下几种:

  • 整型:byte、short、int、long
  • 浮点型:float、double
  • 布尔型:boolean
  • 字符型:char

2.2.2 基本数据类型的默认值

Java中基本数据类型的默认值如下:

  • 整型:0
  • 浮点型:0.0
  • 布尔型:false
  • 字符型:'\u0000'
  • 引用类型:null

2.2.3 基本数据类型的转换

Java中基本数据类型的转换包括以下几种:

  • 自动类型转换:将较小的数据类型转换为较大的数据类型,例如将byte转换为int。
  • 强制类型转换:将较大的数据类型转换为较小的数据类型,例如将int转换为byte。
  • 隐式类型转换:将基本数据类型转换为对应的包装类,例如将int转换为Integer。
  • 显式类型转换:将包装类转换为基本数据类型,例如将Integer转换为int。
  • 类型提升:将较小的数据类型提升为较大的数据类型,例如将byte和int相加时,byte会被提升为int。

2.2.4 基本数据类型的范围

Java中基本数据类型的范围如下:

  • byte:-128到127
  • short:-32,768到32,767
  • int:-231到231-1
  • long:-263到263-1
  • float:大约±3.40282347E+38F(有效位数为6-7位)
  • double:大约±1.79769313486231570E+308(有效位数为15位)
  • char:0到65535
  • boolean:true或false

2.2.5 基本数据类型的常量

Java中基本数据类型的常量包括以下几种:

  • 整型常量:例如10、-20、0x1A等。
  • 浮点型常量:例如3.14、-0.5、1.23E-4等。
  • 布尔型常量:true和false。
  • 字符型常量:例如'a'、'b'、'\u0000'等。
  • 说明
  • 字符型常量可以使用转义字符表示特殊字符,例如'\n'表示换行符,'\t'表示制表符。
  • '\u0000'表示一个空白字符,即在单引号之间没有任何字符。之所以能这样表示是因为,Java采用的是Unicode字符集,Unicode字符以\u开头,空白字符在Unicode码表中对应的值为'\u0000'。

2.2.6 基本数据类型的运算

Java中基本数据类型的运算包括以下几种:

  • 算术运算:加、减、乘、除、取余等。

  • 关系运算:大于、小于、等于、不等于、大于等于、小于等于等。

  • 逻辑运算:与、或、非、异或等。

  • 位运算:与、或、非、异或、左移、右移、无符号右移等。

    graph TD A(工业用地效率)-->B1(土地利用强度) A-->B2(土地经济效益) B1-->C1(容积率) B1-->C2(建筑系数) B1-->C3(亩均固定资本投入) B2-->D1(亩均工业产值) B2-->D2(亩均税收)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/801101.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

了解如何在 lt;lines (Modulojs) 中创建 API 支持的 Zelda BOTW 怪物画廊 Web 组件

模数教程回来了!大家好!暑假结束后,我带着 modulo 教程回来了。我正在制作更多教程 - 请继续关注。也就是说,如果您对我的下一个主题有任何特别的想法,请务必在评论中告诉我!我的上一篇教程是关于 api 驱动的 pokmon dance party 组件的超级快速且有趣的“仅 html,无 js…

Cortex-A7 MPCore 架构

Cortex-A7 MPCore 架构 1)Cortex-A7 MPCore 简介 Cortex-A7 MPcore 处理器支持 1~4 核,通常是和 Cortex-A15 组成 big.LITTLE 架构的,Cortex-A15 作为大核负责高性能运算,比如玩游戏啥的, Cortex-A7 负责普通应用,因为 CortexA7 省电。 Cortex-A7 本身性能也不弱,不要…

Zlmedia搭建简记

进入新公司之后,发现他们的视频播放使用的是ZlmediaKit这个工具,自己尝试使用了一下发现很好用,于是在自己机器上搭建了一个服务玩玩。 因为没有在线的摄像头,所以这里采用的是ffmpeg推送mp4文件作为视频流输入,推送到zlmedia服务,再利用zlmedia本身所带的拉流服务,最终…

C 风格字符串函数

▲《C++ Primer》 P109 我们无法保证 c_str 函数返回的数组一直有效,事实上,如果后续的操作改变了 string 的值就可能让之前返回的数组失去效用。 WARNING: 如果执行完 c_str() 函数后程序想一直都能使用其返回的数组,最好将该数组重新拷贝一份。

基于IDF的ESP32S3-LVGL DEMO移植

简介 ESP32-32出色的性价比,较好的性能与内存空间,可以好利用来完成GUI显示库的加载 LVGL LVGL是一款比较流行的致力于MCU与MPU创建漂亮UI的嵌入式图形库,免费且开源。 硬件 硬件采用的是正点原子的ESP32-S3 屏幕使用的是SPI通信方式,配合IO口控制(RST,A0),来实现LCD屏幕…

nginx: 按ip地址限流

一,以固定的速度提供服务 语法: 例子 limit_req_zone $binary_remote_addr zone=test:10m rate=2r/s;server { location / { limit_req zone=test; }} 语法: imit_req_zone 用于设置限流和共享内存区域的参数,格式为: limit_req_zone key zone rate。 key: 定…

Free5GC源码研究(2) - 单个NF的软件架构

前文我们总览了free5gc的总体软件架构。整一个free5gc系统又由几个NF(Network Function)组成,所以本文继续深入研究单个NF的软件架构。要研究NF的软件架构,最直接的方式是找一个简单的NF来回观摩。free5gc/ausf算是比较简单的一个,然而我发现了一个更简单的NF,叫做andy89…

一,初始 MyBatis-Plus

一,初始 MyBatis-Plus @目录一,初始 MyBatis-Plus1. MyBatis-Plus 的概述2. 入门配置第一个 MyBatis-Plus 案例3. 补充说明:3.1 通用 Mapper 接口介绍3.1.1 Mapper 接口的 “增删改查”3.1.1.1 查询所有记录3.1.1.2 插入一条数据3.1.1.3 删除一条数据3.1.1.4 更新一条数据3.…

[神经网络与深度学习笔记]LDA降维

LDA降维 LinearDiscriminant Analysis 线性判别分析,是一种有监督的线性降维算法。与PCA保持数据信息不同,LDA的目标是将原始数据投影到低维空间,尽量使同一类的数据聚集,不同类的数据尽可能分散 步骤:计算类内散度矩阵\(S_b\) 计算类间散度矩阵\(S_w\) 计算矩阵\(S_w^{-1…

C++ 指针和迭代器支持的操作

▲ 《C++ Primer》 P96 指针也都支持上面的操作。

代码整洁之道--读书笔记(14)

代码整洁之道简介: 本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更…

hexo安装后报错hexo 不是内部或外部命令,也不是可运行的程序 或批处理文件。

hexo问题 之前利用hexo和gitee搭建了一个博客,但是最近gitee的gitpage停止服务了,便想着在github上搭建一个。 在到安装hexo这一步的时候,一直报错hexo 不是内部或外部命令,也不是可运行的程序 或批处理文件。 我的所有安装步骤和环境变量发现都没有错,反复配置后去找了一…